fork(1) download
  1. import ast
  2.  
  3. def build_tree(node):
  4. def _visit(node, level=0):
  5. if isinstance(node, (ast.ClassDef, ast.FunctionDef)):
  6. yield node.name, level
  7. level += 1
  8. for child in ast.iter_child_nodes(node):
  9. yield from _visit(child, level)
  10. return '\n'.join(f'{" " * level}{name}' for name, level in _visit(node))
  11.  
  12. source = '''
  13. class Foo:
  14. def method1(self):
  15. pass
  16. def method2(self):
  17. pass
  18.  
  19. class Bar:
  20. def method1(self):
  21. pass
  22. def method2(self):
  23. pass
  24. '''
  25. print(build_tree(ast.parse(source)))
Success #stdin #stdout 0.03s 10176KB
stdin
Standard input is empty
stdout
Foo
    method1
    method2
Bar
    method1
    method2