1 | """Fix incompatible renames
|
---|
2 |
|
---|
3 | Fixes:
|
---|
4 | * sys.maxint -> sys.maxsize
|
---|
5 | """
|
---|
6 | # Author: Christian Heimes
|
---|
7 | # based on Collin Winter's fix_import
|
---|
8 |
|
---|
9 | # Local imports
|
---|
10 | from .. import fixer_base
|
---|
11 | from ..fixer_util import Name, attr_chain
|
---|
12 |
|
---|
13 | MAPPING = {"sys": {"maxint" : "maxsize"},
|
---|
14 | }
|
---|
15 | LOOKUP = {}
|
---|
16 |
|
---|
17 | def alternates(members):
|
---|
18 | return "(" + "|".join(map(repr, members)) + ")"
|
---|
19 |
|
---|
20 |
|
---|
21 | def build_pattern():
|
---|
22 | #bare = set()
|
---|
23 | for module, replace in MAPPING.items():
|
---|
24 | for old_attr, new_attr in replace.items():
|
---|
25 | LOOKUP[(module, old_attr)] = new_attr
|
---|
26 | #bare.add(module)
|
---|
27 | #bare.add(old_attr)
|
---|
28 | #yield """
|
---|
29 | # import_name< 'import' (module=%r
|
---|
30 | # | dotted_as_names< any* module=%r any* >) >
|
---|
31 | # """ % (module, module)
|
---|
32 | yield """
|
---|
33 | import_from< 'from' module_name=%r 'import'
|
---|
34 | ( attr_name=%r | import_as_name< attr_name=%r 'as' any >) >
|
---|
35 | """ % (module, old_attr, old_attr)
|
---|
36 | yield """
|
---|
37 | power< module_name=%r trailer< '.' attr_name=%r > any* >
|
---|
38 | """ % (module, old_attr)
|
---|
39 | #yield """bare_name=%s""" % alternates(bare)
|
---|
40 |
|
---|
41 |
|
---|
42 | class FixRenames(fixer_base.BaseFix):
|
---|
43 | BM_compatible = True
|
---|
44 | PATTERN = "|".join(build_pattern())
|
---|
45 |
|
---|
46 | order = "pre" # Pre-order tree traversal
|
---|
47 |
|
---|
48 | # Don't match the node if it's within another match
|
---|
49 | def match(self, node):
|
---|
50 | match = super(FixRenames, self).match
|
---|
51 | results = match(node)
|
---|
52 | if results:
|
---|
53 | if any(match(obj) for obj in attr_chain(node, "parent")):
|
---|
54 | return False
|
---|
55 | return results
|
---|
56 | return False
|
---|
57 |
|
---|
58 | #def start_tree(self, tree, filename):
|
---|
59 | # super(FixRenames, self).start_tree(tree, filename)
|
---|
60 | # self.replace = {}
|
---|
61 |
|
---|
62 | def transform(self, node, results):
|
---|
63 | mod_name = results.get("module_name")
|
---|
64 | attr_name = results.get("attr_name")
|
---|
65 | #bare_name = results.get("bare_name")
|
---|
66 | #import_mod = results.get("module")
|
---|
67 |
|
---|
68 | if mod_name and attr_name:
|
---|
69 | new_attr = unicode(LOOKUP[(mod_name.value, attr_name.value)])
|
---|
70 | attr_name.replace(Name(new_attr, prefix=attr_name.prefix))
|
---|