diff options
author | Benjamin Peterson <benjamin@python.org> | 2008-11-25 04:07:45 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2008-11-25 04:07:45 (GMT) |
commit | b38e325e97eb4f52cce10572d699d42105c91334 (patch) | |
tree | 887997def57844fe8b281bf06112560e8312c06b | |
parent | 9e6310d9368dad33af584c214af7ac8ea3cda0fc (diff) | |
download | cpython-b38e325e97eb4f52cce10572d699d42105c91334.zip cpython-b38e325e97eb4f52cce10572d699d42105c91334.tar.gz cpython-b38e325e97eb4f52cce10572d699d42105c91334.tar.bz2 |
Merged revisions 67183,67191,67371 via svnmerge from
svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3
........
r67183 | benjamin.peterson | 2008-11-10 21:51:33 -0600 (Mon, 10 Nov 2008) | 1 line
handle 'import x as y' in fix_imports; this still needs more work...
........
r67191 | benjamin.peterson | 2008-11-11 17:24:51 -0600 (Tue, 11 Nov 2008) | 1 line
super() is good
........
r67371 | benjamin.peterson | 2008-11-24 16:02:00 -0600 (Mon, 24 Nov 2008) | 1 line
don't blow up in the metaclass fixer when assignments in the class statement aren't simple
........
-rw-r--r-- | Lib/lib2to3/fixes/fix_import.py | 9 | ||||
-rw-r--r-- | Lib/lib2to3/fixes/fix_metaclass.py | 7 | ||||
-rwxr-xr-x | Lib/lib2to3/tests/test_fixers.py | 26 |
3 files changed, 32 insertions, 10 deletions
diff --git a/Lib/lib2to3/fixes/fix_import.py b/Lib/lib2to3/fixes/fix_import.py index 6951546..58e9149 100644 --- a/Lib/lib2to3/fixes/fix_import.py +++ b/Lib/lib2to3/fixes/fix_import.py @@ -13,7 +13,7 @@ Becomes: # Local imports from .. import fixer_base from os.path import dirname, join, exists, pathsep -from ..fixer_util import FromImport +from ..fixer_util import FromImport, syms class FixImport(fixer_base.BaseFix): @@ -26,11 +26,14 @@ class FixImport(fixer_base.BaseFix): def transform(self, node, results): imp = results['imp'] - if unicode(imp).startswith('.'): + mod_name = unicode(imp.children[0] if imp.type == syms.dotted_as_name \ + else imp) + + if mod_name.startswith('.'): # Already a new-style import return - if not probably_a_local_import(unicode(imp), self.filename): + if not probably_a_local_import(mod_name, self.filename): # I guess this is a global import -- skip it! return diff --git a/Lib/lib2to3/fixes/fix_metaclass.py b/Lib/lib2to3/fixes/fix_metaclass.py index c2f4b7f..b508f5f 100644 --- a/Lib/lib2to3/fixes/fix_metaclass.py +++ b/Lib/lib2to3/fixes/fix_metaclass.py @@ -110,8 +110,11 @@ def find_metas(cls_node): if simple_node.type == syms.simple_stmt and simple_node.children: expr_node = simple_node.children[0] if expr_node.type == syms.expr_stmt and expr_node.children: - leaf_node = expr_node.children[0] - if leaf_node.value == '__metaclass__': + # Check if the expr_node is a simple assignment. + left_node = expr_node.children[0] + if isinstance(left_node, Leaf) and \ + left_node.value == '__metaclass__': + # We found a assignment to __metaclass__. fixup_simple_stmt(node, i, simple_node) remove_trailing_newline(simple_node) yield (node, i, simple_node) diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 1de7e1b..eb68f62 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -2622,7 +2622,7 @@ class Test_map(FixerTestCase): def check(self, b, a): self.unchanged("from future_builtins import map; " + b, a) - FixerTestCase.check(self, b, a) + super(Test_map, self).check(b, a) def test_prefix_preservation(self): b = """x = map( f, 'abc' )""" @@ -2729,7 +2729,7 @@ class Test_zip(FixerTestCase): def check(self, b, a): self.unchanged("from future_builtins import zip; " + b, a) - FixerTestCase.check(self, b, a) + super(Test_zip, self).check(b, a) def test_zip_basic(self): b = """x = zip(a, b, c)""" @@ -3274,7 +3274,7 @@ class Test_import(FixerTestCase): fixer = "import" def setUp(self): - FixerTestCase.setUp(self) + super(Test_import, self).setUp() # Need to replace fix_import's exists method # so we can check that it's doing the right thing self.files_checked = [] @@ -3293,9 +3293,9 @@ class Test_import(FixerTestCase): def check_both(self, b, a): self.always_exists = True - FixerTestCase.check(self, b, a) + super(Test_import, self).check(b, a) self.always_exists = False - FixerTestCase.unchanged(self, b) + super(Test_import, self).unchanged(b) def test_files_checked(self): def p(path): @@ -3372,6 +3372,11 @@ class Test_import(FixerTestCase): a = "from . import foo, bar" self.check_both(b, a) + def test_import_as(self): + b = "import foo as x" + a = "from . import foo as x" + self.check_both(b, a) + def test_dotted_import(self): b = "import foo.bar" a = "from . import foo.bar" @@ -3766,6 +3771,17 @@ class Test_metaclass(FixerTestCase): """ self.check(b, a) + b = """ + class X: + __metaclass__ = Meta + save.py = 23 + """ + a = """ + class X(metaclass=Meta): + save.py = 23 + """ + self.check(b, a) + class Test_getcwdu(FixerTestCase): |