Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.50 KB | None | 0 0
  1. import ast
  2. from collections import defaultdict
  3. from pprint import pprint
  4.  
  5.  
  6. def main():
  7.     with open("test2.py", "r") as source:
  8.         tree = ast.parse(source.read())
  9.  
  10.     analyzer = Analyzer()
  11.     analyzer.visit(tree)
  12.     analyzer.report()
  13.  
  14.  
  15. class Analyzer(ast.NodeVisitor):
  16.     def __init__(self):
  17.         self.stats = defaultdict(list)
  18.  
  19.     # sample
  20.     def visit_Import(self, node):
  21.         for alias in node.names:
  22.             self.stats["import"].append(alias.name)
  23.         self.generic_visit(node)
  24.  
  25.     # sample
  26.     def visit_ImportFrom(self, node):
  27.         for alias in node.names:
  28.             self.stats["from"].append(alias.name)
  29.         self.generic_visit(node)
  30.  
  31.     def visit_FunctionDef(self, node):
  32.         self.stats["def"].append(node.name)
  33.         # if you comment line below, AST won't inspect
  34.         # "inside" of function definitions
  35.         print(dir(node))
  36.         self.generic_visit(node)
  37.  
  38.     def visit_Call(self, node):
  39.         # value sometimes is an Attribute (e.g. `glob.glob()`), but
  40.         # sometimes is a Name (e.g. `print()`)
  41.         if isinstance(node.func, ast.Attribute):
  42.             self.stats["calls"].append(
  43.                 "%s.%s" % (node.func.value.id, node.func.attr)
  44.             )
  45.         elif isinstance(node.func, ast.Name):
  46.             self.stats["calls"].append(
  47.                 node.func.id
  48.             )
  49.         self.generic_visit(node)
  50.  
  51.     def report(self):
  52.         pprint(self.stats)
  53.  
  54.  
  55. if __name__ == "__main__":
  56.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement