|
|
"""Fixer that adds parentheses where they are required |
|
|
|
|
|
This converts ``[x for x in 1, 2]`` to ``[x for x in (1, 2)]``.""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from .. import fixer_base |
|
|
from ..fixer_util import LParen, RParen |
|
|
|
|
|
|
|
|
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 = "" |
|
|
target.insert_child(0, lparen) |
|
|
target.append_child(RParen()) |
|
|
|