~ubuntu-branches/ubuntu/karmic/python3.0/karmic

« back to all changes in this revision

Viewing changes to Lib/lib2to3/fixes/fix_isinstance.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-02-16 17:18:23 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20090216171823-1d5cm5qnnjvmnzzm
Tags: 3.0.1-0ubuntu1
New upstream version.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright 2008 Armin Ronacher.
 
2
# Licensed to PSF under a Contributor Agreement.
 
3
 
 
4
"""Fixer that cleans up a tuple argument to isinstance after the tokens
 
5
in it were fixed.  This is mainly used to remove double occurrences of
 
6
tokens as a leftover of the long -> int / unicode -> str conversion.
 
7
 
 
8
eg.  isinstance(x, (int, long)) -> isinstance(x, (int, int))
 
9
       -> isinstance(x, int)
 
10
"""
 
11
 
 
12
from .. import fixer_base
 
13
from ..fixer_util import token
 
14
 
 
15
 
 
16
class FixIsinstance(fixer_base.BaseFix):
 
17
 
 
18
    PATTERN = """
 
19
    power<
 
20
        'isinstance'
 
21
        trailer< '(' arglist< any ',' atom< '('
 
22
            args=testlist_gexp< any+ >
 
23
        ')' > > ')' >
 
24
    >
 
25
    """
 
26
 
 
27
    run_order = 6
 
28
 
 
29
    def transform(self, node, results):
 
30
        names_inserted = set()
 
31
        testlist = results["args"]
 
32
        args = testlist.children
 
33
        new_args = []
 
34
        iterator = enumerate(args)
 
35
        for idx, arg in iterator:
 
36
            if arg.type == token.NAME and arg.value in names_inserted:
 
37
                if idx < len(args) - 1 and args[idx + 1].type == token.COMMA:
 
38
                    next(iterator)
 
39
                    continue
 
40
            else:
 
41
                new_args.append(arg)
 
42
                if arg.type == token.NAME:
 
43
                    names_inserted.add(arg.value)
 
44
        if new_args and new_args[-1].type == token.COMMA:
 
45
            del new_args[-1]
 
46
        if len(new_args) == 1:
 
47
            atom = testlist.parent
 
48
            new_args[0].set_prefix(atom.get_prefix())
 
49
            atom.replace(new_args[0])
 
50
        else:
 
51
            args[:] = new_args
 
52
            node.changed()