fix(deps): update module github.com/odvcencio/gotreesitter to v0.53.0 - #363
renovate[bot] wants to merge 1 commit into
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #363 +/- ##
==========================================
- Coverage 88.17% 88.15% -0.02%
==========================================
Files 362 362
Lines 34743 34743
==========================================
- Hits 30634 30629 -5
- Misses 4104 4109 +5
Partials 5 5
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|



This PR contains the following updates:
v0.52.0→v0.53.0Release Notes
odvcencio/gotreesitter (github.com/odvcencio/gotreesitter)
v0.53.0: gotreesitter v0.53.0Compare Source
Release overview
repository audit found. It also includes the maintenance work merged after
v0.52.0.
the C order. Incremental reuse is correct for edit sequences and changed
included ranges.
no longer stop early.
more cases.
retain the legacy fallback. This release does not complete compact parser
graduation.
Performance evidence
Paired randomized benchmarks compare v0.52.0 with the v0.53.0 candidate code at
48503fef. The run used 20 shuffle seeds, alternating order,-benchtime=750ms,GOMAXPROCS=1, and thegts_parsercorephase0tag. It ran in the harnesscontainer with 4 GiB of memory and one pinned CPU (Intel Core Ultra 9 285).
BenchmarkGoParseFullDFABenchmarkGoParseIncrementalSingleByteEditDFABenchmarkGoParseIncrementalNoEditDFAAll three time changes have p=0.000 with n=20.
reuse that v0.52.0 disabled and that returned after it.
tree handle and compares included ranges. It stays in single-digit
nanoseconds with no allocations. Recover it in a later release.
Treevalue, because releasedtrees no longer return to a pool.
A one-shot large-file run parses the canonical
grammargen/lr.gofixture withBenchmarkParityGoCanonicalFullunder/usr/bin/time -vin the same container.The run used
GOMAXPROCS=1and-benchtime=1x. The raw outputs stay outside the repository.Parse timeout
SetTimeoutMicrosonce for each parse. The compact route and the production fallback now share one deadline.Tree handles
Releaseon a released tree do nothing. A stale call no longer frees the tree of a later parse.Treevalues. Each returned tree now costs one new 3,296-byte value.ParseIncrementalupdates parent links in the old tree, and thatNode.EditafterTree.Editmoves spans twice.Incremental edit sequences
Memory budget
ParseStopMemoryBudget.Parser.SetMemoryBudgetBytes,Parser.MemoryBudgetBytes, andWithParserPoolMemoryBudgetBytesfor a fixed budget.Reserved words
ts_parser__lexdoes. JavaScriptvar if = 1;now reports an error.ts2go -reservedwords-onlysidecar mode.Query predicates
any-predicates need one matching node.DisableCapture. The returned match only omits the disabled capture.Generated grammar tables
Continuous integration gates
-runpattern names a test that does not exist. Correct seven stale names.buildcheck for merges tomain. Administrators can still bypass it.Stack hashing
Generated CSS token precedence
Generated HCL splat expressions
Generated supertype aliases
_simple_type.Test package execution coverage
Compact parser maintenance
Recovery symbol allocation
Recovery memo pressure
Compact incremental allocation
Incremental profile accounting
Standalone grammar packages
grammars/runtime.Generated source ownership
owner. Continuous integration now rejects unknown owners, malformed markers,
and generated file names without markers.
identify emitted grammar source as generated code.
C parity program, round one: query semantics
only a visible or supertype named symbol is a node type. A hidden rule
name or an anonymous token in a node pattern is now a compile error, as in
C. The inferred tags queries use the same lookup, so a grammar whose
callis a keyword no longer receives a call pattern.(expression)into a wildcardstep that requires the supertype among the node's hidden ancestors, and
support the
super/subform with the C subtype check. Nodes record thehidden supertype wrappers that reduction elided in a parallel arena table
(
Nodestays 104 bytes); the record survives final tree compaction andincremental clones.
supertype counts) and whose first child is a concrete node type never
tests the root.
(expression (identifier) @i)matches every identifierwhose parent is not an ERROR node, as it does in C.
_patterncompiles.
The outline comparison now evaluates
#lua-match?predicates instead of rejecting them.TestParityQuerySemanticsruns 103 query cases on both engines: 101agree, 2 carry a named divergence (an aliased subtype in the grammargen
supertype map, and a hidden wrapper lost inside a compact error region).
Highlight parity holds on 204 of 206 languages with no tolerance entry;
hare and luau, the last two tolerated languages, now match C.
TestParitySupertypeMapcompares every grammar's ABI 15 supertype mapwith the C runtime: 40 languages agree, 29 diverge. The board is
informational until the grammargen map is rebuilt.
C parity program, round two: recovery
TestParityRecoveryBoard: 78 malformed sources in eight languagesparsed on the C oracle and on every Go route, compared node by node. The
default route agrees on 36 (29 before this round); with the C recovery
port forced on for JavaScript, 46.
where only a missing leaf has an error cost. The region proof that used
to decide when a leaf could stay clean is gone.
witness digests, now pin the trees without leaf error bits. The cobol
MBANK30.cpyfixture matches the C oracle exactly.ts_parser__lex: a keyword stays a keyword whenthe parse state has an action for it or reserves it; otherwise the lexer
returns the word token. The reserved-word rule was inverted before.
measured witnesses recorded in
docs/c-parity-boards.md.from the version pool, so a recovery fork created at end of input still
competes as its own tree. An ERROR node keeps the fields a hidden child
gave its spliced children. The recovery board moves to 36 of 78.
setup.pybyte 1241 (delete and replace) parses without an error bit onboth routes while C reports an ERROR, and the fresh and incremental
parses keep a different number of GLR stacks after the site. The C
keyword rule exposed the site; the divergence itself is older.
election reaches parity with the pinned C parser.
derivation selection is certified. Python f-string splats now match locked C
on the forest route.
Compact core cost, round two (issue #454)
visit. The visit computes each subtree's pre-goto and parse state at push
time with the same transition rules, so the tree needs no second
full-derivation pass and no arena-length replay tables.
TestCompactFusedReplayMatchesTopDownReplayproves the states equal theseparate replay on every subtree.
tokenCellelection record and its five save-and-restoresites, read the reuse-dependency subtree count and head path count through
narrow accessors instead of
Core.Stats, and build the election record inplace.
pop paths, boundary outputs, and canonical groups are read through
pointers; the
direct-append condense reads the predecessor it already resolved instead of
validating a synthetic link and resolving it again; a zero stored cost no
longer republishes a fresh node's lineage.
Single-link pop enumeration can trust immutable published records.
The relex payload scratch no longer clears its whole buffer on
every election, the head owner record runs without a closure per dispatch,
and a single fresh reduction output updates its header in place.
benchmark lifetime fixes. They do not establish current performance gains.
The route decision record retains them as historical measurements.
compactMaterializer, a struct thescheduler can drive as well as the postorder pass. The postorder pass
now fills one scratch view in place and visits it through a pointer, and
it can skip subtrees that already own a public node
(
VisitMaterializationPostorderPrebuilt). The extraction changes notree and no work count.
GTS_COMPACT_EAGER=1). After eachsingle-header shift and each in-place reduction the scheduler builds the
new subtree's public node at once, and it builds the subtrees a
multi-header phase left pending as soon as a single header consumes them.
On every Go witness the lane builds the whole tree before acceptance and
publishes the same tree, the same replay stamps, and the same work as the
postorder pass (
TestCompactEagerMaterializationMatchesPostorder). Thelane stays off by default: on the Go 137 KiB witness it costs about ten
percent more wall time, because construction interleaved with dispatch
loses the locality of the batch pass while the compact core still writes
every record. The lane is the construction half of the single-head kernel,
which will stop writing compact records for subtrees that already own a
public node.
dispatch just published: a fresh node is the latest node of its phase
identity, so the probe would return the head the header already holds.
The generic shift, the in-place reduction, and the corridor direct shift
all take the skip when the header sits outside recovery isolation with no
pending freshness; the skip records the barrier, the header peak, and the
verifier binding, so every work vector and receipt stays identical. Parents take their span
from the point index only when their visible children do not tile the
record, and a reduction sums its pop payload work once.
spec.c4-bytecode-isa.v1). The 137 KiB full-parse comparison is faster on
14 of 15 grammars. A JavaScript recovery mutation once changed the C tree
with the lane on; the lane now stays off while a version-owned lexer
request is live, and the evidence for the default is: the runtime
equivalence test keeps every work count and digest equal; the exhaustive
curated structural parity suite (fresh, incremental, no-error) passes on
every grammar with the lane on; the pinned-oracle T3 recovery adjudication
in the harness container matches C on every html and JavaScript witness
with the lane on; and the JavaScript recovery mutation differentials pass
in both modes.
GTS_C4_CORRIDOR=0turns the lane off.corridor reads a shared token and cannot publish an owned request.
Reusing the input slice changed earlier snapshots and broke rollback isolation.
line before the hashed cache and the binary search: materialization asks
for points in source order. Skip the scanner-provenance search for a
terminal that cannot carry an entry, and the skipped-prefix search when
no prefix was recorded. Together about 3 percent on the Go 137 KiB
witness.
Production engine fixes kept until retirement (issue #454)
The compact route stays the default fresh full-parse route. The owner's
direction is to retire the production engine once the compact core
outperforms it; until then production still serves incremental, injection,
included-range, and fallback parses, so these fixes stay.
transient parent and child slabs of the largest earlier parse, up to 512K
elements, and billed them to every later parse in the process: a 4 KiB
parse after a 315 KiB parse reported 35 MB of inherited scratch. Each parse
now drops inherited transient slabs above four times its own initial arena
estimate before it starts. A new small-large-small test guards the bound
through the new
ParseRuntime.TransientScratchBytesAllocatedcounter.Tokenfrom 80 to 64 bytes. The five unexported provenance bitspack into one flag byte, and the stack position behind a synthetic missing
token moves to a parser-owned anchor table that the token indexes. Tokens
are copied by value on every election and dispatch, so the size shows up
directly as copy cost on both routes. The public fields are unchanged.
built four times the larger of the old tree's nodes and the fresh-parse
arena estimate while reusing under one eighth of the source now stops with
ParseStopReuseBudget, and the parser runs one plain full parse, the samefail-closed retry the memory budget uses. The issue #454 C single-byte
delete built 3.2 million nodes before the memory budget stopped it; it now
stops near 370 thousand and returns the fresh-parse tree. The profile names
the retry
incremental_parse_reuse_budget_full_retry.Compact route repair (issue #454)
#454 measured on
137 KiB editor fixtures.
exact size on every store and was reallocated on every call, so a fresh
parse of a 16 KiB Go file with one syntax error took 4.9 seconds. The memo
now grows geometrically and lives for the whole parse. The same parse takes
49 milliseconds, and the 137 KiB single-byte delete completes in 178
milliseconds instead of never.
compatible-goto contract as production trees. TOML insert reuse returns
from 62 percent to 100 percent, and TypeScript from 54 percent to 98 percent.
that end in a blank line return from 0 percent to 97 percent reuse. The
unsupported-reuse reason now names the clause that failed.
in-scope candidates or 32 KiB past the edit with zero reuse, so INI and
JSON no longer pay a discarded whole-file compact parse per keystroke.
poll. A cached small footprint did not detect subsequent storage growth.
Regression tests cover both the memory budget and the hard ceiling.
interner compares against the last interned
record before hashing, the relex probe authenticates its payload by byte
comparison instead of SHA-256, and the materialization walk passes records
by pointer. Earlier performance measurements predate the review fixes.
Run randomized comparisons before reporting gains for the corrected code.
accepts the lookahead, before the previous-shift recovery runs. Pull
request #709 added a
per-stack re-lex that kept the constructor-specifier fork of
static inline void f(int *v) {}alive, and the recovered fork wonselection with an ERROR node. Five C++ witnesses now match the compact route.
cmd/issue454bench, which reproduces the downstream measurements onsynthetic fixtures with an optional CPU profile.
production incremental reuse, the v0.48.1 mechanism, when the compact
borrow attempt declines at recovery. The fresh compact recovery route never
produced those trees; it declined after a whole-file pass. Edits within 256
bytes of end of file keep the compact recovery route. Go single-byte deletes
drop from 178 to 15 milliseconds at 137 KiB, and every measured tree equals
the fresh default-route parse except two pre-existing divergences that the
new parity gate documents.
errors sit inside top-level items covering at most a quarter of the source.
Pull request #613's wide-stack condition fired on TypeScript's ordinary GLR
ambiguity, so a single-byte delete at 137 KiB cost 296 milliseconds against
78 at v0.48.1; it now costs 75. Degenerate results still retry.
of after a whole-file pass. A fresh compact parse of a 137 KiB Go file with
a mid-file error drops from about 424 to 275 milliseconds; the production
parse alone costs 240.
Tokenfrom 88 to 80 bytes, memoize the scanner identityfingerprint per parse, and compute per-election checkpoint receipt digests
only under full receipts. Scala and CMake compact full parses gain about
another 12 percent.
inherit. The token source passes tokens by pointer through its per-token
helper chain instead of copying 80 bytes about ten times per token, both
lexers decode the frontier rune only for non-ASCII bytes, the contextual
close-angle probe checks the token bytes before symbol names, and the
external scanner failure-mode probes are answered once per language.
Production full parses of 137 KiB fixtures move from 1.1 to 1.4 times
v0.48.1 to 1.06 to 1.19 times, with Rust at 1.33. The report attributes
the remaining gap and records the compact route's graduation status.
cap-pressure poll reads the node count without validating the head, the
per-state relex probe caches the scanner contract and identity and uses
scheduler-owned snapshot scratch, the election reads the cached checkpoint
identity instead of asking the order adapter, and the reuse-proof
invalidation takes the lineage record by pointer. Go compact full parses
gain 7 percent; the other grammars are within 2 percent.
Compact parser correctness
foo<A00>(2);through compact without fallback, with exact locked-C tree parity.Malformed TypeScript recovery remains unfinished.
Incremental correctness
dependencies and the edited token. Unknown coverage requires reparsing.
tree ownership. Include UTF-8 continuation bytes beyond token boundaries.
not authorize general subtree reuse or replace scanner checkpoints.
and Julia. Keep malformed and unsupported cases on their existing fallback paths.
Twenty paired benchmark samples compare this change with v0.52.0.
Generated Go single-byte edits improve from 3,033.2 to 182.1 microseconds.
Allocations decrease from 95 to 3 per edit. Full parsing regresses 1.68 percent.
See pull request #1093 for the restoration and its validation.
These changes do not complete compact parser graduation or retire the legacy parser.
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.