Roadmap

Limitaciones Actuales (v1.1)

Estas son brechas conocidas en la versión actual — no son decisiones de diseño, sino trabajo que aún no se ha realizado.

Resolución de llamadas

obj.method() con variables locales. Cuando obj es una variable local sin anotación de tipo, DependaMan cae al matching naive con alcance: busca cualquier clase en scope que defina un método con ese nombre y emite aristas a todas las coincidencias. Esto produce aristas falsas cuando múltiples clases en scope comparten un nombre de método. La resolución precisa requiere rastrear tipos a través de asignaciones y anotaciones — diferido a v1.2.

Contextos de referencia más allá de las llamadas. Solo se rastrean referencias callable-como-argumento (pool.submit(fn), sorted(xs, key=fn)). Otras formas en que un callable puede ser referenciado sin ser llamado aún se pierden:

  • Asignación: handler = my_func
  • Literales de lista/dict: handlers = [fn_a, fn_b]
  • Valores de retorno: return my_func

Un callable que aparezca solo en estos contextos será incorrectamente marcado como muerto. El rastreo completo de referencias es un ítem de v1.2.


v1.2 — Planificado

Resolución de llamadas con tipos

Reemplazar el fallback de matching naive con inferencia de tipos basada en anotaciones:

  • ast.AnnAssign — asignaciones con tipo (x: MyClass = ...)
  • Anotaciones de argumentos de función — def foo(x: MyClass) mapea x a MyClass
  • Anotaciones de tipo de retorno — propagar tipos conocidos a través de cadenas de llamadas

Esto da resolución precisa de obj.method() para código anotado sin depender de un type checker.

Rastreo completo de referencias

Extender la emisión de aristas más allá de ast.Call para cubrir asignaciones, literales de lista/dict y sentencias de retorno — cerrando los casos falsos positivos de callables muertos que sobreviven en v1.1.


Ideas Futuras

  • Opción --format json para herramientas externas e integración con CI
  • Modo watch — re-analizar al guardar archivos, enviar actualizaciones a una pestaña del navegador abierta
  • Patrones de exclusión configurables — excluir código generado, paquetes vendored, o módulos específicos del análisis
  • Selector de tema en la salida HTML — múltiples temas empaquetados como custom properties de CSS, alternados por un botón en la UI; el flag --theme define cuál está preseleccionado al cargar