10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi"""Fixer that changes 'a ,b' into 'a, b'. 20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiThis also changes '{a :b}' into '{a: b}', but does not touch other 40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiuses of colons. It does not touch other uses of whitespace. 50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""" 70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom .. import pytree 90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom ..pgen2 import token 100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom .. import fixer_base 110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass FixWsComma(fixer_base.BaseFix): 130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi explicit = True # The user must ask for this fixers 150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi PATTERN = """ 170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]> 180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi """ 190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi COMMA = pytree.Leaf(token.COMMA, u",") 210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi COLON = pytree.Leaf(token.COLON, u":") 220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi SEPS = (COMMA, COLON) 230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi 240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi def transform(self, node, results): 250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi new = node.clone() 260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi comma = False 270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi for child in new.children: 280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if child in self.SEPS: 290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prefix = child.prefix 300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if prefix.isspace() and u"\n" not in prefix: 310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi child.prefix = u"" 320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi comma = True 330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi else: 340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if comma: 350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi prefix = child.prefix 360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi if not prefix: 370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi child.prefix = u" " 380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi comma = False 390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi return new 40