[Python-checkins] r54303 - in sandbox/trunk/2to3: fixes/basefix.py refactor.py tests/test_fixers.py

collin.winter python-checkins at python.org
Mon Mar 12 21:12:39 CET 2007


Author: collin.winter
Date: Mon Mar 12 21:12:38 2007
New Revision: 54303
Modified:
 sandbox/trunk/2to3/fixes/basefix.py
 sandbox/trunk/2to3/refactor.py
 sandbox/trunk/2to3/tests/test_fixers.py
Log:
Add start_tree() and finish_tree() methods to BaseFix to make it easier for fixers to maintain tree-wide state. Also, make numbers a fixer attribute (instead of a global), using start_tree() to initialize it. This has the advantage that tests that rely on new_name() are no longer dependent on test order.
Modified: sandbox/trunk/2to3/fixes/basefix.py
==============================================================================
--- sandbox/trunk/2to3/fixes/basefix.py	(original)
+++ sandbox/trunk/2to3/fixes/basefix.py	Mon Mar 12 21:12:38 2007
@@ -12,7 +12,6 @@
 import pygram
 
 # For new_name()
-numbers = itertools.count(1)
 
 class BaseFix(object):
 
@@ -29,6 +28,7 @@
 options = None # Options object passed to initializer
 filename = None # The filename (set by set_filename)
 logger = None # A logger (set by set_filename)
+ numbers = itertools.count(1) # For new_name()
 used_names = set() # A set of all used NAMEs
 
 # Shortcut for access to Python grammar symbols
@@ -92,7 +92,7 @@
 """
 name = template
 while name in self.used_names:
- name = template + str(numbers.next())
+ name = template + str(self.numbers.next())
 self.used_names.add(name)
 return name
 
@@ -110,3 +110,23 @@
 self.logger.warning(msg % (lineno, for_output))
 if reason:
 self.logger.warning(reason)
+
+ def start_tree(self, tree, filename):
+ """Some fixers need to maintain tree-wide state.
+ This method is called once, at the start of tree fix-up.
+ 
+ tree - the root node of the tree to be processed.
+ filename - the name of the file the tree came from.
+ """
+ self.used_names = tree.used_names
+ self.set_filename(filename)
+ self.numbers = itertools.count(1)
+
+ def finish_tree(self, tree, filename):
+ """Some fixers need to maintain tree-wide state.
+ This method is called once, at the conclusion of tree fix-up.
+ 
+ tree - the root node of the tree to be processed.
+ filename - the name of the file the tree came from.
+ """
+ pass
Modified: sandbox/trunk/2to3/refactor.py
==============================================================================
--- sandbox/trunk/2to3/refactor.py	(original)
+++ sandbox/trunk/2to3/refactor.py	Mon Mar 12 21:12:38 2007
@@ -216,8 +216,7 @@
 def refactor_tree(self, tree, filename):
 """Refactors a parse tree (modifying the tree in place)."""
 for fixer in self.fixers:
- fixer.set_filename(filename)
- fixer.used_names = tree.used_names
+ fixer.start_tree(tree, filename)
 changes = 0
 for node in tree.post_order():
 for fixer in self.fixers:
@@ -226,6 +225,8 @@
 if new is not None and new != node:
 node.replace(new)
 changes += 1
+ for fixer in self.fixers:
+ fixer.finish_tree(tree, filename)
 return changes
 
 def write_file(self, new_text, filename, old_text=None):
Modified: sandbox/trunk/2to3/tests/test_fixers.py
==============================================================================
--- sandbox/trunk/2to3/tests/test_fixers.py	(original)
+++ sandbox/trunk/2to3/tests/test_fixers.py	Mon Mar 12 21:12:38 2007
@@ -17,7 +17,7 @@
 import refactor
 
 # We wrap the RefactoringTool's fixer objects so we can intercept
-# the call to set_filename() and so modify the fixers' logging objects.
+# the call to start_tree() and so modify the fixers' logging objects.
 # This allows us to make sure that certain code chunks produce certain
 # warnings.
 class Fixer(object):
@@ -27,9 +27,9 @@
 
 def __getattr__(self, attr):
 return getattr(self.fixer, attr)
-
- def set_filename(self, filename):
- self.fixer.set_filename(filename)
+ 
+ def start_tree(self, tree, filename):
+ self.fixer.start_tree(tree, filename)
 self.fixer.logger.addHandler(self.handler)
 
 class Options:
@@ -527,8 +527,8 @@
 a = """
 try:
 pass
- except Exception as xxx_todo_changeme1:
- (a, b) = xxx_todo_changeme1.message
+ except Exception as xxx_todo_changeme:
+ (a, b) = xxx_todo_changeme.message
 pass"""
 self.check(b, a)
 
@@ -542,8 +542,8 @@
 a = """
 try:
 pass
- except Exception as xxx_todo_changeme2:
- d[5] = xxx_todo_changeme2
+ except Exception as xxx_todo_changeme:
+ d[5] = xxx_todo_changeme
 pass"""
 self.check(b, a)
 
@@ -557,8 +557,8 @@
 a = """
 try:
 pass
- except Exception as xxx_todo_changeme3:
- a.foo = xxx_todo_changeme3
+ except Exception as xxx_todo_changeme:
+ a.foo = xxx_todo_changeme
 pass"""
 self.check(b, a)
 
@@ -572,8 +572,8 @@
 a = """
 try:
 pass
- except Exception as xxx_todo_changeme4:
- a().foo = xxx_todo_changeme4
+ except Exception as xxx_todo_changeme:
+ a().foo = xxx_todo_changeme
 pass"""
 self.check(b, a)
 
@@ -1134,8 +1134,8 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme5):
- ((a, b), c) = xxx_todo_changeme5
+ def foo(xxx_todo_changeme):
+ ((a, b), c) = xxx_todo_changeme
 x = 5"""
 self.check(b, a)
 
@@ -1145,8 +1145,8 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme6, d):
- ((a, b), c) = xxx_todo_changeme6
+ def foo(xxx_todo_changeme, d):
+ ((a, b), c) = xxx_todo_changeme
 x = 5"""
 self.check(b, a)
 
@@ -1156,8 +1156,8 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme7, d) -> e:
- ((a, b), c) = xxx_todo_changeme7
+ def foo(xxx_todo_changeme, d) -> e:
+ ((a, b), c) = xxx_todo_changeme
 x = 5"""
 self.check(b, a)
 
@@ -1166,7 +1166,7 @@
 def foo(((a, b), c)): x = 5; y = 7"""
 
 a = """
- def foo(xxx_todo_changeme15): ((a, b), c) = xxx_todo_changeme15; x = 5; y = 7"""
+ def foo(xxx_todo_changeme): ((a, b), c) = xxx_todo_changeme; x = 5; y = 7"""
 self.check(b, a)
 
 def test_keywords(self):
@@ -1175,8 +1175,8 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme10, d, e=5) -> z:
- ((a, b), c) = xxx_todo_changeme10
+ def foo(xxx_todo_changeme, d, e=5) -> z:
+ ((a, b), c) = xxx_todo_changeme
 x = 5"""
 self.check(b, a)
 
@@ -1186,8 +1186,8 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme16, d, *vargs, **kwargs) -> z:
- ((a, b), c) = xxx_todo_changeme16
+ def foo(xxx_todo_changeme, d, *vargs, **kwargs) -> z:
+ ((a, b), c) = xxx_todo_changeme
 x = 5"""
 self.check(b, a)
 
@@ -1197,9 +1197,9 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme11, xxx_todo_changeme12) -> z:
- ((a, b), c) = xxx_todo_changeme11
- (d, e, f) = xxx_todo_changeme12
+ def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z:
+ ((a, b), c) = xxx_todo_changeme
+ (d, e, f) = xxx_todo_changeme1
 x = 5"""
 self.check(b, a)
 
@@ -1209,9 +1209,9 @@
 x = 5"""
 
 a = """
- def foo(x, xxx_todo_changeme13, d, xxx_todo_changeme14, y) -> z:
- ((a, b), c) = xxx_todo_changeme13
- (e, f, g) = xxx_todo_changeme14
+ def foo(x, xxx_todo_changeme, d, xxx_todo_changeme1, y) -> z:
+ ((a, b), c) = xxx_todo_changeme
+ (e, f, g) = xxx_todo_changeme1
 x = 5"""
 self.check(b, a)
 
@@ -1222,10 +1222,10 @@
 x = 5"""
 
 a = """
- def foo(xxx_todo_changeme8, xxx_todo_changeme9) -> z:
+ def foo(xxx_todo_changeme, xxx_todo_changeme1) -> z:
 "foo foo foo foo"
- ((a, b), c) = xxx_todo_changeme8
- (d, e, f) = xxx_todo_changeme9
+ ((a, b), c) = xxx_todo_changeme
+ (d, e, f) = xxx_todo_changeme1
 x = 5"""
 self.check(b, a)
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /