Merged revisions 77846 via svnmerge from

svn+ssh://pythondev@svn.python.org/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://pythondev@svn.python.org/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.
  ........
................
This commit is contained in:
Martin v. Löwis 2010-01-30 11:05:48 +00:00
parent 93f562c4f9
commit 16a060d1a2
3 changed files with 68 additions and 4 deletions

View file

@ -11,6 +11,10 @@ d.iterkeys() -> iter(d.keys())
d.iteritems() -> iter(d.items())
d.itervalues() -> iter(d.values())
d.viewkeys() -> d.keys()
d.viewitems() -> d.items()
d.viewvalues() -> d.values()
Except in certain very specific contexts: the iter() can be dropped
when the context is list(), sorted(), iter() or for...in; the list()
can be dropped when the context is list() or sorted() (but not iter()
@ -39,7 +43,8 @@ class FixDict(fixer_base.BaseFix):
PATTERN = """
power< head=any+
trailer< '.' method=('keys'|'items'|'values'|
'iterkeys'|'iteritems'|'itervalues') >
'iterkeys'|'iteritems'|'itervalues'|
'viewkeys'|'viewitems'|'viewvalues') >
parens=trailer< '(' ')' >
tail=any*
>
@ -52,7 +57,8 @@ class FixDict(fixer_base.BaseFix):
syms = self.syms
method_name = method.value
isiter = method_name.startswith("iter")
if isiter:
isview = method_name.startswith("view")
if isiter or isview:
method_name = method_name[4:]
assert method_name in ("keys", "items", "values"), repr(method)
head = [n.clone() for n in head]
@ -64,7 +70,7 @@ class FixDict(fixer_base.BaseFix):
prefix=method.prefix)]),
results["parens"].clone()]
new = pytree.Node(syms.power, args)
if not special:
if not (special or isview):
new.prefix = ""
new = Call(Name("iter" if isiter else "list"), [new])
if tail: