Add ast_visitor module to simplify traversing the AST