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

Skip to content

Commit 16a060d

Browse files
committed
Merged revisions 77846 via svnmerge from
svn+ssh://[email protected]/python/trunk ................ r77846 | martin.v.loewis | 2010-01-30 11:56:23 +0100 (Sa, 30 Jan 2010) | 13 lines Merged revisions 77419,77435 via svnmerge from svn+ssh://[email protected]/sandbox/trunk/2to3/lib2to3 ........ r77419 | benjamin.peterson | 2010-01-10 21:39:48 +0100 (So, 10 Jan 2010) | 1 line enclose path in quotes to handle paths with spaces correctly #7666 ........ r77435 | alexandre.vassalotti | 2010-01-12 01:36:54 +0100 (Di, 12 Jan 2010) | 2 lines Issue #1967: Add fixer for dictionary views. ........ ................
1 parent 93f562c commit 16a060d

3 files changed

Lines changed: 68 additions & 4 deletions

File tree

Lib/lib2to3/fixes/fix_dict.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
d.iteritems() -> iter(d.items())
1212
d.itervalues() -> iter(d.values())
1313
14+
d.viewkeys() -> d.keys()
15+
d.viewitems() -> d.items()
16+
d.viewvalues() -> d.values()
17+
1418
Except in certain very specific contexts: the iter() can be dropped
1519
when the context is list(), sorted(), iter() or for...in; the list()
1620
can be dropped when the context is list() or sorted() (but not iter()
@@ -39,7 +43,8 @@ class FixDict(fixer_base.BaseFix):
3943
PATTERN = """
4044
power< head=any+
4145
trailer< '.' method=('keys'|'items'|'values'|
42-
'iterkeys'|'iteritems'|'itervalues') >
46+
'iterkeys'|'iteritems'|'itervalues'|
47+
'viewkeys'|'viewitems'|'viewvalues') >
4348
parens=trailer< '(' ')' >
4449
tail=any*
4550
>
@@ -52,7 +57,8 @@ def transform(self, node, results):
5257
syms = self.syms
5358
method_name = method.value
5459
isiter = method_name.startswith("iter")
55-
if isiter:
60+
isview = method_name.startswith("view")
61+
if isiter or isview:
5662
method_name = method_name[4:]
5763
assert method_name in ("keys", "items", "values"), repr(method)
5864
head = [n.clone() for n in head]
@@ -64,7 +70,7 @@ def transform(self, node, results):
6470
prefix=method.prefix)]),
6571
results["parens"].clone()]
6672
new = pytree.Node(syms.power, args)
67-
if not special:
73+
if not (special or isview):
6874
new.prefix = ""
6975
new = Call(Name("iter" if isiter else "list"), [new])
7076
if tail:

Lib/lib2to3/tests/test_fixers.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1215,6 +1215,14 @@ def test_prefix_preservation(self):
12151215
a = "[i for i in d. keys( ) ]"
12161216
self.check(b, a)
12171217

1218+
b = "if d. viewkeys ( ) : pass"
1219+
a = "if d. keys ( ) : pass"
1220+
self.check(b, a)
1221+
1222+
b = "[i for i in d. viewkeys( ) ]"
1223+
a = "[i for i in d. keys( ) ]"
1224+
self.check(b, a)
1225+
12181226
def test_trailing_comment(self):
12191227
b = "d.keys() # foo"
12201228
a = "list(d.keys()) # foo"
@@ -1234,6 +1242,16 @@ def test_trailing_comment(self):
12341242
]"""
12351243
self.check(b, a)
12361244

1245+
b = """[i for i in d.iterkeys() # foo
1246+
]"""
1247+
a = """[i for i in d.keys() # foo
1248+
]"""
1249+
self.check(b, a)
1250+
1251+
b = "d.viewitems() # foo"
1252+
a = "d.items() # foo"
1253+
self.check(b, a)
1254+
12371255
def test_unchanged(self):
12381256
for wrapper in fixer_util.consuming_calls:
12391257
s = "s = %s(d.keys())" % wrapper
@@ -1367,6 +1385,46 @@ def test_24(self):
13671385
a = "for x in list(h.keys())[0]: print x"
13681386
self.check(b, a)
13691387

1388+
def test_25(self):
1389+
b = "d.viewkeys()"
1390+
a = "d.keys()"
1391+
self.check(b, a)
1392+
1393+
def test_26(self):
1394+
b = "d.viewitems()"
1395+
a = "d.items()"
1396+
self.check(b, a)
1397+
1398+
def test_27(self):
1399+
b = "d.viewvalues()"
1400+
a = "d.values()"
1401+
self.check(b, a)
1402+
1403+
def test_14(self):
1404+
b = "[i for i in d.viewkeys()]"
1405+
a = "[i for i in d.keys()]"
1406+
self.check(b, a)
1407+
1408+
def test_15(self):
1409+
b = "(i for i in d.viewkeys())"
1410+
a = "(i for i in d.keys())"
1411+
self.check(b, a)
1412+
1413+
def test_17(self):
1414+
b = "iter(d.viewkeys())"
1415+
a = "iter(d.keys())"
1416+
self.check(b, a)
1417+
1418+
def test_18(self):
1419+
b = "list(d.viewkeys())"
1420+
a = "list(d.keys())"
1421+
self.check(b, a)
1422+
1423+
def test_19(self):
1424+
b = "sorted(d.viewkeys())"
1425+
a = "sorted(d.keys())"
1426+
self.check(b, a)
1427+
13701428
class Test_xrange(FixerTestCase):
13711429
fixer = "xrange"
13721430

Lib/lib2to3/tests/test_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,6 @@ def diff(fn, result):
206206
finally:
207207
f.close()
208208
try:
209-
return os.system("diff -u %s @" % fn)
209+
return os.system("diff -u %r @" % fn)
210210
finally:
211211
os.remove("@")

0 commit comments

Comments
 (0)