Skip to content

v0.1.9

Choose a tag to compare

@github-actions github-actions released this 27 Jun 09:57
0766814

[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.barfoo/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.