diff options
author | Benjamin Peterson <benjamin@python.org> | 2008-10-15 23:10:28 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2008-10-15 23:10:28 (GMT) |
commit | 6ae94ee299648c93ab76a97beec2943dcf050a2b (patch) | |
tree | c519c51f625293904c79946e289ccee2e14c0b11 /Lib/lib2to3/fixes | |
parent | 1fb84519b1efa71a02c6d63800e47937922e6483 (diff) | |
download | cpython-6ae94ee299648c93ab76a97beec2943dcf050a2b.zip cpython-6ae94ee299648c93ab76a97beec2943dcf050a2b.tar.gz cpython-6ae94ee299648c93ab76a97beec2943dcf050a2b.tar.bz2 |
Merged revisions 66805,66841,66860,66884-66886,66893,66907,66910 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r66805 | benjamin.peterson | 2008-10-04 20:11:02 -0500 (Sat, 04 Oct 2008) | 1 line
mention what the fixes directory is for
........
r66841 | benjamin.peterson | 2008-10-07 17:48:12 -0500 (Tue, 07 Oct 2008) | 1 line
use assertFalse and assertTrue
........
r66860 | benjamin.peterson | 2008-10-08 16:05:07 -0500 (Wed, 08 Oct 2008) | 1 line
instead of abusing the pattern matcher, use start_tree to find a next binding
........
r66884 | benjamin.peterson | 2008-10-13 15:50:30 -0500 (Mon, 13 Oct 2008) | 1 line
don't print tokens to stdout when -v is given
........
r66885 | benjamin.peterson | 2008-10-13 16:28:57 -0500 (Mon, 13 Oct 2008) | 1 line
add the -x option to disable fixers
........
r66886 | benjamin.peterson | 2008-10-13 16:33:53 -0500 (Mon, 13 Oct 2008) | 1 line
cut down on some crud
........
r66893 | benjamin.peterson | 2008-10-14 17:16:54 -0500 (Tue, 14 Oct 2008) | 1 line
add an optional set literal fixer
........
r66907 | benjamin.peterson | 2008-10-15 16:59:41 -0500 (Wed, 15 Oct 2008) | 1 line
don't write backup files by default
........
r66910 | benjamin.peterson | 2008-10-15 17:43:10 -0500 (Wed, 15 Oct 2008) | 1 line
add the -n option; it stops backupfiles from being written
........
Diffstat (limited to 'Lib/lib2to3/fixes')
-rw-r--r-- | Lib/lib2to3/fixes/fix_next.py | 15 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_set_literal.py | 52 |
2 files changed, 59 insertions, 8 deletions
diff --git a/Lib/lib2to3/fixes/fix_next.py b/Lib/lib2to3/fixes/fix_next.py index 9791333..9f1861e 100644 --- a/Lib/lib2to3/fixes/fix_next.py +++ b/Lib/lib2to3/fixes/fix_next.py @@ -28,15 +28,19 @@ class FixNext(fixer_base.BaseFix): any* > > | global=global_stmt< 'global' any* 'next' any* > - | - mod=file_input< any+ > """ order = "pre" # Pre-order tree traversal def start_tree(self, tree, filename): super(FixNext, self).start_tree(tree, filename) - self.shadowed_next = False + + n = find_binding('next', tree) + if n: + self.warning(n, bind_warning) + self.shadowed_next = True + else: + self.shadowed_next = False def transform(self, node, results): assert results @@ -69,11 +73,6 @@ class FixNext(fixer_base.BaseFix): elif "global" in results: self.warning(node, bind_warning) self.shadowed_next = True - elif mod: - n = find_binding('next', mod) - if n: - self.warning(n, bind_warning) - self.shadowed_next = True ### The following functions help test if node is part of an assignment diff --git a/Lib/lib2to3/fixes/fix_set_literal.py b/Lib/lib2to3/fixes/fix_set_literal.py new file mode 100644 index 0000000..414b1df --- /dev/null +++ b/Lib/lib2to3/fixes/fix_set_literal.py @@ -0,0 +1,52 @@ +""" +Optional fixer to transform set() calls to set literals. +""" + +# Author: Benjamin Peterson + +from lib2to3 import fixer_base, pytree +from lib2to3.fixer_util import token, syms + + + +class FixSetLiteral(fixer_base.BaseFix): + + 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: + # Make a fake listmaker + fake = pytree.Node(syms.listmaker, [single.clone()]) + single.replace(fake) + items = fake + else: + items = results["items"] + + # Build the contents of the literal + literal = [pytree.Leaf(token.LBRACE, "{")] + literal.extend(n.clone() for n in items.children) + literal.append(pytree.Leaf(token.RBRACE, "}")) + # Set the prefix of the right brace to that of the ')' or ']' + literal[-1].set_prefix(items.get_next_sibling().get_prefix()) + maker = pytree.Node(syms.dictsetmaker, literal) + maker.set_prefix(node.get_prefix()) + + # If the original was a one tuple, we need to remove the extra comma. + if len(maker.children) == 4: + n = maker.children[2] + n.remove() + maker.children[-1].set_prefix(n.get_prefix()) + + # Finally, replace the set call with our shiny new literal. + return maker |