#! /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:])
