add fixer for reload() -> imp.reload() (closes #11797)\n\nPatch by Laurie Clark-Michalek and Berker Peksag

This commit is contained in:
Benjamin Peterson 2012-12-07 22:44:10 -05:00
parent e7f2186f99
commit 448e81b2da
7 changed files with 120 additions and 18 deletions

View File

@ -343,6 +343,10 @@ and off individually. They are described here in more detail.
Handles the move of :func:`reduce` to :func:`functools.reduce`.
.. 2to3fixer:: reload
Converts :func:`reload` to :func:`imp.reload`.
.. 2to3fixer:: renames
Changes :data:`sys.maxint` to :data:`sys.maxsize`.

View File

@ -129,6 +129,29 @@ def FromImport(package_name, name_leafs):
imp = Node(syms.import_from, children)
return imp
def ImportAndCall(node, results, names):
"""Returns an import statement and calls a method
of the module:
import module
module.name()"""
obj = results["obj"].clone()
if obj.type == syms.arglist:
newarglist = obj.clone()
else:
newarglist = Node(syms.arglist, [obj.clone()])
after = results["after"]
if after:
after = [n.clone() for n in after]
new = Node(syms.power,
Attr(Name(names[0]), Name(names[1])) +
[Node(syms.trailer,
[results["lpar"].clone(),
newarglist,
results["rpar"].clone()])] + after)
new.prefix = node.prefix
return new
###########################################################
### Determine whether a node represents a given literal

View File

@ -6,9 +6,8 @@
intern(s) -> sys.intern(s)"""
# Local imports
from .. import pytree
from .. import fixer_base
from ..fixer_util import Name, Attr, touch_import
from ..fixer_util import ImportAndCall, touch_import
class FixIntern(fixer_base.BaseFix):
@ -26,21 +25,7 @@ class FixIntern(fixer_base.BaseFix):
"""
def transform(self, node, results):
syms = self.syms
obj = results["obj"].clone()
if obj.type == syms.arglist:
newarglist = obj.clone()
else:
newarglist = pytree.Node(syms.arglist, [obj.clone()])
after = results["after"]
if after:
after = [n.clone() for n in after]
new = pytree.Node(syms.power,
Attr(Name("sys"), Name("intern")) +
[pytree.Node(syms.trailer,
[results["lpar"].clone(),
newarglist,
results["rpar"].clone()])] + after)
new.prefix = node.prefix
names = ('sys', 'intern')
new = ImportAndCall(node, results, names)
touch_import(None, 'sys', node)
return new

View File

@ -0,0 +1,28 @@
"""Fixer for reload().
reload(s) -> imp.reload(s)"""
# Local imports
from .. import fixer_base
from ..fixer_util import ImportAndCall, touch_import
class FixReload(fixer_base.BaseFix):
BM_compatible = True
order = "pre"
PATTERN = """
power< 'reload'
trailer< lpar='('
( not(arglist | argument<any '=' any>) obj=any
| obj=arglist<(not argument<any '=' any>) any ','> )
rpar=')' >
after=any*
>
"""
def transform(self, node, results):
names = ('imp', 'reload')
new = ImportAndCall(node, results, names)
touch_import(None, 'imp', node)
return new

View File

@ -282,6 +282,65 @@ class Test_apply(FixerTestCase):
b = """f(*args, **kwds)"""
self.check(a, b)
class Test_reload(FixerTestCase):
fixer = "reload"
def test(self):
b = """reload(a)"""
a = """import imp\nimp.reload(a)"""
self.check(b, a)
def test_comment(self):
b = """reload( a ) # comment"""
a = """import imp\nimp.reload( a ) # comment"""
self.check(b, a)
# PEP 8 comments
b = """reload( a ) # comment"""
a = """import imp\nimp.reload( a ) # comment"""
self.check(b, a)
def test_space(self):
b = """reload( a )"""
a = """import imp\nimp.reload( a )"""
self.check(b, a)
b = """reload( a)"""
a = """import imp\nimp.reload( a)"""
self.check(b, a)
b = """reload(a )"""
a = """import imp\nimp.reload(a )"""
self.check(b, a)
def test_unchanged(self):
s = """reload(a=1)"""
self.unchanged(s)
s = """reload(f, g)"""
self.unchanged(s)
s = """reload(f, *h)"""
self.unchanged(s)
s = """reload(f, *h, **i)"""
self.unchanged(s)
s = """reload(f, **i)"""
self.unchanged(s)
s = """reload(*h, **i)"""
self.unchanged(s)
s = """reload(*h)"""
self.unchanged(s)
s = """reload(**i)"""
self.unchanged(s)
s = """reload()"""
self.unchanged(s)
class Test_intern(FixerTestCase):
fixer = "intern"

View File

@ -214,6 +214,7 @@ David Cinege
Craig Citro
Gilles Civario
Chris Clark
Laurie Clark-Michalek
Mike Clarkson
Andrew Clegg
Brad Clements

View File

@ -503,6 +503,8 @@ Documentation
Tools/Demos
-----------
- Issue #11797: Add a 2to3 fixer that maps reload() to imp.reload().
- Issue #10966: Remove the concept of unexpected skipped tests.
- Issue #9893: Removed the Misc/Vim directory.