17db96d56Sopenharmony_ci"""Fix function attribute names (f.func_x -> f.__x__)."""
27db96d56Sopenharmony_ci# Author: Collin Winter
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci# Local imports
57db96d56Sopenharmony_cifrom .. import fixer_base
67db96d56Sopenharmony_cifrom ..fixer_util import Name
77db96d56Sopenharmony_ci
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ciclass FixFuncattrs(fixer_base.BaseFix):
107db96d56Sopenharmony_ci    BM_compatible = True
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci    PATTERN = """
137db96d56Sopenharmony_ci    power< any+ trailer< '.' attr=('func_closure' | 'func_doc' | 'func_globals'
147db96d56Sopenharmony_ci                                  | 'func_name' | 'func_defaults' | 'func_code'
157db96d56Sopenharmony_ci                                  | 'func_dict') > any* >
167db96d56Sopenharmony_ci    """
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci    def transform(self, node, results):
197db96d56Sopenharmony_ci        attr = results["attr"][0]
207db96d56Sopenharmony_ci        attr.replace(Name(("__%s__" % attr.value[5:]),
217db96d56Sopenharmony_ci                          prefix=attr.prefix))
22