mirror of
https://github.com/colbymchenry/codegraph.git
synced 2026-10-25 07:02:59 +08:00
The Windows kernels read the `!` of every `try!` as a logical not, so `try! Message2(data: d)` became a call of `! Message2` that never resolves, and a call through a receiver lost it: `try! Settings.Defaults.load()` was a bare `load`. The cause is the grammar's C, not the walker. tree-sitter-swift 0.7.3's external scanner steps aside for the `!` of `try!` through a 64-bit mask whose entry is built as `1UL << FAKE_TRY_BANG`, bit 32. `unsigned long` is 32 bits on Windows and MSVC folds the overflowing shift to 0 (warning C4293), so the scanner never stepped aside: `try` parsed alone, then a prefix `!` on the callee. macOS and Linux have 64-bit longs, and clang's wasm32 build folds the shift to bit 31 (`_directive_endif`, valid at every expression start), so the wasm and the other kernels have always read `try!` right. The kernel now compiles the crate tarball's src/ itself, from codegraph-kernel/grammars/swift, with upstream 0.7.4's one-line fix (`1ULL`), as it already does for the Kotlin, Lua, Scala and Dart grammars. The patch and its provenance are in docs/grammars/tree-sitter-swift.patch and .md. parser.c is unchanged, so the node-kind and field tables still match the wasm, which is untouched. TortureTry.swift pins calls after try!, try? and try on both engines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
108 lines
5.5 KiB
Rust
108 lines
5.5 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;
|
|
|
|
// Vendored kotlin grammar (build.rs-compiled C — no usable crate exists;
|
|
// see grammars/kotlin and the kotlin checklist §Grammar prep).
|
|
extern "C" {
|
|
fn tree_sitter_kotlin() -> *const ();
|
|
}
|
|
// Vendored lua grammar (build.rs-compiled C — the wasm's v0.4.1 revision is
|
|
// not on crates.io; see grammars/lua and the lua-luau checklist).
|
|
extern "C" {
|
|
fn tree_sitter_lua() -> *const ();
|
|
}
|
|
// Vendored scala grammar (build.rs-compiled C — the wasm and these sources are
|
|
// the v0.26.2 release; see grammars/scala and the scala checklist).
|
|
extern "C" {
|
|
fn tree_sitter_scala() -> *const ();
|
|
}
|
|
// Vendored dart grammar (build.rs-compiled C — UserNobody14 d4d8f3e; the
|
|
// crates.io crate is a different-lineage fork; see grammars/dart).
|
|
extern "C" {
|
|
fn tree_sitter_dart() -> *const ();
|
|
}
|
|
// Vendored swift grammar (build.rs-compiled C — crate 0.7.3's src/ with a
|
|
// one-line scanner fix the crate's own build lacks on Windows; see
|
|
// grammars/swift and docs/grammars/tree-sitter-swift.md).
|
|
extern "C" {
|
|
fn tree_sitter_swift() -> *const ();
|
|
}
|
|
|
|
/// Languages this kernel binary can extract (reported by contractInfo;
|
|
/// TS-side routing policy decides what actually routes).
|
|
pub const LANGUAGES: [&str; 20] = [
|
|
"typescript", "tsx", "javascript", "jsx", "java", "python", "go", "c", "cpp", "rust",
|
|
"csharp", "ruby", "php", "swift", "kotlin", "r", "lua", "luau", "scala", "dart",
|
|
];
|
|
|
|
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()),
|
|
"java" => Some(tree_sitter_java::LANGUAGE.into()),
|
|
"python" => Some(tree_sitter_python::LANGUAGE.into()),
|
|
"go" => Some(tree_sitter_go::LANGUAGE.into()),
|
|
// `.metal`/`.cu`/`.cuh` map to language 'cpp' at detectLanguage, so the
|
|
// dialects ride this grammar too (their blanking pre-passes stay
|
|
// TS-side — the route point applies preParse before the kernel call).
|
|
"c" => Some(tree_sitter_c::LANGUAGE.into()),
|
|
"cpp" => Some(tree_sitter_cpp::LANGUAGE.into()),
|
|
// R7b: v0.24.2, sha-matched with the vendored wasm (grammars.ts).
|
|
"rust" => Some(tree_sitter_rust::LANGUAGE.into()),
|
|
// R7b: 0.23.5, table-identical to the vendored ABI-15 wasm (#717;
|
|
// verified against the crates.io tarball — csharp checklist header).
|
|
"csharp" => Some(tree_sitter_c_sharp::LANGUAGE.into()),
|
|
// R7b: v0.23.1, sha-matched with the vendored wasm (grammars.ts).
|
|
// Content bump only — the tag's parser.c is still ABI 14.
|
|
"ruby" => Some(tree_sitter_ruby::LANGUAGE.into()),
|
|
// R7b: v0.24.2, the full HTML-interleaving variant — LANGUAGE_PHP,
|
|
// NEVER LANGUAGE_PHP_ONLY (which errors on leading HTML).
|
|
"php" => Some(tree_sitter_php::LANGUAGE_PHP.into()),
|
|
// R7b: crate 0.7.3's src/, the sources the vendored wasm is built
|
|
// from (table identity by construction; see grammars.ts), compiled in
|
|
// build.rs with the scanner's `try!` fix (`1ULL << FAKE_TRY_BANG`).
|
|
"swift" => {
|
|
Some(unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_swift) }.into())
|
|
}
|
|
// R7b: fwcd 0.3.8, vendored C compiled in build.rs (crate unusable).
|
|
"kotlin" => {
|
|
Some(unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_kotlin) }.into())
|
|
}
|
|
// R7b batch 4: crate =1.2.0, sha-identical to the r-lib v1.2.0 tag
|
|
// the vendored wasm was built from (r checklist §Grammar prep).
|
|
"r" => Some(tree_sitter_r::LANGUAGE.into()),
|
|
// R7b batch 4: v0.4.1 vendored C compiled in build.rs (revision not
|
|
// on crates.io — the wasm is the v0.4.1 tag, table-identical).
|
|
"lua" => {
|
|
Some(unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_lua) }.into())
|
|
}
|
|
// R7b batch 4: crate =1.2.0, sha-identical to the v1.2.0 tag the
|
|
// vendored wasm was built from (lua-luau checklist §Grammar prep).
|
|
"luau" => Some(tree_sitter_luau::LANGUAGE.into()),
|
|
// R7b batch 4: vendored C compiled in build.rs, now the v0.26.2
|
|
// release (#1823), kept byte-identical with the vendored wasm.
|
|
"scala" => {
|
|
Some(unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_scala) }.into())
|
|
}
|
|
// R7b batch 4: UserNobody14 d4d8f3e vendored C compiled in build.rs
|
|
// (same commit as the byte-copied tree-sitter-wasms 0.1.13 artifact).
|
|
"dart" => {
|
|
Some(unsafe { tree_sitter_language::LanguageFn::from_raw(tree_sitter_dart) }.into())
|
|
}
|
|
_ => None,
|
|
}
|
|
}
|