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