| # Copyright 2006 Georg Brandl. |
| # Licensed to PSF under a Contributor Agreement. |
| |
| """Fixer for intern(). |
| |
| intern(s) -> sys.intern(s)""" |
| |
| # Local imports |
| from .. import pytree |
| from .. import fixer_base |
| from ..fixer_util import Name, Attr, touch_import |
| |
| |
| class FixIntern(fixer_base.BaseFix): |
| BM_compatible = True |
| order = "pre" |
| |
| PATTERN = """ |
| power< 'intern' |
| trailer< lpar='(' |
| ( not(arglist | argument<any '=' any>) obj=any |
| | obj=arglist<(not argument<any '=' any>) any ','> ) |
| rpar=')' > |
| after=any* |
| > |
| """ |
| |
| def transform(self, node, results): |
| syms = self.syms |
| obj = results["obj"].clone() |
| if obj.type == syms.arglist: |
| newarglist = obj.clone() |
| else: |
| newarglist = pytree.Node(syms.arglist, [obj.clone()]) |
| after = results["after"] |
| if after: |
| after = [n.clone() for n in after] |
| new = pytree.Node(syms.power, |
| Attr(Name("sys"), Name("intern")) + |
| [pytree.Node(syms.trailer, |
| [results["lpar"].clone(), |
| newarglist, |
| results["rpar"].clone()])] + after) |
| new.prefix = node.prefix |
| touch_import(None, 'sys', node) |
| return new |