(root)/
Python-3.12.0/
Lib/
lib2to3/
fixes/
fix_intern.py
       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 fixer_base
      10  from ..fixer_util import ImportAndCall, touch_import
      11  
      12  
      13  class ESC[4;38;5;81mFixIntern(ESC[4;38;5;149mfixer_baseESC[4;38;5;149m.ESC[4;38;5;149mBaseFix):
      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.argument and
      34                      obj.children[0].value in {'**', '*'}):
      35                      return  # Make no change.
      36          names = ('sys', 'intern')
      37          new = ImportAndCall(node, results, names)
      38          touch_import(None, 'sys', node)
      39          return new