From fd0e763c4e71dd01d92df93ac829fe962dd4da68 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 10 Nov 2008 22:21:32 +0000 Subject: [PATCH] Merged revisions 67180 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ................ r67180 | benjamin.peterson | 2008-11-10 16:11:12 -0600 (Mon, 10 Nov 2008) | 29 lines Merged revisions 66985,67170,67173,67177-67179 via svnmerge from svn+ssh://pythondev@svn.python.org/sandbox/trunk/2to3/lib2to3 ........ r66985 | benjamin.peterson | 2008-10-20 16:43:46 -0500 (Mon, 20 Oct 2008) | 1 line no need to use nested try, except, finally ........ r67170 | benjamin.peterson | 2008-11-08 12:28:31 -0600 (Sat, 08 Nov 2008) | 1 line fix #4271: fix_imports didn't recognize imports with parenthesis (ie from x import (a, b)) ........ r67173 | benjamin.peterson | 2008-11-08 17:42:08 -0600 (Sat, 08 Nov 2008) | 1 line consolidate test ........ r67177 | benjamin.peterson | 2008-11-09 21:52:52 -0600 (Sun, 09 Nov 2008) | 1 line let the metclass fixer handle complex assignments in the class body gracefully ........ r67178 | benjamin.peterson | 2008-11-10 15:26:43 -0600 (Mon, 10 Nov 2008) | 1 line the metaclass fixers shouldn't die when bases are not a simple name ........ r67179 | benjamin.peterson | 2008-11-10 15:29:58 -0600 (Mon, 10 Nov 2008) | 1 line allow the fix_import pattern to catch from imports with parenthesis ........ ................ --- Lib/lib2to3/fixes/fix_import.py | 2 +- Lib/lib2to3/fixes/fix_imports.py | 4 ++-- Lib/lib2to3/fixes/fix_metaclass.py | 9 ++++---- Lib/lib2to3/refactor.py | 7 +++--- Lib/lib2to3/tests/test_fixers.py | 34 ++++++++++++++++++++++++++++++ 5 files changed, 44 insertions(+), 12 deletions(-) diff --git a/Lib/lib2to3/fixes/fix_import.py b/Lib/lib2to3/fixes/fix_import.py index 29b00318fe..6951546896 100644 --- a/Lib/lib2to3/fixes/fix_import.py +++ b/Lib/lib2to3/fixes/fix_import.py @@ -18,7 +18,7 @@ from ..fixer_util import FromImport class FixImport(fixer_base.BaseFix): PATTERN = """ - import_from< type='from' imp=any 'import' any > + import_from< type='from' imp=any 'import' ['('] any [')'] > | import_name< type='import' imp=any > """ diff --git a/Lib/lib2to3/fixes/fix_imports.py b/Lib/lib2to3/fixes/fix_imports.py index e7e7a75bbe..38e868b777 100644 --- a/Lib/lib2to3/fixes/fix_imports.py +++ b/Lib/lib2to3/fixes/fix_imports.py @@ -66,9 +66,9 @@ def build_pattern(mapping=MAPPING): yield """import_name< 'import' ((%s) | dotted_as_names< any* (%s) any* >) > """ % (mod_list, mod_list) - yield """import_from< 'from' (%s) 'import' + yield """import_from< 'from' (%s) 'import' ['('] ( any | import_as_name< any 'as' any > | - import_as_names< any* >) > + import_as_names< any* >) [')'] > """ % mod_name_list yield """import_name< 'import' dotted_as_name< (%s) 'as' any > > diff --git a/Lib/lib2to3/fixes/fix_metaclass.py b/Lib/lib2to3/fixes/fix_metaclass.py index 7479024b3d..c2f4b7f07f 100644 --- a/Lib/lib2to3/fixes/fix_metaclass.py +++ b/Lib/lib2to3/fixes/fix_metaclass.py @@ -35,8 +35,9 @@ def has_metaclass(parent): elif node.type == syms.simple_stmt and node.children: expr_node = 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__': + left_side = expr_node.children[0] + if isinstance(left_side, Leaf) and \ + left_side.value == '__metaclass__': return True return False @@ -165,12 +166,10 @@ class FixMetaclass(fixer_base.BaseFix): if node.children[3].type == syms.arglist: arglist = node.children[3] # Node(classdef, ['class', 'name', '(', 'Parent', ')', ':', suite]) - elif isinstance(node.children[3], Leaf): + else: parent = node.children[3].clone() arglist = Node(syms.arglist, [parent]) node.set_child(3, arglist) - else: - raise ValueError("Unexpected class inheritance arglist") elif len(node.children) == 6: # Node(classdef, ['class', 'name', '(', ')', ':', suite]) # 0 1 2 3 4 5 diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py index 8f7fe9cd61..4fe18bad41 100755 --- a/Lib/lib2to3/refactor.py +++ b/Lib/lib2to3/refactor.py @@ -363,10 +363,9 @@ class RefactoringTool(object): self.log_error("Can't create %s: %s", filename, err) return try: - try: - f.write(new_text) - except os.error, err: - self.log_error("Can't write %s: %s", filename, err) + f.write(new_text) + except os.error, err: + self.log_error("Can't write %s: %s", filename, err) finally: f.close() self.log_debug("Wrote changes to %s", filename) diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py index 76243bf60d..1de7e1ba74 100755 --- a/Lib/lib2to3/tests/test_fixers.py +++ b/Lib/lib2to3/tests/test_fixers.py @@ -1450,6 +1450,10 @@ class Test_imports(FixerTestCase): a = "from %s import foo, bar" % new self.check(b, a) + b = "from %s import (yes, no)" % old + a = "from %s import (yes, no)" % new + self.check(b, a) + def test_import_module_as(self): for old, new in self.modules.items(): b = "import %s as foo_bar" % old @@ -3345,6 +3349,10 @@ class Test_import(FixerTestCase): a = "from .foo import bar" self.check_both(b, a) + b = "from foo import (bar, baz)" + a = "from .foo import (bar, baz)" + self.check_both(b, a) + def test_dotted_from(self): b = "from green.eggs import ham" a = "from .green.eggs import ham" @@ -3624,6 +3632,12 @@ class Test_metaclass(FixerTestCase): """ self.unchanged(s) + s = """ + class X: + a[23] = 74 + """ + self.unchanged(s) + def test_comments(self): b = """ class X: @@ -3732,6 +3746,26 @@ class Test_metaclass(FixerTestCase): a = """class m(a, arg=23, metaclass=Meta): pass""" self.check(b, a) + b = """ + class X(expression(2 + 4)): + __metaclass__ = Meta + """ + a = """ + class X(expression(2 + 4), metaclass=Meta): + pass + """ + self.check(b, a) + + b = """ + class X(expression(2 + 4), x**4): + __metaclass__ = Meta + """ + a = """ + class X(expression(2 + 4), x**4, metaclass=Meta): + pass + """ + self.check(b, a) + class Test_getcwdu(FixerTestCase): -- 2.40.0