summaryrefslogtreecommitdiffstats
path: root/Lib/lib2to3/fixes/fix_ws_comma.py
blob: 2ba1b49aab8b0ea55ac8b5a793162a95b423c706 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
"""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 basefix

class FixWsComma(basefix.BaseFix):

  explicit = True # The user must ask for this fixers

  PATTERN = """
  any<(not(',') any)+ ',' ((not(',') any)+ ',')* [not(',') any]>
  """

  COMMA = pytree.Leaf(token.COMMA, ",")
  COLON = pytree.Leaf(token.COLON, ":")
  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.get_prefix()
        if prefix.isspace() and "\n" not in prefix:
          child.set_prefix("")
        comma = True
      else:
        if comma:
          prefix = child.get_prefix()
          if not prefix:
            child.set_prefix(" ")
        comma = False
    return new