1"""Fixer that changes 'a ,b' into 'a, b'.
2
3This also changes '{a :b}' into '{a: b}', but does not touch other
4uses of colons.  It does not touch other uses of whitespace.
5
6"""
7
8from .. import pytree
9from ..pgen2 import token
10from .. import fixer_base
11
12class FixWsComma(fixer_base.BaseFix):
13
14    explicit = True # The user must ask for this fixers
15
16    PATTERN = """
17    any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]>
18    """
19
20    COMMA = pytree.Leaf(token.COMMA, u",")
21    COLON = pytree.Leaf(token.COLON, u":")
22    SEPS = (COMMA, COLON)
23
24    def transform(self, node, results):
25        new = node.clone()
26        comma = False
27        for child in new.children:
28            if child in self.SEPS:
29                prefix = child.prefix
30                if prefix.isspace() and u"\n" not in prefix:
31                    child.prefix = u""
32                comma = True
33            else:
34                if comma:
35                    prefix = child.prefix
36                    if not prefix:
37                        child.prefix = u" "
38                comma = False
39        return new
40