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.