Weftmap
Documentación

Cómo funciona

Weftmap hace análisis estático: lee tu código sin ejecutarlo y deduce las relaciones a partir del árbol de sintaxis.

El pipeline

  • Parseo — cada archivo se analiza con tree-sitter, que produce un árbol de sintaxis real (no expresiones regulares).
  • Tabla de símbolos — se recogen las funciones y clases definidas en cada archivo.
  • Imports — se resuelve cada import al archivo correspondiente, según las reglas del lenguaje.
  • Llamadas — cada llamada se enlaza a su definición: primero local, luego en un archivo importado, y si solo hay un candidato global, a ese.
  • Clases y herencia — los métodos se asignan a su clase y se trazan las relaciones extends.
  • Layout — se agrupa en módulos › clases › métodos y se posiciona con un layout jerárquico.

Modelo del grafo

Tres tipos de nodo (módulo, función, clase) y tres tipos de arista:

  • calls — entre funciones/métodos.
  • imports — entre módulos.
  • extends — entre clases.

SQL: otro tipo de diagrama

SQL no produce un call graph sino un diagrama entidad-relación: las tablas son nodos (con columnas y claves PK/FK) y las foreign keys son aristasreferences con cardinalidad. Más detalle en Leer el diagrama.

Seguridad y rendimiento

  • El parseo de cada archivo tiene un tope de tiempo para que una entrada patológica no bloquee el servidor.
  • Hay límites de 2 MB y 400 archivos por análisis (ver Referencia de la API).

Límites conocidos

El análisis es por nombre, no por tipo ni alcance. Eso implica:

  • Dos funciones (o métodos de clases distintas) con el mismo nombre se fusionan en un nodo.
  • No se sigue el despacho dinámico, eval, reflexión ni callbacks invocados indirectamente.
  • Las llamadas a librerías externas se omiten (solo se enlazan definiciones de tu código).
  • En Go los imports por paquete no se mapean a archivos.
  • Por ahora se sube una carpeta (aún no archivos .zip).
Trata el grafo como un mapa de alta señal, no como una verdad exacta: el análisis estático por nombre acierta en la mayoría de casos comunes, pero puede aproximar en código muy dinámico.