| | """ |
| | Optional fixer to transform set() calls to set literals. |
| | """ |
| |
|
| | |
| |
|
| | from lib2to3 import fixer_base, pytree |
| | from lib2to3.fixer_util import token, syms |
| |
|
| |
|
| |
|
| | class FixSetLiteral(fixer_base.BaseFix): |
| |
|
| | BM_compatible = True |
| | explicit = True |
| |
|
| | PATTERN = """power< 'set' trailer< '(' |
| | (atom=atom< '[' (items=listmaker< any ((',' any)* [',']) > |
| | | |
| | single=any) ']' > |
| | | |
| | atom< '(' items=testlist_gexp< any ((',' any)* [',']) > ')' > |
| | ) |
| | ')' > > |
| | """ |
| |
|
| | def transform(self, node, results): |
| | single = results.get("single") |
| | if single: |
| | |
| | fake = pytree.Node(syms.listmaker, [single.clone()]) |
| | single.replace(fake) |
| | items = fake |
| | else: |
| | items = results["items"] |
| |
|
| | |
| | literal = [pytree.Leaf(token.LBRACE, "{")] |
| | literal.extend(n.clone() for n in items.children) |
| | literal.append(pytree.Leaf(token.RBRACE, "}")) |
| | |
| | literal[-1].prefix = items.next_sibling.prefix |
| | maker = pytree.Node(syms.dictsetmaker, literal) |
| | maker.prefix = node.prefix |
| |
|
| | |
| | if len(maker.children) == 4: |
| | n = maker.children[2] |
| | n.remove() |
| | maker.children[-1].prefix = n.prefix |
| |
|
| | |
| | return maker |
| |
|