Agregar un lenguaje
La arquitectura es pluggable: un lenguaje es una gramática de Tree-sitter más un puñado de consultas. Agregar uno son unos pocos pasos.
1. Agrega la gramática
Copia tree-sitter-<lang>.wasm a public/wasm/. Muchas vienen en el paquete tree-sitter-wasms; si no, se compila desde la gramática con la CLI de Tree-sitter.
2. Crea el analyzer
Añade src/lib/analysis/analyzers/<lang>.ts con un LangSpec: dos consultas (definiciones de funciones y llamadas) más los tipos de nodo que cuentan como función.
const spec: LangSpec = {
language: "go",
wasm: "tree-sitter-go.wasm",
funcDefQuery: "[(function_declaration) (method_declaration)] @def",
callQuery: `
(call_expression function: (identifier) @callee)
(call_expression function: (selector_expression field: (field_identifier) @callee))
`,
importQuery: "(import_spec path: (interpreted_string_literal) @mod)",
funcDefTypes: new Set(["function_declaration", "method_declaration"]),
resolveModule: () => null,
};
export const goAnalyzer: LanguageAnalyzer = {
language: spec.language,
analyzeProject: (files) => analyzeProjectWith(spec, files),
};Para lenguajes con clases, añade classQuery, classNodeTypes yclassBases. Para un tipo de diagrama distinto (como SQL → ER), implementaLanguageAnalyzer directamente en vez de usar analyzeProjectWith.
3. Regístralo
Agrega una línea en src/lib/analysis/registry.ts.
4. Cablea la UI
EXTyPROJECT_EXTSenroute.tsyCodeWorkspace.tsx(extensiones).- El selector de lenguaje y un sample en
CodeWorkspace.tsx.
5. Agrega un test
Un snippet → verificación de nodos/aristas en analyzers.test.ts.
go.ts y rust.ts (sin clases) o python.ts (con clases) como plantilla, y revisa CONTRIBUTING.md. ¡Los PRs de nuevos lenguajes son muy bienvenidos!