fix_intern.py revision 6118040b7aee905bcddcb949c6815dc19ca23070
1# Copyright 2006 Georg Brandl. 2# Licensed to PSF under a Contributor Agreement. 3 4"""Fixer for intern(). 5 6intern(s) -> sys.intern(s)""" 7 8# Local imports 9from .. import pytree 10from .. import fixer_base 11from ..fixer_util import Name, Attr, touch_import 12 13 14class FixIntern(fixer_base.BaseFix): 15 16 PATTERN = """ 17 power< 'intern' 18 trailer< lpar='(' 19 ( not(arglist | argument<any '=' any>) obj=any 20 | obj=arglist<(not argument<any '=' any>) any ','> ) 21 rpar=')' > 22 after=any* 23 > 24 """ 25 26 def transform(self, node, results): 27 syms = self.syms 28 obj = results["obj"].clone() 29 if obj.type == syms.arglist: 30 newarglist = obj.clone() 31 else: 32 newarglist = pytree.Node(syms.arglist, [obj.clone()]) 33 after = results["after"] 34 if after: 35 after = [n.clone() for n in after] 36 new = pytree.Node(syms.power, 37 Attr(Name(u"sys"), Name(u"intern")) + 38 [pytree.Node(syms.trailer, 39 [results["lpar"].clone(), 40 newarglist, 41 results["rpar"].clone()])] + after) 42 new.prefix = node.prefix 43 touch_import(None, u'sys', node) 44 return new 45