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