Replaces the R1 seed .scm emitter with a bespoke Rust walker (codegraph-kernel/src/tsjs/) that mirrors TreeSitterExtractor's TS/JS paths function-for-function: declarations (incl. #808 field/property classification), qualified names, docstrings (#780 wrapper climbs), signatures, imports/re-exports + per-binding refs, calls with receiver-qualified callees (#1230 literal-receiver skip), instantiations, decorators, inheritance, type annotations (#381), type-alias members + tuple contracts (#359/#634), React component recognition (#841 forwardRef/memo/styled), object-of-functions / zustand-through-middleware / RTK Query endpoints + generated hooks / vuex + pinia store shapes, function-as-value capture with the flush gate (#756), and value-reference edges with the shadow prune (#895/#897). The generic query emitter is deleted — extraction parity needs logic .scm can't express; future languages get walkers too (migration plan §4a). Positions and JS string-slice semantics are emitted in UTF-16 code units natively, so kernel output is byte-identical to web-tree-sitter's — no column diff class exists. Parity evidence (macOS): scripts/kernel-parity.mjs (full-object multiset diff per file) — this repo 353/353 files, excalidraw 643/643 (10,650 nodes / 10,726 edges / 68,307 refs), plus torture fixtures checked into __tests__/fixtures/kernel-parity/ and enforced in npm test by kernel-tsjs-parity.test.ts. The strict compare caught one real decoder bug the loose harness missed: refs must NOT carry denormalized filePath/language at the extractFromSource seam (the store fills them). Perf: extraction 2.6× single-thread on excalidraw (487ms vs 1,255ms, identical outputs). Routing stays opt-in (CODEGRAPH_KERNEL_LANGS) until the R3 equivalence gate (large repo, DB dump-diff, retrieval invariants, agent A/B, Linux/Windows) passes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
28 lines
1.3 KiB
Rust
28 lines
1.3 KiB
Rust
//! Grammar registry: codegraph `Language` string → native tree-sitter grammar.
|
|
//!
|
|
//! Mirrors the wasm side's `WASM_GRAMMAR_FILES` mapping (src/extraction/
|
|
//! grammars.ts): `tsx` and `jsx` reuse another language's grammar exactly the
|
|
//! way the wasm map does. The kernel-grammar-parity test asserts each entry is
|
|
//! built from the SAME grammar revision as the vendored wasm — bump the crate
|
|
//! and the wasm together.
|
|
//!
|
|
//! (R1 shipped a generic `.scm`-query emitter here; R2 replaced it with the
|
|
//! bespoke per-language walker — see tsjs/ and the migration plan §3a — because
|
|
//! extraction parity needs logic queries can't express. New languages add a
|
|
//! grammar entry + a walker module.)
|
|
|
|
use tree_sitter::Language;
|
|
|
|
/// Languages this kernel binary can extract (reported by contractInfo;
|
|
/// TS-side routing policy decides what actually routes).
|
|
pub const LANGUAGES: [&str; 4] = ["typescript", "tsx", "javascript", "jsx"];
|
|
|
|
pub fn grammar_for(language: &str) -> Option<Language> {
|
|
match language {
|
|
"typescript" => Some(tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into()),
|
|
"tsx" => Some(tree_sitter_typescript::LANGUAGE_TSX.into()),
|
|
"javascript" | "jsx" => Some(tree_sitter_javascript::LANGUAGE.into()),
|
|
_ => None,
|
|
}
|
|
}
|