1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- """Fixer that adds parentheses where they are required
- This converts ``[x for x in 1, 2]`` to ``[x for x in (1, 2)]``."""
- # By Taek Joo Kim and Benjamin Peterson
- # Local imports
- from .. import fixer_base
- from ..fixer_util import LParen, RParen
- # XXX This doesn't support nested for loops like [x for x in 1, 2 for x in 1, 2]
- class FixParen(fixer_base.BaseFix):
- BM_compatible = True
- PATTERN = """
- atom< ('[' | '(')
- (listmaker< any
- comp_for<
- 'for' NAME 'in'
- target=testlist_safe< any (',' any)+ [',']
- >
- [any]
- >
- >
- |
- testlist_gexp< any
- comp_for<
- 'for' NAME 'in'
- target=testlist_safe< any (',' any)+ [',']
- >
- [any]
- >
- >)
- (']' | ')') >
- """
- def transform(self, node, results):
- target = results["target"]
- lparen = LParen()
- lparen.prefix = target.prefix
- target.prefix = "" # Make it hug the parentheses
- target.insert_child(0, lparen)
- target.append_child(RParen())
|