Diffcontext / diffcontext /impact /traversal.py
trakshan-mishra
Deploy FastAPI & MCP server over SSE
036a2db
Raw
History Blame Contribute Delete
1.65 kB
"""
traversal.py — Dependency expansion (forward graph walk).
Given selected symbols, walk forward edges to include their callees.
Supports both unbounded DFS and bounded BFS.
"""
from typing import Dict, List, Optional, Set
def expand_dependencies(
graph: Dict[str, List[str]],
selected_symbols: List[str],
max_depth: Optional[int] = None,
) -> List[str]:
"""
Walk forward edges from selected_symbols.
max_depth=None -> full transitive closure (iterative DFS)
max_depth=N -> only nodes reachable within N hops (BFS)
"""
visited: Set[str] = set()
result: List[str] = []
if max_depth is None:
# Iterative DFS — safe on large repos (no recursion limit)
stack = list(selected_symbols)
while stack:
func = stack.pop()
if func in visited:
continue
visited.add(func)
result.append(func)
for dep in reversed(graph.get(func, [])):
if dep not in visited:
stack.append(dep)
return result
# Bounded BFS
frontier = list(selected_symbols)
for func in frontier:
if func not in visited:
visited.add(func)
result.append(func)
depth = 0
while frontier and depth < max_depth:
next_frontier = []
for func in frontier:
for dep in graph.get(func, []):
if dep not in visited:
visited.add(dep)
result.append(dep)
next_frontier.append(dep)
frontier = next_frontier
depth += 1
return result