def main(infilename, outfilename): node = ast.parse(open(infilename).read()) node = transformers.ParentChildNodeTransformer().visit(node) visitor = visitors.GraphNodeVisitor() visitor.visit(node) visitor.graph.write_png(outfilename) os.system('open ' + outfilename)
def test_does_not_have_edge(self, visitor): node = transformers.ParentChildNodeTransformer().visit( ast.parse('x = 1')) visitor.visit(node) assert not visitor.graph.get_edge(str(node), str(node.body[0].value))
def labelize(self, src): """ replace x + 1 with egt_v['x:1'] + 1 """ node = ast.parse(src) value = transformers.ParentChildNodeTransformer().visit(node) return astunparse.unparse(self.name_trans.visit(value)).strip()
def ast_playing(source_code): node = ast.parse(source_code) node = transformers.ParentChildNodeTransformer().visit(node) visitor = visitors.GraphNodeVisitor() visitor.visit(node) for n in ast.walk(node): print(type(n)) visitor.graph.write_png('graph_1.png')
def test_multi_parents_node_label(self, visitor): node = transformers.ParentChildNodeTransformer().visit( ast.parse('x = 1\nx = 2')) visitor.visit(node) dot_node = visitor.graph.get_node(str(node.body[0].targets[0]))[0] assert dot_node.get_label() == "ast.Name(id='x', ctx=ast.Store())"
def test_edge_label(self, visitor): node = transformers.ParentChildNodeTransformer().visit( ast.parse('x = 1')) visitor.visit(node) dot_edge = visitor.graph.get_edge(str(node), str(node.body[0]))[0] assert dot_edge.get_label() == 'body[0]'
def test_node_label(self, visitor): node = transformers.ParentChildNodeTransformer().visit( ast.parse('x = 1')) visitor.visit(node) dot_node = visitor.graph.get_node(str(node.body[0].value))[0] assert dot_node.get_label() == 'ast.Num(n=1)'
def dump_ast(mod, name): if IMPORT_ASTMONKEY: mod = deepcopy(mod) mod = transformers.ParentChildNodeTransformer().visit(deepcopy(mod)) visitor = visitors.GraphNodeVisitor() visitor.visit(mod) visitor.graph.write_png(name + '.png') print("\033[1;32;40mAST visualization saved as \033[94m%s.png\033[0m" % name) else: print("\033[93mInstall astmonkey for visualization.\033[0m")
def extract_wir(self) -> networkx.DiGraph: """ Extract the WIR """ enriched_ast = transformers.ParentChildNodeTransformer().visit( self.ast_root) assert isinstance(enriched_ast, ast.Module) self.process_node(enriched_ast) return self.graph
def main(): code = '' for line in sys.stdin: code += line print(line) node = ast.parse(code) node = transformers.ParentChildNodeTransformer().visit(node) visitor = visitors.GraphNodeVisitor() visitor.visit(node) visitor.graph.write_png('src/main/resources/graph.png')
def test_node_label(self, visitor): node = transformers.ParentChildNodeTransformer().visit( ast.parse('x = 1')) visitor.visit(node) dot_node = visitor.graph.get_node(str(node.body[0].value))[0] if sys.version_info >= (3, 8): assert dot_node.get_label() == 'ast.Constant(value=1, kind=None)' else: assert dot_node.get_label() == 'ast.Num(n=1)'
import ast from astmonkey import utils, transformers node = ast.parse('def foo(x):\n\t"""doc"""') node = transformers.ParentChildNodeTransformer().visit(node) docstring_node = node.body[0].body[0].value assert (not utils.is_docstring(node)) assert (utils.is_docstring(docstring_node))
def transformer(self): return transformers.ParentChildNodeTransformer()
def test_non_docstring_node(self): node = transformers.ParentChildNodeTransformer().visit(ast.parse('')) assert not utils.is_docstring(node)
def test_class_docstring_node(self): node = transformers.ParentChildNodeTransformer().visit(ast.parse('class X:\n\t"""doc"""')) assert utils.is_docstring(node.body[0].body[0].value)