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) maps x to MyClass
  • 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 json output 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; --theme flag sets which is pre-selected on load