[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