Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 448e81b

Browse files
committed
add fixer for reload() -> imp.reload() (closes #11797)\n\nPatch by Laurie Clark-Michalek and Berker Peksag
1 parent e7f2186 commit 448e81b

7 files changed

Lines changed: 120 additions & 18 deletions

File tree

Doc/library/2to3.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,10 @@ and off individually. They are described here in more detail.
343343
344344
Handles the move of :func:`reduce` to :func:`functools.reduce`.
345345
346+
.. 2to3fixer:: reload
347+
348+
Converts :func:`reload` to :func:`imp.reload`.
349+
346350
.. 2to3fixer:: renames
347351
348352
Changes :data:`sys.maxint` to :data:`sys.maxsize`.

Lib/lib2to3/fixer_util.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,29 @@ def FromImport(package_name, name_leafs):
129129
imp = Node(syms.import_from, children)
130130
return imp
131131

132+
def ImportAndCall(node, results, names):
133+
"""Returns an import statement and calls a method
134+
of the module:
135+
136+
import module
137+
module.name()"""
138+
obj = results["obj"].clone()
139+
if obj.type == syms.arglist:
140+
newarglist = obj.clone()
141+
else:
142+
newarglist = Node(syms.arglist, [obj.clone()])
143+
after = results["after"]
144+
if after:
145+
after = [n.clone() for n in after]
146+
new = Node(syms.power,
147+
Attr(Name(names[0]), Name(names[1])) +
148+
[Node(syms.trailer,
149+
[results["lpar"].clone(),
150+
newarglist,
151+
results["rpar"].clone()])] + after)
152+
new.prefix = node.prefix
153+
return new
154+
132155

133156
###########################################################
134157
### Determine whether a node represents a given literal

Lib/lib2to3/fixes/fix_intern.py

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@
66
intern(s) -> sys.intern(s)"""
77

88
# Local imports
9-
from .. import pytree
109
from .. import fixer_base
11-
from ..fixer_util import Name, Attr, touch_import
10+
from ..fixer_util import ImportAndCall, touch_import
1211

1312

1413
class FixIntern(fixer_base.BaseFix):
@@ -26,21 +25,7 @@ class FixIntern(fixer_base.BaseFix):
2625
"""
2726

2827
def transform(self, node, results):
29-
syms = self.syms
30-
obj = results["obj"].clone()
31-
if obj.type == syms.arglist:
32-
newarglist = obj.clone()
33-
else:
34-
newarglist = pytree.Node(syms.arglist, [obj.clone()])
35-
after = results["after"]
36-
if after:
37-
after = [n.clone() for n in after]
38-
new = pytree.Node(syms.power,
39-
Attr(Name("sys"), Name("intern")) +
40-
[pytree.Node(syms.trailer,
41-
[results["lpar"].clone(),
42-
newarglist,
43-
results["rpar"].clone()])] + after)
44-
new.prefix = node.prefix
28+
names = ('sys', 'intern')
29+
new = ImportAndCall(node, results, names)
4530
touch_import(None, 'sys', node)
4631
return new

Lib/lib2to3/fixes/fix_reload.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""Fixer for reload().
2+
3+
reload(s) -> imp.reload(s)"""
4+
5+
# Local imports
6+
from .. import fixer_base
7+
from ..fixer_util import ImportAndCall, touch_import
8+
9+
10+
class FixReload(fixer_base.BaseFix):
11+
BM_compatible = True
12+
order = "pre"
13+
14+
PATTERN = """
15+
power< 'reload'
16+
trailer< lpar='('
17+
( not(arglist | argument<any '=' any>) obj=any
18+
| obj=arglist<(not argument<any '=' any>) any ','> )
19+
rpar=')' >
20+
after=any*
21+
>
22+
"""
23+
24+
def transform(self, node, results):
25+
names = ('imp', 'reload')
26+
new = ImportAndCall(node, results, names)
27+
touch_import(None, 'imp', node)
28+
return new

Lib/lib2to3/tests/test_fixers.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,65 @@ def test_space_2(self):
282282
b = """f(*args, **kwds)"""
283283
self.check(a, b)
284284

285+
class Test_reload(FixerTestCase):
286+
fixer = "reload"
287+
288+
def test(self):
289+
b = """reload(a)"""
290+
a = """import imp\nimp.reload(a)"""
291+
self.check(b, a)
292+
293+
def test_comment(self):
294+
b = """reload( a ) # comment"""
295+
a = """import imp\nimp.reload( a ) # comment"""
296+
self.check(b, a)
297+
298+
# PEP 8 comments
299+
b = """reload( a ) # comment"""
300+
a = """import imp\nimp.reload( a ) # comment"""
301+
self.check(b, a)
302+
303+
def test_space(self):
304+
b = """reload( a )"""
305+
a = """import imp\nimp.reload( a )"""
306+
self.check(b, a)
307+
308+
b = """reload( a)"""
309+
a = """import imp\nimp.reload( a)"""
310+
self.check(b, a)
311+
312+
b = """reload(a )"""
313+
a = """import imp\nimp.reload(a )"""
314+
self.check(b, a)
315+
316+
def test_unchanged(self):
317+
s = """reload(a=1)"""
318+
self.unchanged(s)
319+
320+
s = """reload(f, g)"""
321+
self.unchanged(s)
322+
323+
s = """reload(f, *h)"""
324+
self.unchanged(s)
325+
326+
s = """reload(f, *h, **i)"""
327+
self.unchanged(s)
328+
329+
s = """reload(f, **i)"""
330+
self.unchanged(s)
331+
332+
s = """reload(*h, **i)"""
333+
self.unchanged(s)
334+
335+
s = """reload(*h)"""
336+
self.unchanged(s)
337+
338+
s = """reload(**i)"""
339+
self.unchanged(s)
340+
341+
s = """reload()"""
342+
self.unchanged(s)
343+
285344
class Test_intern(FixerTestCase):
286345
fixer = "intern"
287346

Misc/ACKS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ David Cinege
214214
Craig Citro
215215
Gilles Civario
216216
Chris Clark
217+
Laurie Clark-Michalek
217218
Mike Clarkson
218219
Andrew Clegg
219220
Brad Clements

Misc/NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,8 @@ Documentation
503503
Tools/Demos
504504
-----------
505505

506+
- Issue #11797: Add a 2to3 fixer that maps reload() to imp.reload().
507+
506508
- Issue #10966: Remove the concept of unexpected skipped tests.
507509

508510
- Issue #9893: Removed the Misc/Vim directory.

0 commit comments

Comments
 (0)