mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
	
	
		
			39 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			39 lines
		
	
	
	
		
			905 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								#! /usr/bin/env python
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								"""Print names of all methods defined in module
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This script demonstrates use of the visitor interface of the compiler
							 | 
						||
| 
								 | 
							
								package.
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import compiler
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class MethodFinder:
							 | 
						||
| 
								 | 
							
								    """Print the names of all the methods
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    Each visit method takes two arguments, the node and its current
							 | 
						||
| 
								 | 
							
								    scope.  The scope is the name of the current class or None.
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    def visitClass(self, node, scope=None):
							 | 
						||
| 
								 | 
							
								        self.visit(node.code, node.name)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def visitFunction(self, node, scope=None):
							 | 
						||
| 
								 | 
							
								        if scope is not None:
							 | 
						||
| 
								 | 
							
								            print "%s.%s" % (scope, node.name)
							 | 
						||
| 
								 | 
							
								        self.visit(node.code, None)
							 | 
						||
| 
								 | 
							
								            
							 | 
						||
| 
								 | 
							
								def main(files):
							 | 
						||
| 
								 | 
							
								    mf = MethodFinder()
							 | 
						||
| 
								 | 
							
								    for file in files:
							 | 
						||
| 
								 | 
							
								        f = open(file)
							 | 
						||
| 
								 | 
							
								        buf = f.read()
							 | 
						||
| 
								 | 
							
								        f.close()
							 | 
						||
| 
								 | 
							
								        ast = compiler.parse(buf)
							 | 
						||
| 
								 | 
							
								        compiler.walk(ast, mf)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if __name__ == "__main__":
							 | 
						||
| 
								 | 
							
								    import sys
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    main(sys.argv[1:])
							 |