From 1955c4d031823de63337c496cd33c82ac2ff3c03 Mon Sep 17 00:00:00 2001 From: Ivan Drenjanin Date: Wed, 5 Aug 2026 18:35:39 +0200 Subject: [PATCH 1/2] =?UTF-8?q?feat(extraction):=20vendor=20tree-sitter-od?= =?UTF-8?q?in=20v1.3.0=20=E2=80=94=20wasm-only,=20ABI=2014,=20built=20from?= =?UTF-8?q?=20the=20tag's=20checked-in=20parser.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit tree-sitter-wasms does not ship an Odin grammar, so the wasm is built here from tree-sitter-grammars/tree-sitter-odin @ v1.3.0 (e8adc73, MIT, Copyright (c) 2023 Amaan Qureshi) with tree-sitter-cli 0.26.11 `build --wasm`, ABI 14. The tag's checked-in parser.c is used as-is rather than regenerated: it predates the ABI-15 generator, and regenerating would diverge the tables from the tag nobody could then reproduce. Pin the TAG and not master. Master's single unreleased commit past v1.3.0 (d2ca8ef, "allow multiple identifiers before `:` in named_type") regresses multi-value return types — `f :: proc() -> (string, bool)` parses to an ERROR node — which is one of the most common signature shapes in real Odin. Measured across three pinned public Odin repositories (343 files): 68 files with parse errors at v1.3.0 against 111 at master. docs/grammars/tree-sitter-odin.md records the sha256, the parser.c and scanner.c hashes, the builder version, a reproducible rebuild recipe, and the measured parse health — including the fact that a CRLF working tree costs 1.7% of declarations to a v1.3.0 line-continuation gap. Refs #648, #1000 --- docs/grammars/tree-sitter-odin.md | 202 ++++++++++++++++++++++ src/extraction/wasm/tree-sitter-odin.wasm | Bin 0 -> 2218713 bytes 2 files changed, 202 insertions(+) create mode 100644 docs/grammars/tree-sitter-odin.md create mode 100644 src/extraction/wasm/tree-sitter-odin.wasm diff --git a/docs/grammars/tree-sitter-odin.md b/docs/grammars/tree-sitter-odin.md new file mode 100644 index 000000000..78aba2e85 --- /dev/null +++ b/docs/grammars/tree-sitter-odin.md @@ -0,0 +1,202 @@ +# tree-sitter-odin.wasm — provenance & rebuild + +`src/extraction/wasm/tree-sitter-odin.wasm` is built from +[tree-sitter-grammars/tree-sitter-odin](https://github.com/tree-sitter-grammars/tree-sitter-odin) +(MIT, Copyright (c) 2023 Amaan Qureshi) at tag **`v1.3.0`**, commit +`e8adc739b78409a99f8c31313f0bb54cc538cf73`, from the tag's **checked-in** +`src/parser.c` — no `tree-sitter generate`, no patch. + +| | | +| --- | --- | +| wasm sha256 | `99fd3217b82b1ba4f438120591ec2ed24108f782ab693d69b330d753188632fb` | +| wasm size | 2,218,713 bytes | +| ABI | 14 | +| `src/parser.c` sha256 | `8f672d8d022d70eeae822796924f2e45e692d6b2acd2ddc79bfeb5f696fa24f0` | +| `src/scanner.c` sha256 | `e342d07d3e35c3865a6bda0587f3a3b46a7b2411fd93cbee01dc40ab7631c93b` | +| builder | tree-sitter-cli 0.26.11 (`build --wasm`) | + +ABI 14 rather than 15 because the tag's checked-in `parser.c` predates the +ABI-15 generator; regenerating would diverge the tables from the tag, which is +the whole point of pinning one. Odin is **wasm-only** — the native extraction +kernel has no Odin counterpart, so there is no crate revision to keep in step +and `codegraph-kernel` is untouched. + +## Pin the tag, not master + +Master carries exactly one unreleased commit past `v1.3.0` +(`d2ca8ef`, *"allow multiple identifiers before `:` in `named_type`"*), and it +**regresses multi-value return types** — the single most common Odin signature +shape: + +```odin +package p +f :: proc() -> (string, bool) { + return "x", true +} +``` + +parses clean at `v1.3.0` and yields `ERROR ", bool"` at `d2ca8ef`. Both are +ABI 14 and both load, so the regression does not announce itself as a load +failure — only a corpus diff exposes it, and the diff is large: + +| corpus | files with an ERROR tree at `v1.3.0` | at `d2ca8ef` | +| --- | --- | --- | +| odin-http | 3 | 9 | +| ols | 15 | 51 | +| SpaceLib | 50 | 51 | + +## Measured parse health + +**Every corpus below is a pinned public checkout, so these numbers are +reproducible.** They were measured on Windows with git's default +`core.autocrlf=true`, which is what puts CRs in the working tree — that turns +out to matter more than anything else here, so the CRLF and LF columns are both +given. The fourth row is my own Odin project, an 84-file snapshot, included only +because it is the one this extractor was developed against; nothing in the PR +rests on it. + +| corpus | commit | `.odin` files | ERROR as checked out (CRLF) | ERROR after `\r\n`→`\n` | +| --- | --- | --- | --- | --- | +| [laytan/odin-http](https://github.com/laytan/odin-http) | `65f57ca` | 39 | 3 | 1 | +| [DanielGavin/ols](https://github.com/DanielGavin/ols) | `e62a371` | 138 | 15 | 10 | +| [greenya/SpaceLib](https://github.com/greenya/SpaceLib) | `95bf115` | 166 | 50 | 26 | +| my own project (snapshot) | — | 84 | 5 | 1 | +| **total** | | **427** | **73** | **38** | + +**35 of the 73 failures are caused by the line ending alone** — the same bytes +with the CRs removed parse clean. Gap 1 below is that class. The remaining 38 +are other `v1.3.0` gaps that are NOT characterized here: the recurring shapes +are ternary/`?:` expressions, `matrix` types, `[dynamic; N]` array types and +shebang lines, and `ols` deliberately keeps pathological formatter fixtures +under `tools/odinfmt/tests/`. Do not read this table as "two constructs account +for everything" — that is true of my own project and of nothing else. + +Some shapes appear in the fixture in `__tests__/extraction.test.ts` rather than +in these corpora, so the table evidences nothing about them: calling conventions +(`proc "contextless"`), `when` blocks, `union`s, `bit_field`s and procedure +groups (`f :: proc{a, b}`). The fixture is where their extraction is held. + +Recovery is usually — **not always** — local. Counting top-level declaration +nodes (`procedure_declaration`, `struct_declaration`, `enum_declaration`, +`union_declaration`, `bit_field_declaration`, `import_declaration`, +`const_declaration`, `var_declaration`) and `call_expression`s over all 427 +files, CRLF against LF: + +``` +declarations 8,937 (CRLF) 9,088 (LF) −151 (−1.7%) +call sites 26,999 (CRLF) 27,196 (LF) −197 (−0.7%) +``` + +Of the 35 files that fail only because of their line ending, **27 lose nothing +at all** — the ERROR is a leaf under a `parenthesized_expression` and every +declaration around it still extracts with its correct span — and **8 lose +declarations wholesale**, because the ERROR lands at the top of the file instead +(`ols/src/server/analysis.odin` loses 105 procedures; `odin-http/response.odin` +loses 8). On my own project the loss is zero, which is exactly why a +single-project measurement was not good enough to publish. + +### Gap 1 — trailing-backslash line continuation, in a **CRLF** working tree + +What `odinfmt` emits when it wraps a long line, which is why it is the gap a +real Odin project meets first: + +```odin +return( + "a long line" \ +) +``` + +The trigger is the **line ending**. Written with LF this parses clean; written +with CRLF it yields an ERROR under the `parenthesized_expression`. To reproduce, +note that the continuation is a backslash followed *immediately* by the newline +— a shell heredoc that collapses `\\\n` into a literal `\n` produces a different +(and unrelated) parse failure: + +```js +const src = 'package p\n\nf :: proc() -> string {\n\treturn(\n\t\t"a long line" ' + + String.fromCharCode(92) + '\n\t)\n}\n'; +// LF → hasError false +// CRLF → hasError true, ERROR @5:16 under parenthesized_expression +``` + +The corpus-wide version of the same experiment is the table above: 35 files +across four repositories flip from ERROR to clean on the CRs alone. So a +repository checked out CRLF — every Windows checkout without +`core.autocrlf=input` — hits this on a construct its own formatter generates, +and the same repository on a POSIX checkout does not. Do not attempt a +workaround in `odin.ts`: the extractor is handed a tree, and the tree is where +the bytes went. + +### Gap 2 — an anonymous `proc` literal inside a composite literal + +```odin +CASES := []Case{ + {"a", proc(f: ^Found) {helper(f)}}, +} +``` + +Line-ending independent, and the pointer parameter is NOT the trigger: +`{"b", proc(f: Found) {}}` errors too, while the same literal bound to a name +(`bound := proc(f: ^Found) {helper(f)}`) parses clean. It is the composite-literal +context. Table-driven tests with `proc` mutators are an idiomatic Odin pattern, +so this is the second one worth upstreaming. + +**Measured cost on this sample: zero.** Every enclosing declaration extracts +(`Found`, `Case`, `CASES`, their fields), and the `call_expression` inside the +broken literal survives the ERROR — `helper` is called at line 15 from inside the +literal and at line 18 from the clean one, and BOTH produce a `calls` edge. + +### Gap 3 — a top-level `using ` + +This one is not localized at all. Measured on a four-line file: + +```odin +package p +using fmt +f :: proc() { helper() } +g :: proc() { other() } +``` + +yields **zero** `procedure_declaration` nodes — the ERROR swallows every +declaration in the file, including ones above the `using`. The same file without +the `using` line yields 2. It does not occur in any of the four corpora above, +but it is the gap worth knowing about, because its failure mode is silence +rather than a localized hole. + +The project's own gate passes on a clean sample: + +```bash +node scripts/add-lang/check-grammar.mjs src/extraction/wasm/tree-sitter-odin.wasm sample.odin 30 +# ABI version: 14 +# parses: 30 clean / 0 with errors (of 30) +# RESULT: PASS +``` + +## Rebuild + +```bash +git clone https://github.com/tree-sitter-grammars/tree-sitter-odin +cd tree-sitter-odin +git checkout v1.3.0 +npm install tree-sitter-cli@0.26.11 # what this wasm was built with; it pulled + # a wasi-sdk down on its own, no Docker +npx tree-sitter build --wasm -o tree-sitter-odin.wasm . # compiles the CHECKED-IN parser.c +cp tree-sitter-odin.wasm /src/extraction/wasm/tree-sitter-odin.wasm +``` + +The npm package `tree-sitter-odin@1.3.0` also ships a prebuilt +`tree-sitter-odin.wasm` (sha256 `4a3c9f50ac2356d2284d26e92322c554b276ad6bf6bce87a8594cff95d2ed6f1`). +It is byte-different from the build above (different toolchain) but +**behaviourally identical**: parsing all 427 corpus files with both and diffing +s-expressions gives 427/427 identical ASTs. Building from the tag is preferred +anyway — it is the house rule for every other vendored grammar here, and it +does not require trusting the publisher's build machine (the package carries a +registry signature but no build attestation). + +## Upstreaming + +Nothing sent. All three gaps above are worth an upstream issue — the CRLF one +especially, since `odinfmt` generates the construct, a Windows checkout is where +it lands, and it is the single largest cause of parse failure measured here. +None is patched here, so `tree-sitter build --wasm` on tag `v1.3.0` reproduces +the vendored grammar exactly. diff --git a/src/extraction/wasm/tree-sitter-odin.wasm b/src/extraction/wasm/tree-sitter-odin.wasm new file mode 100644 index 0000000000000000000000000000000000000000..174824e43652f72034ebb528c7be3ab3f2793f44 GIT binary patch literal 2218713 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�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⩔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 literal 0 HcmV?d00001 From 51266f264152185cac6b47817487938ab85c9146 Mon Sep 17 00:00:00 2001 From: Ivan Drenjanin Date: Wed, 5 Aug 2026 18:35:39 +0200 Subject: [PATCH 2/2] feat(extraction): add Odin language support with package-directory call scoping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Registers `odin` across the five wiring points — LANGUAGES in src/types.ts, the wasm-file map / EXTENSION_MAP / VENDORED_WASM_LANGS / display name in grammars.ts, and the extractor map — and adds a 581-line extractor covering procedures with their calling conventions and `@(...)` attributes, procedure groups linked to their overloads, structs with fields, enums, unions, bit fields, `distinct` and proc-type aliases, `::` constants, imports with and without an alias, `foreign` blocks and `when` blocks. Two walker branches in tree-sitter.ts, both guarded on `this.language === 'odin'` and both there to stop a WRONG edge rather than to add one: - extractVariable: Odin declares positionally — `[attributes] NAME :: value`, with no `name:` field in the grammar and a comma-separated name list on both the `::` and the `:` form. The generic fallback takes every identifier child, so `Alias :: Other` minted a second symbol named after the right-hand side. - extractCall: Odin puts a call's package qualifier OUTSIDE the call node — `fmt.println(x)` is member_expression(`fmt`, call_expression(function: `println`)) — so the generic path read `println` alone and linked it to whatever same-named procedure the repo happened to define, which is the wrong-edge class #1079/#1107 fixed for same-named methods. The qualifier is re-attached as `pkg::callee`, matching the qualifiedName the package namespace already gives every top-level symbol. A `->` call is deliberately left bare: its receiver is a variable, not a package. Builtins (`len`, `append`, `max`) are suppressed at emit the way terraform's BUILTIN_HEADS and SCALA_BUILTIN_TYPES are. An Odin package IS a directory, so resolution/index.ts gains a third arm beside the two nix ones on the same `if`/`else if`: an unqualified `calls` ref can only bind inside its own package directory, because a genuine cross-package call carries its qualifier and resolves by qualified name. This is the same directory-scoping shape Terraform already has and that the Nix language PR (7f32513) established for a language's own scoping rules. A committed test asserts the gate costs neither of the two edges Odin genuinely has. Imports are recorded as symbols but deliberately not resolved to file edges: `import "core:fmt"` and `import "../shared"` name a directory, not a file. 28 extraction tests and 2 resolution tests, modeled on the Rust block. README and CHANGELOG gain their rows, both carrying the grammar's measured parse caveat; docs/grammars/tree-sitter-odin.md (previous commit) carries the provenance and the numbers. Odin routes to the wasm engine — the native Rust kernel has no Odin counterpart, and adding one is a clean follow-up rather than a prerequisite. Refs #648, #1000 --- CHANGELOG.md | 1 + README.md | 3 +- __tests__/extraction.test.ts | 562 +++++++++++++++++++++++++++++ __tests__/resolution.test.ts | 96 +++++ src/extraction/grammars.ts | 16 +- src/extraction/languages/index.ts | 2 + src/extraction/languages/odin.ts | 581 ++++++++++++++++++++++++++++++ src/extraction/tree-sitter.ts | 117 ++++++ src/resolution/index.ts | 15 + src/types.ts | 1 + 10 files changed, 1392 insertions(+), 2 deletions(-) create mode 100644 src/extraction/languages/odin.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dfc0e9e8..061623bb8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### New Features +- CodeGraph now indexes **Odin** (`.odin`) — procedures with their calling conventions and `@(...)` attributes, procedure groups linked to their overloads, structs, enums, unions, bit fields, `distinct` and proc-type aliases, constants, imports, `foreign` blocks, `when` blocks, and call edges that keep their package qualifier so `fmt.println` never links to a procedure of your own. An Odin package is a directory, so imports are recorded as symbols but deliberately left unlinked rather than guessed at a file. The vendored `tree-sitter-odin` v1.3.0 grammar has known gaps that leave an ERROR node in some files — most often a trailing-backslash line continuation in a CRLF working tree, which usually costs nothing but occasionally costs a file's declarations; `docs/grammars/tree-sitter-odin.md` records the measured parse health on four Odin repositories. Thanks @RainerXE, who first proposed Odin support. (#648, #1000) - Anonymous usage telemetry is now stored entirely on CodeGraph's own first-party infrastructure — no third-party analytics vendor receives any of it, and the endpoint that receives it makes no outbound requests at all. Individual events are deleted after 90 days, leaving only anonymous daily totals. Nothing about what is collected changed, your IP address is still never read or stored, and every off-switch works exactly as before (`codegraph telemetry off`, `CODEGRAPH_TELEMETRY=0`, `DO_NOT_TRACK=1`). `TELEMETRY.md` remains the complete field-by-field list. - `codegraph_explore` no longer re-sends source it already returned earlier in the same conversation. A file it has already shown you comes back as a short pointer — the path, the symbols and the exact line range, with confirmation that the file hasn't changed since — and the space that frees is spent on code you haven't seen yet, so a follow-up call covers new ground instead of repeating the last one. If a file was edited in between, its source is always shown again in full. Set `CODEGRAPH_EXPLORE_DEDUP=0` to turn this off. diff --git a/README.md b/README.md index 903ae0c3f..ae2ef70c7 100644 --- a/README.md +++ b/README.md @@ -277,7 +277,7 @@ CodeGraph's parsing engine is a **native Rust kernel**: 20 languages — TypeScr | **Full-Text Search** | Find code by name instantly across your entire codebase, powered by FTS5 | | **Impact Analysis** | Trace callers, callees, and the full impact radius of any symbol before making changes | | **Always Fresh** | File watcher uses native OS events (FSEvents/inotify/ReadDirectoryChangesW) with debounced auto-sync — the graph stays current as you code, zero config | -| **20+ Languages** | TypeScript, JavaScript, ArkTS, Python, Go, Rust, Java, C#, VB.NET, PHP, Ruby, C, C++, CUDA, Objective-C, Metal, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Nix, Erlang, CFML, COBOL, Solidity, Terraform/OpenTofu, Svelte, Vue, Astro, Liquid, Pascal/Delphi | +| **20+ Languages** | TypeScript, JavaScript, ArkTS, Python, Go, Rust, Java, C#, VB.NET, PHP, Ruby, C, C++, CUDA, Objective-C, Metal, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Nix, Erlang, CFML, COBOL, Solidity, Terraform/OpenTofu, Odin, Svelte, Vue, Astro, Liquid, Pascal/Delphi | | **Framework-aware Routes** | Recognizes web-framework routing files and links URL patterns to their handlers across 17 frameworks | | **Mixed iOS / React Native / Expo** | Closes cross-language flows that static parsing misses: Swift ↔ ObjC bridging, React Native legacy bridge + TurboModules + Fabric view components, native → JS event emitters, Expo Modules | | **100% Local** | No data leaves your machine. No API keys. No external services. SQLite database only | @@ -799,6 +799,7 @@ is written): | Solidity | `.sol` | Full support (contracts, libraries, interfaces, structs, enums, modifiers, events, errors, state variables, `import`/`using` directives, `emit`/`revert` calls) | | Terraform / OpenTofu | `.tf`, `.tfvars`, `.tofu` | Full support (resources, data sources, modules, variables, outputs, providers incl. aliases, `locals`; `var.`/`local.`/`module.`/resource references with Terraform's per-directory scoping enforced; module calls bridged across the boundary — inputs to the child module's variables, `module.M.out` to the child's output, `source` to the module's files; cloudposse/atmos `remote-state` cross-component wiring when the component is statically named; `provider = aws.east` selections resolved up the module tree; `moved`/`import`/`removed`/`check` block references; `.tfvars` assignments linked to the variables they set) | | Nix | `.nix` | Full support (functions with simple/destructured/curried params, `let`/attrset bindings, `inherit`, `import ./path` file edges — `./dir` resolving through `default.nix` — plus NixOS module `imports = [ ./x.nix ]` lists and `callPackage ./pkg.nix` file edges; call edges; module-system option wiring — a config write like `launchd.user.agents.x = { ... }` links to the module declaring `options.launchd.user.agents`, so option flows trace across modules) | +| Odin | `.odin` | Full support (procedures incl. calling conventions, `@(...)` attributes as modifiers and `@(private)` visibility, procedure groups linked to their overloads, structs with fields, enums, unions, bit fields, `distinct`/proc-type aliases, `::` constants, `import` with and without an alias, `foreign` blocks, `when` blocks, package-qualified call edges, with an unqualified call scoped to its own package directory. An Odin package is a DIRECTORY rather than a file, so `import` statements are recorded as symbols but are **not** resolved to file edges at all — `import "core:fmt"` and `import "../shared"` alike stay external and unresolved. Note the vendored `tree-sitter-odin` v1.3.0 grammar has gaps that leave an ERROR node in some files — most commonly a trailing-backslash line continuation in a **CRLF** working tree, which is what `odinfmt` emits when it wraps a long line. Recovery is usually local and costs nothing, but not always: measured over 427 files in four Odin repositories, a CRLF checkout extracts 1.7% fewer declarations than the same bytes with LF endings. `docs/grammars/tree-sitter-odin.md` has the per-repository numbers) | ## Measured cross-file coverage diff --git a/__tests__/extraction.test.ts b/__tests__/extraction.test.ts index 784023952..3f5f4826f 100644 --- a/__tests__/extraction.test.ts +++ b/__tests__/extraction.test.ts @@ -150,6 +150,11 @@ describe('Language Detection', () => { expect(isSourceFile('default.nix')).toBe(true); }); + it('should detect Odin files', () => { + expect(detectLanguage('src/artifact/sidecar.odin')).toBe('odin'); + expect(isSourceFile('src/artifact/sidecar.odin')).toBe(true); + }); + it('should detect a .h whose only C++ signal is an export-macro class as cpp', () => { // Lean Unreal-Engine style header: the class is annotated with an export // macro and carries no explicit `public:`/`virtual`/`namespace`/`template`, @@ -205,6 +210,7 @@ describe('Language Support', () => { expect(languages).toContain('dart'); expect(languages).toContain('solidity'); expect(languages).toContain('nix'); + expect(languages).toContain('odin'); }); }); @@ -11463,3 +11469,559 @@ describe('C/C++ kernel-port preParse blanks (R7a)', () => { expect(result.nodes.some((n) => n.kind === 'method' && n.name === 'size')).toBe(true); }); }); + +describe('Odin Extraction', () => { + // Real-shaped Odin: everything is declared with `::`, attributes sit ABOVE + // the name, procedures are all top-level, and a package is the directory. + const code = `#+vet +package artifact + +import "core:fmt" +import "core:os" +import st "core:strings" +import "../shared" +foreign import kernel32 "system:kernel32.lib" + +MAX_DIGITS :: 12 +DEFAULT_NAME := "sidecar" + +Handle :: distinct u32 +Callback :: proc(x: int) -> bool + +Sidecar :: struct { + path: string, + source_modified: i64, + digest: Handle, +} + +Fault :: enum u8 { + None, + Unreadable, + Path_Not_Ascii, +} + +Value :: union { + string, + i64, +} + +Flags :: bit_field u8 { + visible: bool | 1, + level: u8 | 3, +} + +@(require_results) +sidecar_read :: proc(path: string) -> (Sidecar, bool) { + s: Sidecar + fmt.eprintln("reading", path) + s.path = st.clone(path) + shared.record(s.path) + if !sidecar_valid(&s) { + return s, false + } + return s, true +} + +@(private) +@(require_results) +sidecar_write :: proc(s: ^Sidecar) -> Fault { + return .None +} + +sidecar_valid :: proc "contextless" (s: ^Sidecar) -> bool { + return s.path != "" +} + +sidecar_of :: proc { + sidecar_of_path, + sidecar_of_handle, +} + +sidecar_of_path :: proc(path: string) -> Sidecar {return Sidecar{path = path}} +sidecar_of_handle :: proc(h: Handle) -> Sidecar {return Sidecar{digest = h}} + +@(test) +reads_a_sidecar :: proc(t: ^testing.T) { + _, ok := sidecar_read("a.json") + testing.expect(t, ok) +} + +foreign kernel32 { + GetLastError :: proc() -> u32 --- +} + +when ODIN_OS == .Windows { + platform_name :: proc() -> string { + return "windows" + } + + PLATFORM :: "windows" +} +`; + + describe('Language detection', () => { + it('should detect Odin files', () => { + expect(detectLanguage('src/artifact/sidecar.odin')).toBe('odin'); + expect(isSourceFile('src/artifact/sidecar.odin')).toBe(true); + }); + + it('should report Odin as supported', () => { + expect(isLanguageSupported('odin')).toBe(true); + expect(getSupportedLanguages()).toContain('odin'); + }); + }); + + describe('Procedure extraction', () => { + it('should name a procedure by its identifier, not by its attributes', () => { + // `@(require_results)` / `@(private)` / `@(test)` are the FIRST named child + // of a decorated declaration, so a firstNamedChild name walk names most of + // an idiomatic Odin file "@(require_results)". + const result = extractFromSource('sidecar.odin', code); + const names = result.nodes.filter((n) => n.kind === 'function').map((n) => n.name); + expect(names).toContain('sidecar_read'); + expect(names).toContain('sidecar_write'); + expect(names).toContain('reads_a_sidecar'); + expect(names.some((n) => n.startsWith('@'))).toBe(false); + }); + + it('should capture signatures including the calling convention', () => { + const result = extractFromSource('sidecar.odin', code); + const read = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_read'); + expect(read?.language).toBe('odin'); + expect(read?.signature).toBe('proc(path: string) -> (Sidecar, bool)'); + const valid = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_valid'); + expect(valid?.signature).toContain('"contextless"'); + }); + + it('should read visibility from @(private) and modifiers from every attribute', () => { + const result = extractFromSource('sidecar.odin', code); + const write = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_write'); + expect(write?.visibility).toBe('private'); + expect(write?.isExported).toBe(false); + expect(write?.decorators).toEqual(expect.arrayContaining(['private', 'require_results'])); + const read = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_read'); + expect(read?.visibility).toBe('public'); + const test = result.nodes.find((n) => n.kind === 'function' && n.name === 'reads_a_sidecar'); + expect(test?.decorators).toContain('test'); + }); + + it('should extract a procedure GROUP and link it to its overloads', () => { + const result = extractFromSource('sidecar.odin', code); + const group = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_of'); + expect(group).toBeDefined(); + expect(group?.signature).toContain('sidecar_of_path'); + const refs = result.unresolvedReferences.filter( + (r) => r.referenceKind === 'references' && r.fromNodeId === group?.id + ); + expect(refs.map((r) => r.referenceName)).toEqual(['sidecar_of_path', 'sidecar_of_handle']); + }); + + it('should extract a foreign-block FFI procedure and a when-block procedure', () => { + const result = extractFromSource('sidecar.odin', code); + // Bodiless, inside `foreign kernel32 { … }` — still a real callable. + expect(result.nodes.find((n) => n.kind === 'function' && n.name === 'GetLastError')).toBeDefined(); + // Declarations inside a top-level `when` are ordinary declarations. + expect(result.nodes.find((n) => n.kind === 'function' && n.name === 'platform_name')).toBeDefined(); + expect(result.nodes.find((n) => n.kind === 'constant' && n.name === 'PLATFORM')).toBeDefined(); + }); + }); + + describe('Type declaration extraction', () => { + it('should extract struct fields with their declared types', () => { + const result = extractFromSource('sidecar.odin', code); + const struct = result.nodes.find((n) => n.kind === 'struct' && n.name === 'Sidecar'); + expect(struct).toBeDefined(); + const fields = result.nodes.filter((n) => n.kind === 'field'); + expect(fields.map((f) => f.name)).toEqual( + expect.arrayContaining(['path', 'source_modified', 'digest', 'visible', 'level']) + ); + expect(fields.find((f) => f.name === 'digest')?.signature).toBe('digest: Handle'); + // The field's declared type is a dependency of the record. + expect( + result.unresolvedReferences.some( + (r) => + r.referenceKind === 'references' && + r.referenceName === 'Handle' && + r.fromNodeId === struct?.id + ) + ).toBe(true); + }); + + it('should extract enum members WITHOUT minting one named after the enum', () => { + // The enum's own name is an `identifier` child exactly like its members + // are, and the backing type (`u8`) sits between them. + const result = extractFromSource('sidecar.odin', code); + expect(result.nodes.find((n) => n.kind === 'enum' && n.name === 'Fault')).toBeDefined(); + const members = result.nodes.filter((n) => n.kind === 'enum_member').map((n) => n.name); + expect(members).toEqual(['None', 'Unreadable', 'Path_Not_Ascii']); + }); + + it('should extract a union as a struct referencing its variants', () => { + const result = extractFromSource('sidecar.odin', code); + const union = result.nodes.find((n) => n.kind === 'struct' && n.name === 'Value'); + expect(union).toBeDefined(); + const variants = result.unresolvedReferences + .filter((r) => r.referenceKind === 'references' && r.fromNodeId === union?.id) + .map((r) => r.referenceName); + expect(variants).toEqual(['string', 'i64']); + }); + + it('should split type aliases out of `::` constants', () => { + const result = extractFromSource('sidecar.odin', code); + // `Handle :: distinct u32` and `Callback :: proc(...) -> bool` are types… + const aliases = result.nodes.filter((n) => n.kind === 'type_alias'); + expect(aliases.map((n) => n.name)).toEqual(['Handle', 'Callback']); + expect(aliases.find((n) => n.name === 'Handle')?.signature).toBe('distinct u32'); + // …while `MAX_DIGITS :: 12` stays a constant and `:=` stays a variable. + expect(result.nodes.find((n) => n.kind === 'constant' && n.name === 'MAX_DIGITS')).toBeDefined(); + expect(result.nodes.find((n) => n.kind === 'variable' && n.name === 'DEFAULT_NAME')).toBeDefined(); + }); + }); + + describe('Import extraction', () => { + it('should extract collection, relative, aliased and foreign imports', () => { + const result = extractFromSource('sidecar.odin', code); + const imports = result.nodes.filter((n) => n.kind === 'import').map((n) => n.name); + expect(imports).toEqual([ + 'core:fmt', + 'core:os', + 'core:strings', + '../shared', + 'system:kernel32.lib', + ]); + // The alias is not the module — `import st "core:strings"` imports strings. + const aliased = result.nodes.find((n) => n.kind === 'import' && n.name === 'core:strings'); + expect(aliased?.signature).toBe('import st "core:strings"'); + expect(result.unresolvedReferences.filter((r) => r.referenceKind === 'imports')).toHaveLength(5); + }); + }); + + describe('Call extraction', () => { + it('should keep the package qualifier on a qualified call', () => { + // `fmt.eprintln(x)` parses as member_expression(identifier, call_expression) + // — the qualifier is a SIBLING of the call, so the generic callee path + // would emit a bare `eprintln` that links to any same-named local. + const result = extractFromSource('sidecar.odin', code); + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toContain('fmt::eprintln'); + expect(calls).toContain('st::clone'); + expect(calls).toContain('shared::record'); + expect(calls).not.toContain('eprintln'); + }); + + it('should emit a bare name for a same-package call and attribute it to the caller', () => { + const result = extractFromSource('sidecar.odin', code); + const caller = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_read'); + const call = result.unresolvedReferences.find( + (r) => r.referenceKind === 'calls' && r.referenceName === 'sidecar_valid' + ); + expect(call).toBeDefined(); + expect(call?.fromNodeId).toBe(caller?.id); + }); + + it('should NOT emit a call ref for an unqualified builtin', () => { + // `len`/`append`/`make`/`max` are `base:builtin` — spelled exactly like a + // call of your own, so emitting them name-matches any same-named symbol + // anywhere, INCLUDING a struct field (`calls … -> Ring::len [field]`) and + // a package that is never imported. + const src = `package app + +use_it :: proc(xs: []int) -> int { + ys := make([]int, 4) + append(&ys, 1) + clear(&ys) + return len(xs) + cap(ys) + max(1, 2) + size_of(int) +} +`; + const result = extractFromSource('a.odin', src); + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toEqual([]); + }); + + it('should still emit a QUALIFIED call whose member shares a builtin name', () => { + // Only the bare form is a builtin — `slice.max(xs)` is somebody's `max`. + const src = `package app + +f :: proc(xs: []int) -> int { + return slice.max(xs) +} +`; + const result = extractFromSource('a.odin', src); + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toEqual(['slice::max']); + }); + + it('should NOT read a `->` receiver as a package qualifier', () => { + // `h->run()` is selector_call_expression(function: `h`, call_expression), + // the same shape a qualified call has — but `h` is a receiver VARIABLE. + // Emitted as `h::run` it is byte-identical to a cross-package call, so a + // receiver named after a repo package mints exactly the wrong edge the + // qualifier exists to prevent. + const src = `package app + +Sink :: struct { + run: proc(n: int), +} + +use_it :: proc(h: ^Sink) { + h->run(1) + sink.run(2) +} +`; + const result = extractFromSource('a.odin', src); + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toContain('run'); + expect(calls).not.toContain('h::run'); + // The genuine package qualifier is untouched. + expect(calls).toContain('sink::run'); + }); + + it('should read the callee THROUGH a compiler directive, and emit none for a bare one', () => { + // A directive is a `function`-field child of the call and it comes FIRST: + // `#force_inline f()` has two (tag, identifier) and `#assert(x)` has only + // the tag. Reading the first named `#force_inline` as the callee, lost the + // real one, and filed `#assert` as a call to a symbol nothing can declare. + const src = `package app + +MAX_DIGITS :: 12 +#assert(MAX_DIGITS < 19) +BLOB :: #load("data.bin") + +target :: proc() {} + +f :: proc() { + #force_inline target() + #no_bounds_check target() +} +`; + const result = extractFromSource('a.odin', src); + const calls = result.unresolvedReferences + .filter((r) => r.referenceKind === 'calls') + .map((r) => r.referenceName); + expect(calls).toEqual(['target', 'target']); + expect(calls.some((n) => n.startsWith('#'))).toBe(false); + }); + }); + + describe('Composite literals', () => { + it('should link an enumerated-array table to the enum it keys on', () => { + // `[Fault]string{…}` is the compiler's exhaustiveness guard: add a member + // to `Fault` and the build fails until the table grows a row. So the table + // is the declaration that MUST change with the enum, and it was the one + // declaration that did not name it — outdeg 0 on every table in a repo + // built around them. + const src = `package app + +Fault :: enum u8 { + None, + Broken, +} + +Facts :: struct { + label: string, +} + +FAULT := [Fault]string { + .None = "", + .Broken = "broken", +} + +TABLE :: [Fault]Facts { + .None = {label = ""}, + .Broken = {label = "broken"}, +} + +None :: proc() -> int {return 0} +`; + const result = extractFromSource('a.odin', src); + const refsOf = (name: string) => { + const owner = result.nodes.find((n) => n.name === name); + return result.unresolvedReferences + .filter((r) => r.referenceKind === 'references' && r.fromNodeId === owner?.id) + .map((r) => r.referenceName); + }; + expect(refsOf('FAULT')).toEqual(['Fault', 'string']); + expect(refsOf('TABLE')).toEqual(['Fault', 'Facts']); + // `.None` is an enum MEMBER in the literal's data, not a type — taking it + // would link the table to the same-named procedure below. + expect(refsOf('FAULT')).not.toContain('None'); + expect(refsOf('TABLE')).not.toContain('None'); + }); + + it('should link a record, map and slice literal to their element types', () => { + const src = `package app + +A := Sidecar{path = "x"} +B := [dynamic]Sidecar{} +C := map[string]Sidecar{} +D := []Sidecar{} +`; + const result = extractFromSource('a.odin', src); + const refsOf = (name: string) => { + const owner = result.nodes.find((n) => n.name === name); + return result.unresolvedReferences + .filter((r) => r.referenceKind === 'references' && r.fromNodeId === owner?.id) + .map((r) => r.referenceName); + }; + expect(refsOf('A')).toEqual(['Sidecar']); + expect(refsOf('B')).toEqual(['Sidecar']); + expect(refsOf('C')).toEqual(['string', 'Sidecar']); + expect(refsOf('D')).toEqual(['Sidecar']); + }); + }); + + describe('Multi-name declarations', () => { + it('should index EVERY name in a comma-separated declaration, with its own value', () => { + // `A, B :: 1, 2` and `x, y: int = 3, 4` are ONE declaration node each, + // with the names as a leading run — taking only the first dropped B and + // y entirely, and `at(-1)` gave A the value of B. + const src = `package sample + +A, B :: 1, 2 +x, y: int = 3, 4 +g: Registry +`; + const result = extractFromSource('s.odin', src); + const named = (name: string) => result.nodes.find((n) => n.name === name); + expect(named('A')?.kind).toBe('constant'); + expect(named('A')?.signature).toBe('= 1'); + expect(named('B')?.kind).toBe('constant'); + expect(named('B')?.signature).toBe('= 2'); + expect(named('x')?.signature).toBe(': int = 3'); + expect(named('y')?.signature).toBe(': int = 4'); + // A trailing `type` child is the declared TYPE, not an initializer. + expect(named('g')?.kind).toBe('variable'); + expect(named('g')?.signature).toBe(': Registry'); + }); + + it('should not mistake `Alias :: Other` for a two-name declaration', () => { + // The comma is what bounds the name run: `Other` follows a `::`. + const src = `package sample + +Alias :: Other +Handle :: SOME_CONST +`; + const result = extractFromSource('s.odin', src); + expect( + result.nodes.filter((n) => n.kind === 'constant' || n.kind === 'variable').map((n) => n.name) + ).toEqual(['Alias', 'Handle']); + }); + + it('should attribute an initializer call to the name it initializes', () => { + const src = `package sample + +Table, Index := build_table(), build_index() +`; + const result = extractFromSource('s.odin', src); + const table = result.nodes.find((n) => n.name === 'Table'); + const index = result.nodes.find((n) => n.name === 'Index'); + const callOf = (name: string) => + result.unresolvedReferences.find( + (r) => r.referenceKind === 'calls' && r.referenceName === name + ); + expect(callOf('build_table')?.fromNodeId).toBe(table?.id); + expect(callOf('build_index')?.fromNodeId).toBe(index?.id); + }); + }); + + describe('Type references', () => { + it('should not leak a nested anonymous struct or inline enum binding as a type ref', () => { + // The nested members are BINDINGS, never type names — emitted, they made + // the record depend on same-named procedures it has no relation to. + const src = `package pkg + +Config :: struct { + inner: struct { + parse: int, + render: bool, + }, + mode: enum { + Fast, + Slow, + }, + flags: bit_field u8 { + lo: bool | 1, + }, + next: ^Node, +} + +parse :: proc() -> int {return 1} +render :: proc() -> bool {return true} +`; + const result = extractFromSource('c.odin', src); + const config = result.nodes.find((n) => n.kind === 'struct' && n.name === 'Config'); + const refs = result.unresolvedReferences + .filter((r) => r.referenceKind === 'references' && r.fromNodeId === config?.id) + .map((r) => r.referenceName); + expect(refs).not.toContain('parse'); + expect(refs).not.toContain('render'); + expect(refs).not.toContain('Fast'); + expect(refs).not.toContain('Slow'); + expect(refs).not.toContain('lo'); + // …while the declared TYPES inside the same nesting still emit. + expect(refs).toContain('Node'); + // The nested members are still indexed as fields of the record. + expect(result.nodes.filter((n) => n.kind === 'field').map((n) => n.name)).toEqual( + expect.arrayContaining(['inner', 'mode', 'flags', 'next']) + ); + }); + + it('should not leak a parameter or named-return binding, including a comma run', () => { + const src = `package pkg + +Cb :: proc(p, q: int, r: Thing) -> (ok: bool, err: Fault) +`; + const result = extractFromSource('c.odin', src); + const alias = result.nodes.find((n) => n.kind === 'type_alias' && n.name === 'Cb'); + const refs = result.unresolvedReferences + .filter((r) => r.referenceKind === 'references' && r.fromNodeId === alias?.id) + .map((r) => r.referenceName); + expect(refs).toEqual(['int', 'Thing', 'bool', 'Fault']); + }); + }); + + describe('Return types', () => { + it('should read a NAMED return tuple and a QUALIFIED return type', () => { + // A named tuple holds `named_type` children rather than `type` ones, and + // a qualified type is a `field_type` — 150 of transcibr's 342 returning + // procedures are one shape or the other. + const src = `package pkg + +read_sidecar :: proc(text: string) -> (s: Sidecar, ok: bool) {return} +not_a_sidecar :: proc(s: Sidecar) -> (Sidecar, bool) {return} +note_node :: proc(x: int) -> ^ast.Visitor {return nil} +plain :: proc() -> ^Sidecar {return nil} +qual :: proc() -> transcript.Render_Context {return {}} +bare :: proc() -> bool {return true} +`; + const result = extractFromSource('r.odin', src); + const ret = (name: string) => + result.nodes.find((n) => n.kind === 'function' && n.name === name)?.returnType; + expect(ret('read_sidecar')).toBe('Sidecar'); + expect(ret('not_a_sidecar')).toBe('Sidecar'); + expect(ret('note_node')).toBe('Visitor'); + expect(ret('plain')).toBe('Sidecar'); + expect(ret('qual')).toBe('Render_Context'); + expect(ret('bare')).toBe('bool'); + }); + }); + + describe('Package scoping', () => { + it('should qualify every top-level symbol with its package', () => { + const result = extractFromSource('sidecar.odin', code); + expect(result.nodes.find((n) => n.kind === 'namespace' && n.name === 'artifact')).toBeDefined(); + const read = result.nodes.find((n) => n.kind === 'function' && n.name === 'sidecar_read'); + // Matches the `pkg::callee` shape qualified calls are emitted in, so a + // cross-package call resolves by qualified name. + expect(read?.qualifiedName).toBe('artifact::sidecar_read'); + }); + }); +}); diff --git a/__tests__/resolution.test.ts b/__tests__/resolution.test.ts index eca1778ff..686f2b35e 100644 --- a/__tests__/resolution.test.ts +++ b/__tests__/resolution.test.ts @@ -4978,4 +4978,100 @@ in expect(importedFilePaths('main.nix')).toEqual([]); }); }); + + describe('Odin package scoping', () => { + it('never links an Odin builtin or a bare cross-package call', async () => { + // `len`/`cap`/`append`/`max` are `base:builtin` — unqualified by + // language, so without the emit-time filter they name-match ANY + // same-named symbol, including a struct FIELD (`calls -> Ring::len + // [field]`) in a package `app` never imports. And a bare `helper()` + // cannot bind outside its own package, which in Odin is the DIRECTORY. + fs.mkdirSync(path.join(tempDir, 'app'), { recursive: true }); + fs.mkdirSync(path.join(tempDir, 'util'), { recursive: true }); + fs.writeFileSync( + path.join(tempDir, 'app', 'a.odin'), + `package app + +use_it :: proc(xs: []int) -> int { + ys := make([]int, 4) + append(&ys, 1) + return len(xs) + cap(ys) + max(1, 2) + helper() +} +` + ); + fs.writeFileSync( + path.join(tempDir, 'util', 'u.odin'), + `package util + +Ring :: struct { + len: int, + cap: int, +} + +max :: proc(a: int, b: int) -> int {return a} +append :: proc(r: ^Ring, v: int) {} +helper :: proc() -> int {return 0} +` + ); + + cg = await CodeGraph.init(tempDir, { index: true }); + cg.resolveReferences(); + + const caller = cg + .getNodesByKind('function') + .find((n) => n.language === 'odin' && n.name === 'use_it'); + expect(caller).toBeDefined(); + const outgoing = cg + .getOutgoingEdges(caller!.id) + .filter((e) => e.kind === 'calls') + .map((e) => cg.getNode(e.target)) + .map((n) => `${n?.filePath}:${n?.name}:${n?.kind}`); + expect(outgoing).toEqual([]); + }); + + it('still links a same-package call and a qualified cross-package call', async () => { + // The gate must not cost the two edges Odin genuinely has: a bare name + // inside one package directory, and a `pkg.fn()` call across two. + fs.mkdirSync(path.join(tempDir, 'app'), { recursive: true }); + fs.mkdirSync(path.join(tempDir, 'shared'), { recursive: true }); + fs.writeFileSync( + path.join(tempDir, 'app', 'a.odin'), + `package app + +import "../shared" + +run :: proc() -> int { + shared.record(1) + return local_helper() +} +` + ); + fs.writeFileSync( + path.join(tempDir, 'app', 'b.odin'), + `package app + +local_helper :: proc() -> int {return 7} +` + ); + fs.writeFileSync( + path.join(tempDir, 'shared', 's.odin'), + `package shared + +record :: proc(v: int) {} +` + ); + + cg = await CodeGraph.init(tempDir, { index: true }); + cg.resolveReferences(); + + const run = cg.getNodesByKind('function').find((n) => n.language === 'odin' && n.name === 'run'); + expect(run).toBeDefined(); + const callees = cg + .getOutgoingEdges(run!.id) + .filter((e) => e.kind === 'calls') + .map((e) => cg.getNode(e.target)?.name) + .sort(); + expect(callees).toEqual(['local_helper', 'record']); + }); + }); }); diff --git a/src/extraction/grammars.ts b/src/extraction/grammars.ts index d4127631d..76bc85660 100644 --- a/src/extraction/grammars.ts +++ b/src/extraction/grammars.ts @@ -50,6 +50,7 @@ const WASM_GRAMMAR_FILES: Record = { terraform: 'tree-sitter-terraform.wasm', arkts: 'tree-sitter-arkts.wasm', nix: 'tree-sitter-nix.wasm', + odin: 'tree-sitter-odin.wasm', }; /** @@ -170,6 +171,8 @@ export const EXTENSION_MAP: Record = { '.tf': 'terraform', '.tfvars': 'terraform', '.tofu': 'terraform', + // Odin: one extension, and a package is the DIRECTORY holding the files. + '.odin': 'odin', }; /** @@ -271,6 +274,16 @@ export async function initGrammars(): Promise { * nix-community/tree-sitter-nix @ 3d0173d (MIT) with tree-sitter-cli 0.25.10 * (`generate` + `build --wasm`, ABI 15 — upstream's checked-in parser.c is * still ABI 13; all 54 upstream corpus tests pass on the regenerated parser). + * Odin: tree-sitter-wasms doesn't ship it either; we vendor a wasm built from + * tree-sitter-grammars/tree-sitter-odin @ v1.3.0 (e8adc73, MIT, Copyright (c) + * 2023 Amaan Qureshi) from the tag's CHECKED-IN parser.c (no `generate`) with + * tree-sitter-cli 0.26.11 `build --wasm`, ABI 14 — the tag's parser.c predates + * the ABI-15 generator, and regenerating would diverge the tables from the tag. + * Pin the TAG, not master: master's one unreleased commit (d2ca8ef) regresses + * multi-value return types (`f :: proc() -> (string, bool)` becomes an ERROR), + * which is pervasive in real Odin. Odin is wasm-only — the native kernel has no + * Odin counterpart, so there is no crate revision to match. See + * docs/grammars/tree-sitter-odin.md for the sha256 and the measured parse health. * * TypeScript/TSX/JavaScript (+jsx, which shares the javascript grammar): the * tree-sitter-wasms builds are 2023-era (^0.20.x); we vendor wasm built from @@ -290,7 +303,7 @@ export async function initGrammars(): Promise { */ const VENDORED_WASM_LANGS: ReadonlySet = new Set([ 'pascal', 'scala', 'lua', 'luau', 'csharp', 'r', 'cfml', 'cfscript', 'cfquery', - 'cobol', 'vbnet', 'erlang', 'terraform', 'arkts', 'nix', + 'cobol', 'vbnet', 'erlang', 'terraform', 'arkts', 'nix', 'odin', 'typescript', 'tsx', 'javascript', 'jsx', 'java', 'python', 'go', // R7a (C/C++ kernel port prep): tree-sitter-c v0.24.2 (b780e47) + // tree-sitter-cpp v0.23.4 (f41e1a0), parser.c/scanner.c sha-matched against @@ -643,6 +656,7 @@ export function getLanguageDisplayName(language: Language): string { objc: 'Objective-C', solidity: 'Solidity', nix: 'Nix', + odin: 'Odin', yaml: 'YAML', twig: 'Twig', xml: 'XML', diff --git a/src/extraction/languages/index.ts b/src/extraction/languages/index.ts index 6b760b01d..0274ec4b6 100644 --- a/src/extraction/languages/index.ts +++ b/src/extraction/languages/index.ts @@ -36,6 +36,7 @@ import { solidityExtractor } from './solidity'; import { terraformExtractor } from './terraform'; import { arktsExtractor } from './arkts'; import { nixExtractor } from './nix'; +import { odinExtractor } from './odin'; export const EXTRACTORS: Partial> = { typescript: typescriptExtractor, @@ -69,4 +70,5 @@ export const EXTRACTORS: Partial> = { terraform: terraformExtractor, arkts: arktsExtractor, nix: nixExtractor, + odin: odinExtractor, }; diff --git a/src/extraction/languages/odin.ts b/src/extraction/languages/odin.ts new file mode 100644 index 000000000..8530b374b --- /dev/null +++ b/src/extraction/languages/odin.ts @@ -0,0 +1,581 @@ +import type { Node as SyntaxNode } from 'web-tree-sitter'; +import { getNodeText, getChildByField, getPrecedingDocstring } from '../tree-sitter-helpers'; +import type { ExtractorContext, LanguageExtractor } from '../tree-sitter-types'; + +/** + * Odin extractor — tree-sitter-odin v1.3.0 (ABI 14, vendored). + * + * Odin declares EVERYTHING with `Name :: `, and the grammar splits that + * one syntax into a node type per thing: + * - procedure_declaration → function (`f :: proc(...) -> T {}`) + * - overloaded_procedure_declaration → function (`f :: proc{f_a, f_b}`) + * - struct_declaration → struct + * - union_declaration → struct (no `union` NodeKind; the + * variants become `references`) + * - bit_field_declaration → struct (its members are fields) + * - enum_declaration → enum + enum_member + * - const_declaration → constant, or type_alias when the value + * is a type expression (`distinct u32`) + * - variable_declaration/var_declaration → variable + * - import_declaration → import + * - package_declaration → namespace (via packageTypes) + * + * Three grammar shapes drive the design: + * + * 1. NO `name:`/`body:`/`parameters:` FIELDS EXIST. The grammar's only fields + * are `alias`, `function`, `argument`, and expression operands — every + * declaration is positional: an optional `attributes` node, then the name + * identifier, then the thing. So `resolveName` reads the first `identifier` + * child (skipping `attributes`, which would otherwise name every decorated + * procedure "@(require_results)"), and a procedure's body is reached + * through its `procedure` child. + * + * 2. RECORD MEMBERS ARE DIRECT CHILDREN — there is no body node to hand the + * core's extractStruct/extractEnum, and the record's OWN name is one of the + * same-typed children its members are. Both are handled in `visitNode`, the + * way tree-sitter-solidity's identically-shaped declarations are. + * + * 3. A PACKAGE QUALIFIER IS A SIBLING OF THE CALL, not part of it: + * `fmt.println(x)` is member_expression(identifier, call_expression). The + * odin branch of extractCall re-attaches it — see tree-sitter.ts. + */ + +/** Node types that make a `Name :: ` declaration a TYPE alias. */ +const TYPE_EXPRESSION_NODES: ReadonlySet = new Set([ + 'distinct_type', + 'array_type', + 'pointer_type', + 'multi_pointer_type', + 'map_type', + 'bit_set_type', + 'matrix_type', + 'variadic_type', + 'tuple_type', + 'struct_type', + 'union_type', + 'enum_type', + 'bit_field_type', + 'procedure_type', + 'polymorphic_type', + 'specialized_type', + 'conditional_type', + 'constant_type', +]); + +/** + * Odin's builtin procedures — `base:builtin`, in scope in every package with no + * import and no qualifier. A call to one is spelled exactly like a call to a + * procedure of your own, so without this set `len(xs)` enters the resolver as a + * user symbol and name-matches anything called `len` anywhere in the repo, + * including a struct FIELD and a package that is never imported. Suppressed at + * emit time, the way SCALA_BUILTIN_TYPES and terraform's BUILTIN_HEADS are. + * + * The cost is a package that SHADOWS a builtin with its own procedure: its + * calls go unrecorded. That direction loses an edge; the other invents one. + */ +export const ODIN_BUILTINS: ReadonlySet = new Set([ + 'len', 'cap', 'size_of', 'align_of', 'offset_of', 'offset_of_selector', + 'offset_of_member', 'offset_of_by_string', 'type_of', 'type_info_of', 'typeid_of', + 'swizzle', 'complex', 'quaternion', 'real', 'imag', 'jmag', 'kmag', 'conj', + 'expand_values', 'min', 'max', 'abs', 'clamp', 'soa_zip', 'soa_unzip', + 'make', 'make_slice', 'make_dynamic_array', 'make_dynamic_array_len', + 'make_dynamic_array_len_cap', 'make_map', 'make_multi_pointer', + 'new', 'new_clone', 'free', 'free_all', + 'delete', 'delete_string', 'delete_map', 'delete_slice', 'delete_dynamic_array', + 'delete_key', 'delete_soa', + 'append', 'append_elem', 'append_elems', 'append_string', 'append_elem_string', + 'append_soa', 'append_nothing', 'inject_at', 'assign_at', + 'clear', 'clear_map', 'clear_dynamic_array', 'clear_soa', + 'reserve', 'reserve_soa', 'resize', 'resize_soa', 'shrink', + 'copy', 'copy_slice', 'copy_from_string', + 'pop', 'pop_safe', 'pop_front', 'pop_front_safe', + 'ordered_remove', 'unordered_remove', 'remove_range', + 'card', 'raw_data', 'container_of', + 'assert', 'assert_contextless', 'ensure', 'ensure_contextless', + 'panic', 'panic_contextless', 'unimplemented', 'unimplemented_contextless', +]); + +/** Nodes whose LEADING identifier run is binding names rather than type names. */ +const BINDING_PARENTS: ReadonlySet = new Set([ + 'parameter', + 'default_parameter', + 'named_type', + // A nested anonymous `struct { … }` in a field's type position — its members + // are `struct_member` (a `field` is the top-level form, handled by + // extractRecord, and listed here so a nested one can never leak either). + 'struct_member', + 'field', +]); + +/** + * Nodes whose DIRECT identifier children are member names, scattered rather + * than leading: an inline `enum { Fast, Slow }` and an inline + * `bit_field u8 { lo: bool | 1 }`. Each member's declared TYPE sits under a + * `type` child, so it still emits. + */ +const MEMBER_LIST_PARENTS: ReadonlySet = new Set(['enum_type', 'bit_field_type']); + +/** + * Whether an identifier is one of its parent's leading binding names — the run + * before the `:`, which Odin lets carry commas (`a, b: int`, `p, q: int`). + * Read off the anonymous siblings, because the `,` and `:` are tokens. + */ +function isLeadingBindingName(id: SyntaxNode): boolean { + if (!BINDING_PARENTS.has(id.parent?.type ?? '')) return false; + for (let prev = id.previousSibling; prev; prev = prev.previousSibling) { + if (prev.type !== 'identifier' && prev.text !== ',') return false; + } + return true; +} + +/** Named children of an Odin declaration, minus its leading `attributes`. */ +function declarationChildren(node: SyntaxNode): SyntaxNode[] { + return node.namedChildren.filter((c: SyntaxNode) => c.type !== 'attributes'); +} + +/** The declared name — the first identifier once `attributes` is skipped. */ +function declaredNameNode(node: SyntaxNode): SyntaxNode | null { + return declarationChildren(node).find((c: SyntaxNode) => c.type === 'identifier') ?? null; +} + +/** The `procedure` child holding a procedure declaration's signature + block. */ +function procedureOf(node: SyntaxNode): SyntaxNode | null { + return node.namedChildren.find((c: SyntaxNode) => c.type === 'procedure') ?? null; +} + +/** + * Names of the `@(...)` attributes on a declaration (`private`, `test`, …). + * Read off the nodes' own text rather than the file source, because + * `extractModifiers` is handed no source. + */ +function attributeNames(node: SyntaxNode): string[] { + const names: string[] = []; + for (const attrs of node.namedChildren) { + if (attrs.type !== 'attributes') continue; + for (const attr of attrs.namedChildren) { + for (const id of attr.namedChildren) { + if (id.type === 'identifier') names.push(id.text); + } + } + } + return names; +} + +/** + * A member identifier of an enum/bit_field body: everything after the declared + * name that isn't the backing type and isn't an explicit VALUE (`Low = 1`, + * `Alias = Other`). The `=` is an anonymous token, so a value identifier is + * recognised by its preceding sibling rather than by its type. + */ +function memberIdentifiers(node: SyntaxNode, nameNode: SyntaxNode): SyntaxNode[] { + const members: SyntaxNode[] = []; + for (const child of declarationChildren(node)) { + if (child.type !== 'identifier') continue; + if (child.equals(nameNode)) continue; + if (child.previousSibling?.text === '=') continue; + members.push(child); + } + return members; +} + +/** + * The names, optional type annotation and initializer values of a positional + * Odin declaration. Odin allows a COMMA-SEPARATED name list on both the `::` + * and the `:` form — `A, B :: 1, 2` and `x, y: int = 3, 4` are ONE declaration + * node each, with the names as a leading run. + * + * The comma is what bounds that run, and it has to: `Alias :: Other` has the + * same two-identifier shape, and taking both would mint a bogus symbol named + * after the right-hand side. `B` follows a `,`; `Other` follows a `::`. + */ +export function odinDeclarationParts(node: SyntaxNode): { + names: SyntaxNode[]; + typeNode: SyntaxNode | null; + values: SyntaxNode[]; +} { + const children = declarationChildren(node); + const names: SyntaxNode[] = []; + let index = 0; + for (; index < children.length; index++) { + const child = children[index]; + if (!child || child.type !== 'identifier') break; + if (names.length > 0 && child.previousSibling?.text !== ',') break; + names.push(child); + } + const annotation = children[index]; + const typeNode = annotation?.type === 'type' ? annotation : null; + if (typeNode) index++; + return { names, typeNode, values: children.slice(index) }; +} + +/** Every declared name in a struct `field` — Odin allows `a, b: int`. */ +function fieldNameNodes(field: SyntaxNode): SyntaxNode[] { + const names: SyntaxNode[] = []; + for (const child of field.namedChildren) { + if (child.type === 'type') break; // the type ends the name list + if (child.type === 'identifier') names.push(child); + } + return names; +} + +/** `Name :: struct/union/bit_field/enum { … }` — one node plus its members. */ +function extractRecord( + node: SyntaxNode, + ctx: ExtractorContext, + kind: 'struct' | 'enum', + memberKind: 'field' | 'enum_member', +): boolean { + const nameNode = declaredNameNode(node); + if (!nameNode) return true; + + const created = ctx.createNode(kind, getNodeText(nameNode, ctx.source), node, { + docstring: getPrecedingDocstring(node, ctx.source), + visibility: odinVisibility(node), + isExported: odinIsExported(node), + }); + if (!created) return true; + + ctx.pushScope(created.id); + if (node.type === 'struct_declaration') { + for (const field of declarationChildren(node)) { + if (field.type !== 'field') continue; + const typeNode = getChildByField(field, 'type') ?? field.namedChildren.find((c: SyntaxNode) => c.type === 'type'); + const typeText = typeNode ? getNodeText(typeNode, ctx.source) : undefined; + for (const name of fieldNameNodes(field)) { + const fieldName = getNodeText(name, ctx.source); + ctx.createNode('field', fieldName, name, { + signature: typeText ? `${fieldName}: ${typeText}` : fieldName, + }); + } + // The field's declared type is a dependency of the record — `next: ^Node` + // is what makes a struct graph traversable. + if (typeNode) emitTypeReferences(typeNode, created.id, ctx); + } + } else { + for (const member of memberIdentifiers(node, nameNode)) { + ctx.createNode(memberKind, getNodeText(member, ctx.source), member); + } + } + ctx.popScope(); + return true; +} + +/** + * `Name :: union { A, B }` — the variants are `type` children, not named + * members, so they become `references` from the union to each variant type. + */ +function extractUnion(node: SyntaxNode, ctx: ExtractorContext): boolean { + const nameNode = declaredNameNode(node); + if (!nameNode) return true; + + const created = ctx.createNode('struct', getNodeText(nameNode, ctx.source), node, { + docstring: getPrecedingDocstring(node, ctx.source), + visibility: odinVisibility(node), + isExported: odinIsExported(node), + }); + if (!created) return true; + + for (const variant of declarationChildren(node)) { + if (variant.type === 'type') emitTypeReferences(variant, created.id, ctx); + } + return true; +} + +/** + * `f :: proc{f_a, f_b}` — a procedure GROUP. Callers spell it `f(...)`, so it + * is a function node; the members it dispatches to become `references` so the + * group links to the overloads an agent actually has to read. + */ +function extractProcedureGroup(node: SyntaxNode, ctx: ExtractorContext): boolean { + const nameNode = declaredNameNode(node); + if (!nameNode) return true; + + const created = ctx.createNode('function', getNodeText(nameNode, ctx.source), node, { + docstring: getPrecedingDocstring(node, ctx.source), + signature: ctx.source.slice(nameNode.endIndex, node.endIndex).replace(/\s+/g, ' ').replace(/^\s*::\s*/, '').trim(), + visibility: odinVisibility(node), + isExported: odinIsExported(node), + }); + if (!created) return true; + + for (const member of memberIdentifiers(node, nameNode)) { + ctx.addUnresolvedReference({ + fromNodeId: created.id, + referenceName: getNodeText(member, ctx.source), + referenceKind: 'references', + line: member.startPosition.row + 1, + column: member.startPosition.column, + }); + } + return true; +} + +/** `Name :: distinct u32` / `Name :: ^Node` / `Name :: proc() -> bool`. */ +function extractTypeAlias(node: SyntaxNode, ctx: ExtractorContext, target: SyntaxNode): boolean { + const nameNode = declaredNameNode(node); + if (!nameNode) return false; + + const created = ctx.createNode('type_alias', getNodeText(nameNode, ctx.source), node, { + docstring: getPrecedingDocstring(node, ctx.source), + signature: getNodeText(target, ctx.source).trim().slice(0, 200), + visibility: odinVisibility(node), + isExported: odinIsExported(node), + }); + if (created) emitTypeReferences(target, created.id, ctx); + return true; +} + +/** + * The identifiers inside a type expression that NAME a type, with the two runs + * of bindings that sit in the same subtree removed: + * - a `parameter` / `named_type` / nested `struct_member` leads with its + * BINDING names, so `proc(x: int)`, `-> (ok: bool)` and + * `inner: struct { parse: int }` would otherwise reference `x`, `ok` and + * `parse` as if they were types, and name-match same-named procedures; + * - an inline `enum { Fast, Slow }` / `bit_field { lo: bool | 1 }` names its + * MEMBERS here; they are bindings too, and never leading ones. + */ +function typeIdentifiers(typeNode: SyntaxNode): SyntaxNode[] { + return typeNode + .descendantsOfType('identifier') + .filter((id: SyntaxNode) => !isLeadingBindingName(id) && !MEMBER_LIST_PARENTS.has(id.parent?.type ?? '')); +} + +/** + * Emit a `references` ref for every user-defined type name inside a type + * expression, so `^Node`, `[]Cue` and `map[string]Sidecar` all link to the + * types they name. Builtin TYPE names (`int`, `string`, `u8`) simply resolve to + * nothing, which costs a lookup and never a wrong edge — no `int` is declared + * anywhere for one to land on. That argument does NOT carry to builtin + * PROCEDURES, which share their names with ordinary declarations: see + * ODIN_BUILTINS, which the odin branch of extractCall refuses before emitting. + */ +function emitTypeReferences(typeNode: SyntaxNode, fromNodeId: string, ctx: ExtractorContext): void { + for (const id of typeIdentifiers(typeNode)) { + ctx.addUnresolvedReference({ + fromNodeId, + referenceName: getNodeText(id, ctx.source), + referenceKind: 'references', + line: id.startPosition.row + 1, + column: id.startPosition.column, + }); + } +} + +/** + * The type names a composite literal spells in its own HEAD, in source order: + * `[Fault]string{…}` names the KEY enum and the value type, `[dynamic]Sidecar{}` + * and `[4]Sidecar{}` name the element, `map[string]Sidecar{}` names both sides, + * and `Sidecar{…}` names the record itself. + * + * Everything from the first `struct_field` on is member DATA and is excluded by + * construction: `.None = ""` holds a `member_expression` whose identifier is an + * enum MEMBER, and referencing that would link the literal to whatever `None` + * happens to name in the package. + * + * The enumerated-array TABLE is why this exists. `FAULT := [Fault]string{…}` is + * a compiler-checked companion to its key enum — add a member and the build + * fails until the table grows a row — so it is precisely the declaration that + * must change when the enum does, and without the head it was the one that did + * not name it. The core walks the literal for CALLS already; the types in front + * of it are what nothing was reading. + */ +export function odinLiteralTypeNames(value: SyntaxNode): SyntaxNode[] { + if (value.type !== 'struct' && value.type !== 'map') return []; + const names: SyntaxNode[] = []; + for (const child of value.namedChildren) { + if (child.type === 'struct_field') break; + if (child.type === 'identifier') names.push(child); + if (child.type === 'type') names.push(...typeIdentifiers(child)); + } + return names; +} + +/** `@(private)` is Odin's only visibility marker; everything else is package-public. */ +function odinVisibility(node: SyntaxNode): 'public' | 'private' { + return attributeNames(node).some((a) => a === 'private') ? 'private' : 'public'; +} + +function odinIsExported(node: SyntaxNode): boolean { + return odinVisibility(node) === 'public'; +} + +/** + * Type nodes a return type is reached THROUGH: `-> (s: Sidecar, ok: bool)` is + * type > tuple_type > named_type > type > identifier, and `-> ^ast.Visitor` is + * type > pointer_type > type > field_type. Descending picks the FIRST `type` + * child at each level, which is also what skips a `named_type`'s binding name. + */ +const RETURN_TYPE_WRAPPERS: ReadonlySet = new Set([ + 'type', + 'tuple_type', + 'pointer_type', + 'multi_pointer_type', + 'named_type', +]); + +/** The bare name of the first type in a return clause, or undefined. */ +function returnTypeName(node: SyntaxNode, source: string): string | undefined { + let cursor: SyntaxNode | null = node; + for (let depth = 0; cursor && depth < RETURN_TYPE_MAX_DEPTH; depth++) { + if (cursor.type === 'identifier') return getNodeText(cursor, source).trim(); + // `ast.Visitor` / `transcript.Render_Context` — the last segment is the + // type; the ones before it are the package. + if (cursor.type === 'field_type') { + const last = cursor.namedChildren.filter((c: SyntaxNode) => c.type === 'identifier').at(-1); + return last ? getNodeText(last, source).trim() : undefined; + } + if (!RETURN_TYPE_WRAPPERS.has(cursor.type)) return undefined; + cursor = + cursor.namedChildren.find((c: SyntaxNode) => c.type === 'type') ?? + cursor.namedChildren.find( + (c: SyntaxNode) => + RETURN_TYPE_WRAPPERS.has(c.type) || c.type === 'field_type' || c.type === 'identifier' + ) ?? + null; + } + return undefined; +} + +/** Deeper than any return clause nests; a guard against a cyclic walk, not a limit. */ +const RETURN_TYPE_MAX_DEPTH = 8; + +/** Whether a bodiless `procedure_declaration` is an FFI declaration. */ +function isForeignProcedure(node: SyntaxNode): boolean { + return node.parent?.parent?.type === 'foreign_block'; +} + +export const odinExtractor: LanguageExtractor = { + functionTypes: ['procedure_declaration'], + classTypes: [], // Odin has no classes — procedures are all top-level + methodTypes: [], + interfaceTypes: [], + // struct / union / bit_field / enum members are DIRECT children of the + // declaration (no body node) and the declaration's own name is one of them, + // so all four are built in visitNode instead of by the core walkers. + structTypes: [], + enumTypes: [], + enumMemberTypes: [], + // `Name :: distinct u32` is a const_declaration whose VALUE is a type — the + // split happens in visitNode, so no node type is a type alias on its own. + typeAliasTypes: [], + importTypes: ['import_declaration'], + // `selector_call_expression` (`s->m(3)`) WRAPS a call_expression, so listing + // it here would emit the same call twice; the odin branch of extractCall + // reads the wrapper from the inner call instead. + callTypes: ['call_expression'], + variableTypes: ['const_declaration', 'const_type_declaration', 'variable_declaration', 'var_declaration'], + packageTypes: ['package_declaration'], + + // The grammar declares none of these fields (see the header note); they are + // the interface's required shape, and resolveName/resolveBody do the work. + nameField: 'name', + bodyField: 'body', + paramsField: 'parameters', + + extractPackage: (node, source) => { + const name = declaredNameNode(node); + return name ? getNodeText(name, source) : null; + }, + + // Skip the leading `attributes` node: `@(require_results)` sits where a + // name-field grammar would put the name, and taking firstNamedChild names + // three quarters of an idiomatic Odin file "@(require_results)". + resolveName: (node, source) => { + const name = declaredNameNode(node); + return name ? getNodeText(name, source) : undefined; + }, + + // A procedure's block hangs off its `procedure` child, not off the declaration. + resolveBody: (node) => { + const proc = procedureOf(node); + return proc?.namedChildren.find((c: SyntaxNode) => c.type === 'block') ?? null; + }, + + getSignature: (node, source) => { + const proc = procedureOf(node); + if (!proc) return undefined; + const block = proc.namedChildren.find((c: SyntaxNode) => c.type === 'block'); + const end = block ? block.startIndex : proc.endIndex; + return source.slice(proc.startIndex, end).trim(); + }, + + // The declared return type, reduced to the bare name a `type_of` edge can + // land on: `-> ^Sidecar`, `-> (Sidecar, bool)`, `-> (s: Sidecar, ok: bool)` + // and `-> ^ast.Visitor` give `Sidecar`, `Sidecar`, `Sidecar` and `Visitor`. + // A NAMED return tuple holds `named_type` children rather than `type` ones, + // and a QUALIFIED type is a `field_type` — the two shapes that account for + // 150 of transcibr's 342 returning procedures. + getReturnType: (node, source) => { + const proc = procedureOf(node); + const declared = proc?.namedChildren.find((c: SyntaxNode) => c.type === 'type'); + if (!declared) return undefined; + const text = returnTypeName(declared, source); + return text && /^[A-Za-z_]\w*$/.test(text) ? text : undefined; + }, + + getVisibility: odinVisibility, + isExported: odinIsExported, + isConst: (node) => node.type === 'const_declaration' || node.type === 'const_type_declaration', + + // `@(test)` / `@(init)` / `@(deferred_out)` are the closest thing Odin has to + // decorators, and `@(test)` in particular is what marks a test procedure. + extractModifiers: (node) => { + const names = attributeNames(node); + return names.length > 0 ? names : undefined; + }, + + // `import "core:fmt"` / `import st "core:strings"` / `foreign import k "…"`. + // The path lives in a `string` child's `string_content`; the optional local + // binding is the only field this node has. + extractImport: (node, source) => { + const stringNode = node.namedChildren.find((c: SyntaxNode) => c.type === 'string'); + if (!stringNode) return null; + const content = stringNode.namedChildren.find((c: SyntaxNode) => c.type === 'string_content'); + const moduleName = getNodeText(content ?? stringNode, source).replace(/^["'`]|["'`]$/g, '').trim(); + if (!moduleName) return null; + return { moduleName, signature: source.slice(node.startIndex, node.endIndex).trim() }; + }, + + visitNode: (node, ctx) => { + switch (node.type) { + case 'struct_declaration': + return extractRecord(node, ctx, 'struct', 'field'); + case 'bit_field_declaration': + return extractRecord(node, ctx, 'struct', 'field'); + case 'enum_declaration': + return extractRecord(node, ctx, 'enum', 'enum_member'); + case 'union_declaration': + return extractUnion(node, ctx); + case 'overloaded_procedure_declaration': + return extractProcedureGroup(node, ctx); + case 'const_declaration': + case 'const_type_declaration': { + // `Digest :: distinct string` is a type, `MAX :: 12` is a constant, and + // `Alias :: Other` is indistinguishable from `Alias :: SOME_CONST` at + // parse time — so only an explicit type EXPRESSION reclassifies, and + // the bare-identifier form stays a constant (a silent miss, never a + // wrong kind). + const value = declarationChildren(node).at(-1); + if (value && TYPE_EXPRESSION_NODES.has(value.type)) { + return extractTypeAlias(node, ctx, value); + } + return false; + } + case 'procedure_declaration': { + // A procedure with no block is either a proc TYPE (`Cb :: proc(x: int) + // -> bool`) or an FFI declaration inside a `foreign` block + // (`GetLastError :: proc() -> u32 ---`). The FFI one is a real callable + // and falls through to the function path; the type is an alias. + const proc = procedureOf(node); + const block = proc?.namedChildren.find((c: SyntaxNode) => c.type === 'block'); + if (proc && !block && !isForeignProcedure(node)) { + return extractTypeAlias(node, ctx, proc); + } + return false; + } + default: + return false; + } + }, +}; diff --git a/src/extraction/tree-sitter.ts b/src/extraction/tree-sitter.ts index 9e53e62da..6a394f814 100644 --- a/src/extraction/tree-sitter.ts +++ b/src/extraction/tree-sitter.ts @@ -22,6 +22,7 @@ import { isGeneratedFile } from './generated-detection'; import type { LanguageExtractor, ExtractorContext } from './tree-sitter-types'; import { EXTRACTORS } from './languages'; import { stripCppTemplateArgs } from './languages/c-cpp'; +import { ODIN_BUILTINS, odinDeclarationParts, odinLiteralTypeNames } from './languages/odin'; import { LiquidExtractor } from './liquid-extractor'; import { RazorExtractor } from './razor-extractor'; import { SvelteExtractor } from './svelte-extractor'; @@ -2866,6 +2867,59 @@ export class TreeSitterExtractor { isExported, }); } + } else if (this.language === 'odin') { + // Odin declares everything positionally — `[attributes] NAME :: value`, + // `NAME := value`, `NAME: T = value` — with no `name:` field anywhere in + // the grammar, and it allows a COMMA-SEPARATED name list on both the `::` + // and the `:` form (`A, B :: 1, 2`, `x, y: int = 3, 4`). The generic + // fallback below takes EVERY identifier child, so `Alias :: Other` and + // `Handle :: SomeConst` minted a second, bogus symbol named after the + // right-hand side; odinDeclarationParts bounds the name run on the commas + // that separate it, so every declared name is indexed and no value is. + const { names, typeNode, values } = odinDeclarationParts(node); + const typeText = typeNode ? getNodeText(typeNode, this.source).trim() : ''; + // Positional pairing: `x, y: int = 3, 4` gives each name its own value, + // while `a, b := f()` gives them one call to share. + const valueFor = (i: number): SyntaxNode | null => + (values.length === names.length ? values[i] : values.length === 1 ? values[0] : null) ?? null; + const createdIds: (string | null)[] = names.map((nameNode, i) => { + const value = valueFor(i); + const initValue = value ? getNodeText(value, this.source).slice(0, 100) : ''; + // A trailing `type` child is the declared TYPE, not an initializer — + // `g: Registry` has no value at all. + const signature = [ + typeText ? `: ${typeText}` : '', + initValue ? ` = ${initValue}${initValue.length >= 100 ? '...' : ''}` : '', + ].join('').trim(); + const varNode = this.createNode(kind, getNodeText(nameNode, this.source), node, { + docstring, + signature: signature || undefined, + isExported, + }); + return varNode?.id ?? null; + }); + // The dispatcher sets skipChildren for variableTypes, so a call in a + // top-level initializer (`Table := build_table()`) is only seen here. + values.forEach((value, i) => { + const ownerId = (values.length === names.length ? createdIds[i] : createdIds[0]) ?? ''; + // A composite literal's HEAD is the declaration's dependency on the + // types it is built out of — `FAULT := [Fault]string{…}` on the enum it + // keys on, which the compiler makes it change with. visitFunctionBody + // walks the literal for calls and reads no types at all. + for (const typeName of odinLiteralTypeNames(value)) { + if (!ownerId) break; + this.unresolvedReferences.push({ + fromNodeId: ownerId, + referenceName: getNodeText(typeName, this.source), + referenceKind: 'references', + line: typeName.startPosition.row + 1, + column: typeName.startPosition.column, + }); + } + if (ownerId) this.nodeStack.push(ownerId); + this.visitFunctionBody(value, ownerId); + if (ownerId) this.nodeStack.pop(); + }); } else { // Generic fallback for other languages // Try to find identifier children @@ -3965,6 +4019,69 @@ export class TreeSitterExtractor { return; } + // Odin puts a call's package qualifier OUTSIDE the call: `fmt.println(x)` + // is member_expression(identifier `fmt`, call_expression(function: + // `println`)). The generic path below reads only the `function` field, so + // every qualified call collapsed to its bare member name — `fmt.println` + // became a `calls` ref to `println`, which then linked to whatever + // same-named procedure the repo happened to define — the same wrong-edge + // class #1079/#1107 fixed for same-named methods, one step earlier. (Ruby's + // `call` branch above is the structural sibling: a grammar whose call node + // hides part of the callee name from the generic path.) + // Re-attach the qualifier as `pkg::callee`, which is + // byte-identical to the qualifiedName the package namespace gives every + // top-level symbol (see packageTypes in languages/odin.ts), so a repo-local + // cross-package call resolves via matchByQualifiedName while a `core:` / + // `vendor:` call resolves to nothing rather than to a wrong local. + // + // A `->` call is the one shape that must NOT be qualified: `h->run()` is + // selector_call_expression(function: `h`, call_expression), where `h` is a + // RECEIVER VARIABLE and not a package. Qualifying it emits `h::run`, which + // is byte-identical in shape to a genuine cross-package call, so a receiver + // sharing a name with a repo package mints exactly the wrong edge this + // branch exists to prevent. It gets the bare member name instead, scoped to + // its own directory by the resolver like any other same-package call. + if (this.language === 'odin' && node.type === 'call_expression') { + // A compiler directive occupies a `function` field too, and it comes + // FIRST: `#force_inline f()` gives the call TWO of them (the `tag`, then + // the identifier) and `#assert(x < y)` gives it only the tag. Read the + // LAST one — `childForFieldName` returns the first, which emitted + // `#force_inline` as the callee and lost the real one. + const fnChildren = node.childrenForFieldName('function'); + const fn = fnChildren.length > 0 ? fnChildren[fnChildren.length - 1] : null; + // Nothing but the directive: `#assert(MAX < 19)`, `#load("x.bin")`. The + // callee is the compiler's, not the repo's — no symbol can carry the name, + // so emitting one is a dead reference on every file that asserts. + if (!fn || fn.type === 'tag') return; + const calleeName = getNodeText(fn, this.source).trim(); + if (!calleeName) return; + const parent = node.parent; + let qualifier = ''; + if (parent?.type === 'member_expression') { + const receiver = parent.namedChild(0); + // `deep.pkg.fn()` nests member_expressions — the LAST segment is the + // package that owns the callee. + if (receiver && !receiver.equals(node)) { + qualifier = getNodeText(receiver, this.source).split('.').pop()?.trim() ?? ''; + } + } + // An UNQUALIFIED call can be a builtin — `len(xs)`, `append(&ys, 1)`, + // `max(1, 2)` are spelled exactly like a call to a procedure of your own. + // Emitting them would name-match any same-named symbol in the repo, + // including a struct FIELD (`calls … -> Ring::len [field]`) and a package + // that is never imported. Suppress at emit, as terraform's BUILTIN_HEADS + // and SCALA_BUILTIN_TYPES do. + if (!qualifier && ODIN_BUILTINS.has(calleeName)) return; + this.unresolvedReferences.push({ + fromNodeId: callerId, + referenceName: qualifier ? `${qualifier}::${calleeName}` : calleeName, + referenceKind: 'calls', + line: node.startPosition.row + 1, + column: node.startPosition.column, + }); + return; + } + // ArkTS build()-DSL handling. Three shapes carry UI-attribute chains, and // all of their attribute names are emitted with a LEADING DOT // (`.titleStyle`, `.width`) — an impossible identifier that routes them to diff --git a/src/resolution/index.ts b/src/resolution/index.ts index ef3a5fc23..710c7cf04 100644 --- a/src/resolution/index.ts +++ b/src/resolution/index.ts @@ -1019,6 +1019,21 @@ export class ReferenceResolver { // linkable symbol) — without this, a Python script's `split()` lands // on some module's `split = ...` binding as a low-confidence match. nameResult = null; + } else if ( + ref.language === 'odin' && + ref.referenceKind === 'calls' && + !ref.referenceName.includes('::') + ) { + // An Odin package IS a directory, and an unqualified callee can only + // bind inside its own package — a cross-package call carries its + // qualifier (`fmt::println`, `shared::record`) and resolves by + // qualified name above. So a bare name matching a symbol in another + // directory is wrong by construction, the same way a cross-file nix + // match is. Odin's builtins are already suppressed at emit; this is + // what stops a plain `helper()` linking to an unimported package's. + if (!target || path.dirname(target.filePath) !== path.dirname(ref.filePath)) { + nameResult = null; + } } } if (nameResult) { diff --git a/src/types.ts b/src/types.ts index a1861bba4..e9325a8c6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -105,6 +105,7 @@ export const LANGUAGES = [ 'r', 'solidity', 'nix', + 'odin', 'yaml', 'twig', 'xml',