• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 fixer_base
10from ..fixer_util import ImportAndCall, touch_import
11
12
13class FixIntern(fixer_base.BaseFix):
14    BM_compatible = True
15    order = "pre"
16
17    PATTERN = """
18    power< 'intern'
19           trailer< lpar='('
20                    ( not(arglist | argument<any '=' any>) obj=any
21                      | obj=arglist<(not argument<any '=' any>) any ','> )
22                    rpar=')' >
23           after=any*
24    >
25    """
26
27    def transform(self, node, results):
28        if results:
29            # I feel like we should be able to express this logic in the
30            # PATTERN above but I don't know how to do it so...
31            obj = results['obj']
32            if obj:
33                if obj.type == self.syms.star_expr:
34                    return  # Make no change.
35                if (obj.type == self.syms.argument and
36                    obj.children[0].value == '**'):
37                    return  # Make no change.
38        names = ('sys', 'intern')
39        new = ImportAndCall(node, results, names)
40        touch_import(None, 'sys', node)
41        return new
42