Spaces:
Sleeping
Sleeping
| import ast | |
| from typing import Dict, Any | |
| class PythonASTParser: | |
| """Parses Python source code to extract symbols and import graphs.""" | |
| def parse(self, source_code: str) -> Dict[str, Any]: | |
| try: | |
| tree = ast.parse(source_code) | |
| except SyntaxError: | |
| return {"classes": [], "functions": [], "imports": []} | |
| symbols = {"classes": [], "functions": [], "imports": []} | |
| for node in ast.walk(tree): | |
| if isinstance(node, ast.ClassDef): | |
| symbols["classes"].append(node.name) | |
| elif isinstance(node, ast.FunctionDef): | |
| symbols["functions"].append(node.name) | |
| elif isinstance(node, ast.Import): | |
| for alias in node.names: | |
| symbols["imports"].append(alias.name) | |
| elif isinstance(node, ast.ImportFrom): | |
| if node.module: | |
| symbols["imports"].append(node.module) | |
| return symbols | |