183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh"""Fix function attribute names (f.func_x -> f.__x__).""" 283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Author: Collin Winter 383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh# Local imports 583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom .. import fixer_base 683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehfrom ..fixer_util import Name 783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsiehclass FixFuncattrs(fixer_base.BaseFix): 1083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh BM_compatible = True 1183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1283760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh PATTERN = """ 1383760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh power< any+ trailer< '.' attr=('func_closure' | 'func_doc' | 'func_globals' 1483760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh | 'func_name' | 'func_defaults' | 'func_code' 1583760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh | 'func_dict') > any* > 1683760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh """ 1783760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh 1883760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh def transform(self, node, results): 1983760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh attr = results["attr"][0] 2083760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh attr.replace(Name((u"__%s__" % attr.value[5:]), 2183760d213fb3bec7b4117d266fcfbf6fe2ba14abAndrew Hsieh prefix=attr.prefix)) 22