| """Fixer that addes 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 = u"" # Make it hug the parentheses |
| target.insert_child(0, lparen) |
| target.append_child(RParen()) |