In Python, it is trivial to do this kind of AST walking for any valid python
code that is provided as a string in a variable.
import ast
code_string = """
def foo(x, y):
z = x + y
return f(z, g(z))
"""
module_node = ast.parse(code_string)
class FunctionVisitor(ast.NodeVisitor):
def visit_FunctionDef(self, node):
print(f"Found function declaration: {node.name}")
for stmt in node.body:
self.visit(stmt)
def visit_Assign(self, node):
print(f"Found assignment to: {node.targets[0].id}")
self.visit(node.value)
def visit_Call(self, node):
print(f"Found function call: {node.func.id}")
for arg in node.args:
self.visit(arg)
def visit_BinOp(self, node):
print(f"Found binary operation: {node.op.__class__.__name__}")
self.visit(node.left)
self.visit(node.right)
visitor = FunctionVisitor()
visitor.visit(module_node)
Run
I saw the macros section and found some relevant functionality such as
parseExpr and parseStmt but I am not sure what to use/combine to achieve the
same thing. Any help would be appreciated.