| 1 | #!/usr/bin/env python2
 | 
| 2 | 
 | 
| 3 | """Print names of all methods defined in module
 | 
| 4 | 
 | 
| 5 | This script demonstrates use of the visitor interface of the compiler
 | 
| 6 | package.
 | 
| 7 | """
 | 
| 8 | 
 | 
| 9 | import compiler
 | 
| 10 | 
 | 
| 11 | class MethodFinder:
 | 
| 12 |     """Print the names of all the methods
 | 
| 13 | 
 | 
| 14 |     Each visit method takes two arguments, the node and its current
 | 
| 15 |     scope.  The scope is the name of the current class or None.
 | 
| 16 |     """
 | 
| 17 | 
 | 
| 18 |     def visitClass(self, node, scope=None):
 | 
| 19 |         self.visit(node.code, node.name)
 | 
| 20 | 
 | 
| 21 |     def visitFunction(self, node, scope=None):
 | 
| 22 |         if scope is not None:
 | 
| 23 |             print("%s.%s" % (scope, node.name))
 | 
| 24 |         self.visit(node.code, None)
 | 
| 25 | 
 | 
| 26 | def main(files):
 | 
| 27 |     mf = MethodFinder()
 | 
| 28 |     for file in files:
 | 
| 29 |         f = open(file)
 | 
| 30 |         buf = f.read()
 | 
| 31 |         f.close()
 | 
| 32 |         ast = compiler.parse(buf)
 | 
| 33 |         compiler.walk(ast, mf)
 | 
| 34 | 
 | 
| 35 | if __name__ == "__main__":
 | 
| 36 |     import sys
 | 
| 37 | 
 | 
| 38 |     main(sys.argv[1:])
 |