<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">"""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&lt; ('[' | '(')
            (listmaker&lt; any
                comp_for&lt;
                    'for' NAME 'in'
                    target=testlist_safe&lt; any (',' any)+ [',']
                     &gt;
                    [any]
                &gt;
            &gt;
            |
            testlist_gexp&lt; any
                comp_for&lt;
                    'for' NAME 'in'
                    target=testlist_safe&lt; any (',' any)+ [',']
                     &gt;
                    [any]
                &gt;
            &gt;)
        (']' | ')') &gt;
    """

    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())
</pre></body></html>