David Prince
production: clean source snapshot — no history bloat
71b4454
Raw
History Blame Contribute Delete
1.17 kB
from typing import Dict, List
from .ast_parser import PythonASTParser
from .graph import DependencyGraph
class WorkspaceIndexer:
"""Orchestrates AST parsing, symbol indexing, and workspace search."""
def __init__(self):
self.parser = PythonASTParser()
self.graph = DependencyGraph()
self.symbol_index: Dict[str, List[str]] = {}
def index_file(self, filepath: str, source_code: str):
# Parse abstract syntax tree
symbols = self.parser.parse(source_code)
# Populate symbol index
self.symbol_index[filepath] = symbols.get("classes", []) + symbols.get("functions", [])
# Populate dependency graph via imports
self.graph.add_node(filepath)
for imp in symbols.get("imports", []):
self.graph.add_edge(filepath, imp)
def search_symbols(self, query: str) -> List[str]:
"""Basic workspace search for symbols."""
results = []
for filepath, syms in self.symbol_index.items():
if any(query.lower() in sym.lower() for sym in syms):
results.append(filepath)
return results