17db96d56Sopenharmony_ci"""Fixer for reload().
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_cireload(s) -> importlib.reload(s)"""
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci# Local imports
67db96d56Sopenharmony_cifrom .. import fixer_base
77db96d56Sopenharmony_cifrom ..fixer_util import ImportAndCall, touch_import
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciclass FixReload(fixer_base.BaseFix):
117db96d56Sopenharmony_ci    BM_compatible = True
127db96d56Sopenharmony_ci    order = "pre"
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci    PATTERN = """
157db96d56Sopenharmony_ci    power< 'reload'
167db96d56Sopenharmony_ci           trailer< lpar='('
177db96d56Sopenharmony_ci                    ( not(arglist | argument<any '=' any>) obj=any
187db96d56Sopenharmony_ci                      | obj=arglist<(not argument<any '=' any>) any ','> )
197db96d56Sopenharmony_ci                    rpar=')' >
207db96d56Sopenharmony_ci           after=any*
217db96d56Sopenharmony_ci    >
227db96d56Sopenharmony_ci    """
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci    def transform(self, node, results):
257db96d56Sopenharmony_ci        if results:
267db96d56Sopenharmony_ci            # I feel like we should be able to express this logic in the
277db96d56Sopenharmony_ci            # PATTERN above but I don't know how to do it so...
287db96d56Sopenharmony_ci            obj = results['obj']
297db96d56Sopenharmony_ci            if obj:
307db96d56Sopenharmony_ci                if (obj.type == self.syms.argument and
317db96d56Sopenharmony_ci                    obj.children[0].value in {'**', '*'}):
327db96d56Sopenharmony_ci                    return  # Make no change.
337db96d56Sopenharmony_ci        names = ('importlib', 'reload')
347db96d56Sopenharmony_ci        new = ImportAndCall(node, results, names)
357db96d56Sopenharmony_ci        touch_import(None, 'importlib', node)
367db96d56Sopenharmony_ci        return new
37