You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
[0.1.9] - 2026-06-27
Added
Scope-aware definition --at (ADR 0001, Step 1) — go-to-def from a usage
position now resolves a name to its nearest enclosing local binding
(parameter or let/assignment) before falling back to the directory-wide name
lookup. A shadowing local correctly wins over a same-named global, so the
result is the one binding the cursor refers to instead of a candidate list of
every same-named symbol. Driven by an optional locals.scm (tree-sitter's
standard @local.scope / @local.definition / @local.reference query) added
per registry dir; grammars without one keep the previous behavior. Shipped for
the rust/python/javascript dev stub; ingest/index/fetch now carry locals.scm through to the hosted registry.
Import-edge cross-file definition --at (ADR 0001, Step 2) — when a name
has no local binding, grove now follows an import statement to the target
file and returns the definition there, instead of a directory-wide list of
every same-named symbol. Aliases resolve to the original symbol
(from m import x as y / import { x as y } from …). No index: at most one
extra file is parsed, bounded by import depth, not repo size. Driven by an
optional imports.scm query plus an import_resolution strategy in the
manifest profile — dotted_package (Python foo.bar → foo/bar.py, __init__.py, and relative ./.. imports) and relative_path (JS/TS ./util → ./util.js, .jsx, /index.js; bare specifiers are left to the
directory-wide fallback). Shipped for python/javascript; carried through ingest/index/fetch. Out of scope (degrades to the candidate list):
method/receiver typing, multi-hop re-exports, wildcard/dynamic imports.
Changed
MCP/CLI/steering descriptions now advertise definition --at as the
precise, scope-aware, cross-file mode (no tool signatures changed) so agents
reach for it from a usage position instead of a name lookup.
Robustness
Optional registry queries (locals.scm/imports.scm) compile non-fatally
and their captures are prefix-matched, so a query authored against a
different grammar version (or using subtyped captures like @local.definition.function) degrades gracefully instead of breaking the
grammar's core tools.
grove now refuses tree-sitter supertype query syntax ((a/b)) in optional
queries, which can otherwise hard-crash the wasm query engine at match time —
so a hosted registry file can no longer segfault grove.