"""Fixer that changes 'a ,b' into 'a, b'. | |
This also changes '{a :b}' into '{a: b}', but does not touch other | |
uses of colons. It does not touch other uses of whitespace. | |
""" | |
from .. import pytree | |
from ..pgen2 import token | |
from .. import fixer_base | |
class FixWsComma(fixer_base.BaseFix): | |
explicit = True # The user must ask for this fixers | |
PATTERN = """ | |
any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]> | |
""" | |
COMMA = pytree.Leaf(token.COMMA, u",") | |
COLON = pytree.Leaf(token.COLON, u":") | |
SEPS = (COMMA, COLON) | |
def transform(self, node, results): | |
new = node.clone() | |
comma = False | |
for child in new.children: | |
if child in self.SEPS: | |
prefix = child.prefix | |
if prefix.isspace() and u"\n" not in prefix: | |
child.prefix = u"" | |
comma = True | |
else: | |
if comma: | |
prefix = child.prefix | |
if not prefix: | |
child.prefix = u" " | |
comma = False | |
return new |