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