annotate Lib/lib2to3/fixes/fix_isinstance.py @ 58765:2ba7677bfa95 legacy-trunk

testCopysign was defined twice in test_math; combine the definitions
author Mark Dickinson <dickinsm@gmail.com>
date Sat, 06 Feb 2010 23:11:25 +0000
parents 7700408f65fc
children 7d1e453b120b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50198
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
1 # Copyright 2008 Armin Ronacher.
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
2 # Licensed to PSF under a Contributor Agreement.
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
3
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
4 """Fixer that cleans up a tuple argument to isinstance after the tokens
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
5 in it were fixed. This is mainly used to remove double occurrences of
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
6 tokens as a leftover of the long -> int / unicode -> str conversion.
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
7
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
8 eg. isinstance(x, (int, long)) -> isinstance(x, (int, int))
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
9 -> isinstance(x, int)
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
10 """
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
11
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
12 from .. import fixer_base
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
13 from ..fixer_util import token
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
14
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
15
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
16 class FixIsinstance(fixer_base.BaseFix):
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
17
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
18 PATTERN = """
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
19 power<
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
20 'isinstance'
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
21 trailer< '(' arglist< any ',' atom< '('
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
22 args=testlist_gexp< any+ >
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
23 ')' > > ')' >
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
24 >
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
25 """
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
26
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
27 run_order = 6
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
28
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
29 def transform(self, node, results):
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
30 names_inserted = set()
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
31 testlist = results["args"]
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
32 args = testlist.children
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
33 new_args = []
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
34 iterator = enumerate(args)
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
35 for idx, arg in iterator:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
36 if arg.type == token.NAME and arg.value in names_inserted:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
37 if idx < len(args) - 1 and args[idx + 1].type == token.COMMA:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
38 iterator.next()
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
39 continue
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
40 else:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
41 new_args.append(arg)
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
42 if arg.type == token.NAME:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
43 names_inserted.add(arg.value)
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
44 if new_args and new_args[-1].type == token.COMMA:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
45 del new_args[-1]
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
46 if len(new_args) == 1:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
47 atom = testlist.parent
54696
7700408f65fc Merged revisions 72523,72950-72951,72994,73003,73033,73036-73040,73091-73093,73096,73179-73181,73192,73231,73244,73255-73256,73365 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 50198
diff changeset
48 new_args[0].prefix = atom.prefix
50198
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
49 atom.replace(new_args[0])
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
50 else:
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
51 args[:] = new_args
21d3357dcbec Merged revisions 67806 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
diff changeset
52 node.changed()