• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 """Fixer that changes 'a ,b' into 'a, b'.
2 
3 This also changes '{a :b}' into '{a: b}', but does not touch other
4 uses of colons.  It does not touch other uses of whitespace.
5 
6 """
7 
8 from .. import pytree
9 from ..pgen2 import token
10 from .. import fixer_base
11 
12 class 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, ",")
21     COLON = pytree.Leaf(token.COLON, ":")
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 "\n" not in prefix:
31                     child.prefix = ""
32                 comma = True
33             else:
34                 if comma:
35                     prefix = child.prefix
36                     if not prefix:
37                         child.prefix = " "
38                 comma = False
39         return new
40