mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 15:41:43 +00:00 
			
		
		
		
	
		
			
	
	
		
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								# Copyright 2008 Armin Ronacher.
							 | 
						||
| 
								 | 
							
								# Licensed to PSF under a Contributor Agreement.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"""Fixer that cleans up a tuple argument to isinstance after the tokens
							 | 
						||
| 
								 | 
							
								in it were fixed.  This is mainly used to remove double occurrences of
							 | 
						||
| 
								 | 
							
								tokens as a leftover of the long -> int / unicode -> str conversion.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								eg.  isinstance(x, (int, long)) -> isinstance(x, (int, int))
							 | 
						||
| 
								 | 
							
								       -> isinstance(x, int)
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from .. import fixer_base
							 | 
						||
| 
								 | 
							
								from ..fixer_util import token
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class FixIsinstance(fixer_base.BaseFix):
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    PATTERN = """
							 | 
						||
| 
								 | 
							
								    power<
							 | 
						||
| 
								 | 
							
								        'isinstance'
							 | 
						||
| 
								 | 
							
								        trailer< '(' arglist< any ',' atom< '('
							 | 
						||
| 
								 | 
							
								            args=testlist_gexp< any+ >
							 | 
						||
| 
								 | 
							
								        ')' > > ')' >
							 | 
						||
| 
								 | 
							
								    >
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    run_order = 6
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def transform(self, node, results):
							 | 
						||
| 
								 | 
							
								        names_inserted = set()
							 | 
						||
| 
								 | 
							
								        testlist = results["args"]
							 | 
						||
| 
								 | 
							
								        args = testlist.children
							 | 
						||
| 
								 | 
							
								        new_args = []
							 | 
						||
| 
								 | 
							
								        iterator = enumerate(args)
							 | 
						||
| 
								 | 
							
								        for idx, arg in iterator:
							 | 
						||
| 
								 | 
							
								            if arg.type == token.NAME and arg.value in names_inserted:
							 | 
						||
| 
								 | 
							
								                if idx < len(args) - 1 and args[idx + 1].type == token.COMMA:
							 | 
						||
| 
								 | 
							
								                    next(iterator)
							 | 
						||
| 
								 | 
							
								                    continue
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                new_args.append(arg)
							 | 
						||
| 
								 | 
							
								                if arg.type == token.NAME:
							 | 
						||
| 
								 | 
							
								                    names_inserted.add(arg.value)
							 | 
						||
| 
								 | 
							
								        if new_args and new_args[-1].type == token.COMMA:
							 | 
						||
| 
								 | 
							
								            del new_args[-1]
							 | 
						||
| 
								 | 
							
								        if len(new_args) == 1:
							 | 
						||
| 
								 | 
							
								            atom = testlist.parent
							 | 
						||
| 
								 | 
							
								            new_args[0].set_prefix(atom.get_prefix())
							 | 
						||
| 
								 | 
							
								            atom.replace(new_args[0])
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            args[:] = new_args
							 | 
						||
| 
								 | 
							
								            node.changed()
							 |