Skip to content

Java recovery guards, JSX-aware textmask, Rust receiver markers - #8

Merged
tabladrum merged 3 commits into
mainfrom
release/v0.16.4
Oct 15, 2026
Merged

tabladrum merged 3 commits into
mainfrom
release/v0.16.4

Conversation

@tabladrum

Copy link
Copy Markdown
Contributor

Three extraction fixes from the 2026-10-14 bug list:

  • java: error recovery never yields keyword-named members (a constructor named if, a field typed return); orphaned members rejoin the innermost enclosing type.
  • textmask: JSX elements are lexed in TSX/JavaScript (text children are literal text, {...} children code); a ) closing an if/while/for/with condition admits a regex.
  • rust: string-literal and range-index receivers of method calls are kept as <str> / <slice> instead of arriving as bare calls.

Each has a test that fails on the old code. Full suite green; grove's 20 accuracy oracles within baseline against this code.

🤖 Generated with Claude Code

https://claude.ai/code/session_01KXa6Cv1ZUXcdMqXcJfQFhX

tabladrum and others added 3 commits October 14, 2026 22:38
…bers rejoin their class

An unterminated char literal mid-edit made tree-sitter recover `if (x) {`
as a constructor named "if" and `return bean;` as a field of type
"return". A constructor must be named after its class, a method not after
a keyword, and a field's type is never a keyword. Members recovered
without an enclosing type are attached to the innermost type whose span
contains them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXa6Cv1ZUXcdMqXcJfQFhX
JSX text children were lexed as code: `<code>src/*.ts</code>` opened a
block comment to the end of the file, a backtick a template literal. grove
masks callers' bodies to find local declarations and default exports, so
TSX files got phantom callers (a locally shadowed helper bound to the
imported one) and lost a default-export caller. Where an expression starts
in TSX/JavaScript, `<Name` now opens an element whose text children are
literal text and whose `{...}` children are code. And `if (x) /re/.test(s)`
read the regex as division: a `)` closing an if/while/for/with condition
now admits a regex.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXa6Cv1ZUXcdMqXcJfQFhX
`"test".as_bytes()` and `doc[start..].find('}')` arrived as bare calls
("as_bytes", "find"), which the graph resolved like free functions to
every same-named function and method. The receiver is now kept as a
marker, <str> or <slice>, also for `"x".parse()` inside macros.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KXa6Cv1ZUXcdMqXcJfQFhX
@tabladrum
tabladrum merged commit 601af9c into main Oct 15, 2026
3 checks passed
@tabladrum
tabladrum deleted the release/v0.16.4 branch October 15, 2026 02:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant