17db96d56Sopenharmony_ci"""Fix incompatible renames
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciFixes:
47db96d56Sopenharmony_ci  * sys.maxint -> sys.maxsize
57db96d56Sopenharmony_ci"""
67db96d56Sopenharmony_ci# Author: Christian Heimes
77db96d56Sopenharmony_ci# based on Collin Winter's fix_import
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci# Local imports
107db96d56Sopenharmony_cifrom .. import fixer_base
117db96d56Sopenharmony_cifrom ..fixer_util import Name, attr_chain
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ciMAPPING = {"sys":  {"maxint" : "maxsize"},
147db96d56Sopenharmony_ci          }
157db96d56Sopenharmony_ciLOOKUP = {}
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cidef alternates(members):
187db96d56Sopenharmony_ci    return "(" + "|".join(map(repr, members)) + ")"
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_cidef build_pattern():
227db96d56Sopenharmony_ci    #bare = set()
237db96d56Sopenharmony_ci    for module, replace in list(MAPPING.items()):
247db96d56Sopenharmony_ci        for old_attr, new_attr in list(replace.items()):
257db96d56Sopenharmony_ci            LOOKUP[(module, old_attr)] = new_attr
267db96d56Sopenharmony_ci            #bare.add(module)
277db96d56Sopenharmony_ci            #bare.add(old_attr)
287db96d56Sopenharmony_ci            #yield """
297db96d56Sopenharmony_ci            #      import_name< 'import' (module=%r
307db96d56Sopenharmony_ci            #          | dotted_as_names< any* module=%r any* >) >
317db96d56Sopenharmony_ci            #      """ % (module, module)
327db96d56Sopenharmony_ci            yield """
337db96d56Sopenharmony_ci                  import_from< 'from' module_name=%r 'import'
347db96d56Sopenharmony_ci                      ( attr_name=%r | import_as_name< attr_name=%r 'as' any >) >
357db96d56Sopenharmony_ci                  """ % (module, old_attr, old_attr)
367db96d56Sopenharmony_ci            yield """
377db96d56Sopenharmony_ci                  power< module_name=%r trailer< '.' attr_name=%r > any* >
387db96d56Sopenharmony_ci                  """ % (module, old_attr)
397db96d56Sopenharmony_ci    #yield """bare_name=%s""" % alternates(bare)
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ciclass FixRenames(fixer_base.BaseFix):
437db96d56Sopenharmony_ci    BM_compatible = True
447db96d56Sopenharmony_ci    PATTERN = "|".join(build_pattern())
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci    order = "pre" # Pre-order tree traversal
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci    # Don't match the node if it's within another match
497db96d56Sopenharmony_ci    def match(self, node):
507db96d56Sopenharmony_ci        match = super(FixRenames, self).match
517db96d56Sopenharmony_ci        results = match(node)
527db96d56Sopenharmony_ci        if results:
537db96d56Sopenharmony_ci            if any(match(obj) for obj in attr_chain(node, "parent")):
547db96d56Sopenharmony_ci                return False
557db96d56Sopenharmony_ci            return results
567db96d56Sopenharmony_ci        return False
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci    #def start_tree(self, tree, filename):
597db96d56Sopenharmony_ci    #    super(FixRenames, self).start_tree(tree, filename)
607db96d56Sopenharmony_ci    #    self.replace = {}
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ci    def transform(self, node, results):
637db96d56Sopenharmony_ci        mod_name = results.get("module_name")
647db96d56Sopenharmony_ci        attr_name = results.get("attr_name")
657db96d56Sopenharmony_ci        #bare_name = results.get("bare_name")
667db96d56Sopenharmony_ci        #import_mod = results.get("module")
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci        if mod_name and attr_name:
697db96d56Sopenharmony_ci            new_attr = LOOKUP[(mod_name.value, attr_name.value)]
707db96d56Sopenharmony_ci            attr_name.replace(Name(new_attr, prefix=attr_name.prefix))
71