Docs

Lenguajes que soporta Graph Indexer

Graph Indexer analiza 16 gramáticas tree-sitter incluidas (TypeScript, Python, Go, Java, C#, Rust, Kotlin y más), con enlace profundo de referencias en 7.

Actualizado Graph Indexer 3.0.0 Ver en Markdown

Graph Indexer incluye 16 gramáticas tree-sitter que cubren 15 lenguajes: JavaScript, TypeScript, TSX, Python, Go, Java, Kotlin, Scala, C#, Rust, C, C++, Ruby, PHP, Bash y CSS (con SCSS y Less). El enlace de referencias y la inferencia de tipos del receptor son más profundos en TypeScript, JavaScript, Python, Go, Java, C# y Rust, y la exactitud se ha verificado contra las herramientas reales de TypeScript, Go y Java.

¿Qué lenguajes indexa Graph Indexer?

Graph Indexer elige la gramática según la extensión del archivo. Las 16 gramáticas se ejecutan como WebAssembly dentro del paquete npm, así que un repositorio con varios lenguajes se indexa de una sola pasada y sin configurar nada más.

LenguajeExtensionesNivel
JavaScript.js, .jsx, .mjs, .cjsProfundo
TypeScript.ts, .mts, .cts (y .d.ts)Profundo
TSX.tsxProfundo
Python.py, .pyiProfundo
Go.goProfundo
Java.javaProfundo
C#.csProfundo
Rust.rsProfundo
Kotlin.kt, .ktsEstándar
Scala.scala, .scEstándar
C.c, .hEstándar
C++.cc, .cpp, .cxx, .hpp, .hh, .hxx, .h++, .c++, .ipp, .inlEstándar
Ruby.rb, .rake, .gemspecEstándar
PHP.php, .phtmlEstándar
Bash.sh, .bash, .zshEstándar
CSS.css, .scss, .lessEstándar

Las cabeceras son ambiguas entre C y C++. Un archivo .cpp o .cc hermano, o la sintaxis C++ de la propia cabecera, decide qué gramática se usa.

¿Qué significan los niveles de profundidad?

Graph Indexer extrae definiciones, referencias, imports y evidencia de tipos en todos los lenguajes con una consulta tree-sitter por gramática. Los niveles indican hasta dónde llega el enlace de referencias más allá de eso.

En el nivel profundo (TypeScript, JavaScript, Python, Go, Java, C# y Rust), Graph Indexer además infiere los tipos del receptor y sigue el sistema de imports del lenguaje: paths de tsconfig y workspaces, módulos de Go, paquetes de Python e imports relativos, y rutas crate, self y super de Rust. Una llamada como userService.find(id) se enlaza con UserService.find y no con todos los métodos llamados find.

En los demás lenguajes, Graph Indexer sigue indexando todas las definiciones y referencias y las resuelve por ámbito léxico, tipo envolvente, mismo archivo, imports y paquete, pero con menos inferencia de tipos. Fíate de las etiquetas de confianza de cada resultado: exact y high significan que la referencia se enlazó por ámbito, import o tipo inferido, y likely y possible que solo coincidía el nombre. La resolución se describe en Cómo funciona Graph Indexer.

¿En qué lenguajes se ha verificado Graph Indexer contra un type checker real?

Graph Indexer ha medido las referencias que devuelve contra tres herramientas reales. Cada cifra sale de los repositorios públicos fijados que describe la metodología de benchmarks.

LenguajeOráculoRepositoriosPrecisiónRecall
TypeScriptCompilador de TypeScript (findReferences)nestjs, 400 símbolos99,7 %96,2 %
TypeScriptCompilador de TypeScriptservidor de Twenty, 28.512 archivos99,9 %92,4 %
GoType checker de Gogin, caddy, nats-server99,2 % a 100 %97,2 % a 98,1 %
JavaCompilador de Java (front end de javac)spring-petclinic, jsoup, Commons Collections95,5 % a 99,4 %86,1 % a 98,9 %

En la muestra de nestjs, hacer grep del nombre alcanza una precisión del 12,8 %, así que la mayor parte de lo que devuelve no es una referencia real. La misma comparación en Go deja a grep en una precisión del 8,5 % al 23,8 %, y en Java del 1,5 % al 60,9 %. Tienes las tablas completas en la página de benchmarks y en la landing.

Python no se puntúa contra un compilador. Se mide en hechos de clases: 100 % de precisión en overrides y en herederos en sqlglot, y en networkx 98,3 % en overrides y 100 % en herederos.

¿Cuáles son los límites conocidos por lenguaje?

Graph Indexer no es un type checker, y estos límites están publicados en vez de ocultarse.

  • TypeScript y JavaScript. Los literales de objeto con tipo contextual, la instanciación de genéricos, la reflexión y any solo se ven en parte. En el monorepo de Twenty siguen sin detectarse las llamadas por uniones y objetos registro, los implementadores en literales de objeto y los builders fluidos a través de this genérico. La inyección de dependencias por token de texto solo es visible en parte.
  • Go. Los métodos promovidos desde tipos de librería embebidos y las interfaces de librería aún no se tratan. Las implementaciones implícitas de interfaz obtienen entre 97,7 % y 100 % de precisión y entre 93,8 % y 100 % de recall.
  • Java. Java fue el lenguaje más débil de los medidos: precisión del 95,5 % al 99,4 % y recall de solo el 86,1 % en Commons Collections. Las llamadas se enlazan con la sobrecarga que acepta su número de argumentos.
  • Python. getattr y otras características dinámicas solo se ven en parte. El orden de resolución de métodos usa la linealización C3, así que los herederos con herencia múltiple se deciden bien.
  • Ruby y PHP. Los nombres de constructor siguen al lenguaje (initialize en Ruby, __construct en PHP), así que Foo.new y new Foo() no se confunden con llamadas a un método normal.
  • En general. Solo se indexa el árbol de trabajo. Los nombres ambiguos o de la librería estándar, como get y set, quedan sin enlazar en vez de adivinarse, y el pie de cada resultado informa de las llamadas con el mismo nombre que no se pudieron enlazar.

¿Qué archivos ignora Graph Indexer?

Dentro de un repositorio git, Graph Indexer toma la lista de archivos de git, así que respeta todas las reglas de .gitignore. También salta carpetas de dependencias y de compilación como node_modules, dist, build, target, vendor y __pycache__, los archivos minificados o generados y los de más de 1,5 MB. Fuera de git recorre el árbol con un evaluador sencillo de .gitignore.

¿Cómo compruebo qué ve Graph Indexer en mi lenguaje?

Ejecuta npx graph-indexer index en tu repositorio y luego npx graph-indexer status. Usa graph-indexer refs <nombre> para ver las referencias y sus etiquetas de confianza de cualquier símbolo y compáralas con tus propias herramientas. La instalación está en la página de instalación, cada herramienta se documenta en la página de herramientas, y lo de privacidad, coste y agentes está en las preguntas frecuentes.

Preguntas frecuentes

¿Cuántos lenguajes soporta Graph Indexer?

Graph Indexer incluye 16 gramáticas tree-sitter como WebAssembly: JavaScript, TypeScript, TSX, Python, Go, Java, Kotlin, Scala, C#, Rust, C, C++, Ruby, PHP, Bash y CSS (con SCSS y Less). Son 15 lenguajes, con TypeScript y TSX como dos gramáticas.

¿En qué lenguajes son más exactas las referencias?

El enlace de referencias y la inferencia de tipos son más profundos en TypeScript, JavaScript, Python, Go, Java, C# y Rust. La exactitud se ha medido contra el compilador de TypeScript, el type checker de Go y el compilador de Java; el resto se indexa pero no está verificado así.

¿Tengo que instalar gramáticas o servidores de lenguaje?

No. Cada gramática viene dentro del paquete npm como WebAssembly, con versión fijada y suma SHA-256. No se descarga ni se compila nada, y no hace falta instalar ni tener en marcha ningún servidor de lenguaje o compilador.

Pruébalo en tu repo.

npx graph-indexer init
¿Usas Claude Code? Instala el plugin