Weftmap
Documentación

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.

src/lib/analysis/analyzers/go.ts
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

  • EXT y PROJECT_EXTS en route.ts y CodeWorkspace.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.

Mira 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!