Roadmap
Current Limitations (v1.1)
These are known gaps in the current release — not design choices, but work that hasn’t been done yet.
Call resolution
obj.method() with local variables. When obj is a local variable with no type annotation, DependaMan falls back to scoped naive name-matching: it looks for any in-scope class that defines a method with that name and emits edges to all matches. This produces false edges when multiple in-scope classes share a method name. Precise resolution requires tracking types through assignments and annotations — deferred to v1.2.
Reference contexts beyond calls. Only callable-as-argument references are tracked (pool.submit(fn), sorted(xs, key=fn)). Other ways a callable can be referenced without being called are still missed:
- Assignment:
handler = my_func - List/dict literals:
handlers = [fn_a, fn_b] - Return values:
return my_func
A callable appearing only in these contexts will be incorrectly flagged as dead. Full reference tracking is a v1.2 item.
v1.2 — Planned
Type-aware call resolution
Replace the naive name-matching fallback with annotation-driven type inference:
ast.AnnAssign— typed assignments (x: MyClass = ...)- Function argument annotations —
def foo(x: MyClass)mapsxtoMyClass - Return type annotations — propagate known types through call chains
This gives precise obj.method() resolution for annotated code without a full type checker dependency.
Full reference tracking
Extend edge emission beyond ast.Call to cover assignments, list/dict literals, and return statements — closing the false-positive dead-callable cases that survive v1.1.
Future Ideas
--format jsonoutput option for external tooling and CI integration- Watch mode — re-analyse on file save, push updates to an open browser tab
- Configurable ignore patterns — exclude generated code, vendored packages, or specific modules from analysis
- Theme selector in the HTML output — multiple themes bundled as CSS custom properties, toggled by a button in the UI;
--themeflag sets which is pre-selected on load