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
{{ message }}
Repository navigation
chore(deps): update dependency tree-sitter-language-pack to v1.23.1 - #365
Keep the Elixir NIF core dependency aligned with the release version after version corrections.
Restore iOS Dart builds with libc 0.2.191.
Trap Swift scanner allocation failures on WASM without importing unsupported stdio or exit symbols;
retain the native allocation-failure diagnostic.
Generate Elixir release checksums with the system Bash on macOS.
Resolve the grammar generator from the project Mise toolchain before entering upstream repositories.
Preserve bounded failure diagnostics and terminate owned descendants even after their leader exits.
Refresh the grammar query table and coding-agent plugin provenance.
Security
Update Zstandard, Rustls, certificate validation and root certificates in the independent
Elixir, Ruby and Rust consumer lockfiles; audit all five Cargo resolutions in CI.
The Ruby gem build no longer fails on the Ruby 3.2 ABI. The development steep dependency, which needs Ruby 3.3,
is now declared only on Ruby 3.3 or newer, so Ruby gems can be published again after the 1.21.2 to 1.22.0 gaps.
Updated 25 bundled grammars to their latest upstream revisions: abl, ada, al, asciidoc, cuda, desktop, dotenv,
editorconfig, erlang, gdscript, gnuplot, idl, lean, mlir, nix, perl, php, proto, rshtml, scss, slint, swift, templ,
wit and xresources. Parse results for these languages can change where upstream fixed or extended the grammar.
Updated dependencies, including ext-php-rs 0.16.2, serde_json 1.0.154 and zstd 0.14.2.
Source chunking now walks the syntax tree once and routes metadata to overlapping chunks, instead
of walking the full tree once per chunk. Metadata collection now scales with the AST traversal and
the node-to-chunk overlaps it produces.
Changed
Regenerate all bindings, fixtures, documentation and workflows with Alef 0.107.12. Native bindings
now preserve typed error variants, map cancellation consistently and safely defer handle destruction
until concurrent calls finish.
BAML grammar (baml, from BoundaryML/baml-treesitter, Apache-2.0), bringing the pack to 372
languages (#200). Upstream ships an ABI 15 parser.c; it is regenerated at ABI 14 like the rest of
the pack. Known limitation: the grammar rejects the documented backtick prompt form until BoundaryML/baml#5012 is fixed upstream.
Parser bundles now carry the pinned licence and NOTICE text for every grammar they contain, so
redistributors can retain the applicable upstream notices (#191). Coverage is fail-closed: a grammar
with no resolvable licence text fails the build.
A root-owned, non-writable parser cache directory is accepted, so a grammar cache baked into a
read-only container image works without a chown (#202). Group- or other-writable directories are
still rejected.
Python DocstringFormat, StructureKind and SymbolKind gain a from_other() factory, and the
unit enums are hashable. WASM classes gain copyForTransfer().
Changed
Refresh 48 grammar pins to their latest upstream revisions. No grammar changed ABI or lost a query;
F#, F# Signature and Protocol Buffers gained locals/tags queries. cuda stays held: its upstream parser.c is past the regeneration size threshold and would lose its injections and tags queries.
BREAKING (Java, C#): DocstringFormat, StructureKind and SymbolKind are sealed types, not
enums. Java uses sealed interfaces with record variants and C# uses abstract records with sealed
record variants, so StructureKind.FUNCTION / StructureKind.Function becomes new StructureKind.Function(). Other now carries its string payload, and Java's values(), getValue() and case-insensitive fromValue() are gone, so match with pattern matching or instanceof/is. The JSON wire format is unchanged. Java ErrorException now extends TreeSitterLanguagePackRsException.
BREAKING (Python): cache_dir, clean_cache, configure, download, download_all, download_group, init, manifest_groups, manifest_languages, prefetch and process raise the
typed tree_sitter_language_pack.Error subclasses (DownloadError, LanguageNotFoundError, ...)
instead of RuntimeError, matching get_language. except RuntimeError: no longer catches them.
The .pyi stubs also drop the never-present type attribute and TypedDict variants on the kind
types and tighten constructor parameter types.
BREAKING (WASM): the data and bodySpan setters no longer accept null/undefined. Use the
new clearData() and clearBodySpan() instead.
BREAKING (PHP, Ruby type signatures): the PHP stubs describe the kind types as classes with a type_tag property, an other property and static factories, not as string constants. The Ruby RBS
enum classes become enum_* type aliases. Kotlin Android unit enums now return the wire string
from toString() ("Line", not "LINE").
Regenerate all bindings, fixtures, documentation and workflows with Alef 0.103.14 (was 0.87.1 at
1.20.0), which is the source of the changes above. The PHP extension now builds against ext-php-rs
0.16 and the Elixir package requires rustler_precompiled ~> 0.10. Ruby builds against magnus 0.9
and the MCP server against rmcp 3.5. libc is held at 0.2.189 because 0.2.190 breaks iOS builds
(rust-lang/libc#5601).
Fixed
download([...]) fetches languages the manifest knows but the cache does not hold. It previously
returned the requested count without downloading anything, leaving downloaded_languages() empty on
a fresh cache (#201).
Python get_language() releases the GIL while it downloads a missing grammar, so a cache miss no
longer freezes every other thread and the asyncio loop for up to the HTTP timeout (#203).
rustls is past RUSTSEC-2026-0285 in every lock, including the Elixir NIF, Ruby extension and Rust e2e
locks that the earlier bump missed (#198).
BREAKING (Java): enum constants are now UPPER_SNAKE_CASE.StructureKind.Function becomes StructureKind.FUNCTION, and likewise across CommentKind, DataNodeKind, DiagnosticSeverity, DocstringFormat, ExportKind and SymbolKind. The serialized wire values are unchanged, so no
data migration is needed and persisted JSON stays readable; only Java source naming the old
identifiers has to be updated.
BREAKING (Swift): process() returns typed value types instead of opaque Rust handles. ProcessResult, StructureItem, DataNode and fifteen other types are now Codable structs with
stored properties rather than typealiases to swift-bridge handles. Field access moves from method
to property syntax (result.structure, not result.structure()), collections are real Swift arrays,
and StructureKind / SymbolKind / DocstringFormat are Swift enums with associated values rather
than strings. Values now cross the bridge as JSON and are decoded in Swift, so process() is throws on malformed input rather than returning a handle that fails on first access.
Regenerate all bindings, fixtures, documentation and release workflows with Alef 0.87.1 (was
0.85.15), lifting the hold recorded in 1.19.1. 0.86.1 promoted the Swift binding to value types but
left the Swift e2e suite it generates calling the old method syntax; 0.87.0 fixed that but emitted
enums whose Codable conformance could not read serde's wire format. Both are resolved in 0.87.1.
Added
Swift structure-extraction test coverage. Every test in the Swift package suite previously read only
scalar fields off process(), leaving the structure path unexercised — all seventeen passed against
an Alef 0.87.0 build whose process() threw on any source containing structure. The new test asserts
the decoded StructureKind cases and item names, which is what exercises the element decoder; nim
cannot cover this (its grammar uses none of the node kind names structure_kind_at() matches) so it
goes through mojo, already in the package's statically compiled language set.
Fixed
Swift enums with associated values decode serde's externally tagged wire format. Unit variants
serialize as a bare string ("Function") and payload variants as a single-keyed object
({"Other": "macro"}); the generated conformance previously fell through to Swift's synthesized Codable, which expects {"function": {}} and matched neither form. (Alef 0.87.1)
Node and WebAssembly e2e suites read internally tagged FormatMetadata as the flattened shape serde
actually emits, with the sibling-field form asserted directly so a regression to the nested form
fails loudly instead of silently degrading to the variant name. (Alef 0.87.1)
The Go binding pairs native error messages with their sentinels, so callers can match with errors.Is while still reading the detail the native layer produced. (Alef 0.87.1)
Alef stays pinned at 0.85.15. 0.86.1 rewrites the Swift binding to real value types -- DataNode, ProcessResult and StructureItem become Codable structs with typed properties
instead of typealiases to opaque Rust handles -- but does not update the Swift e2e suite it
generates alongside them, which still calls result.language() and result.structure() on
what are now properties. The two halves of its own output do not compile together, and e2e/
is generated with a CI freshness gate, so the mismatch cannot be patched downstream. Reported
upstream; the upgrade lands once the e2e emitter follows the binding emitter.
Removed the eight superseded release/swift/<version> branches. publish.yaml moves the
release tag onto the same checksummed commit it pushes the branch to, so each branch named a
commit already reachable through v<version>; a consumer pinned to one can switch to exact: "<version>" with no other change. release/swift/1.19.0 is retained.
Fixed
Patched an indent-stack underflow in the vendored agda external scanner. VEC_POP is a bare len-- and VEC_BACK reads data[len - 1], so the dedent loop could drain the stack, wrap len to UINT32_MAX and dereference the buffer plus 16 GiB. 1023 or more repeated '
characters -- or NUL bytes -- crash the parser with SIGBUS. The same scanner also seeded its
column-0 sentinel only when deserialize was called with a NULL buffer, while tree-sitter
resets a scanner with a non-NULL inline buffer of length 0, leaving the following scan to read data[-1]. A survey of all 186 vendored scanners found both defects only in agda.
Dynamically loaded grammars are ABI-checked at load time. load_from_dir called Language::from_raw on a downloaded parser with only a null check, so an incompatible grammar
was accepted and failed later at ts_parser_set_language -- or, just outside the compatible
range, parsed wrongly. The ABI version is now compared against the linked runtime's MIN_COMPATIBLE_LANGUAGE_VERSION..=LANGUAGE_VERSION and rejected with both versions named. The
bounds are read from the runtime, so a runtime upgrade moves them rather than leaving a stale
literal behind.
scripts/sync_zig_zon_hashes.py now maintains alef.toml's [crates.e2e.registry.packages.zig.platform_hashes] alongside test_apps/zig/build.zig.zon.
Nothing had ever populated that table, so it carried five STALE_HASH_REGENERATE placeholders;
Alef responds to a placeholder by omitting the .hash line entirely, which is the only reason
the manifest had to be declared user_owned in the first place. The five real digests are in
place and the gate now fails on drift in either file.
The nightly sanitizer sweep finishes inside its job. Six consecutive nightlies were killed at
the 120-minute limit, every one inside the parse sweep after all twelve preceding steps had
passed, so the job reported neither its findings nor how far it got. The sweep now runs against
a 90-minute budget checked between languages, states how many languages it swept, names any it
did not reach, and bounds each parse with a timeout -- one pathological input had been running
over ten minutes. The day's language order rotates by day-of-year so a truncated sweep stops
dropping the same alphabetical tail every night.
That sweep also reports a finding it cannot attribute to a sanitizer exit code. UBSan raises SIGABRT where abort_on_error defaults to 1 and prints ERROR: UndefinedBehaviorSanitizer,
neither of which the previous detector matched, so the agda crash above was exactly the shape
it let through; any parse killed by a signal now counts. Its sanitizer environment is scoped to
the ts-pack invocation as well -- as a step-level env: it also reached the shell, python3, find, grep and tee, each running uninstrumented with the runtime LD_PRELOADed into it
and exitcode=42 in force, so a diagnosis raised in a helper would have been reported as a
scanner finding.
Upgraded the tree-sitter runtime to 0.27, moving tree-sitter-language to 0.1.8 in the same
step. The two pins are not independent: 0.27 requires tree-sitter-language ^0.1.8, and 0.1.8
relocates the 0.26 WASM shims under wasm/unsupported/ so they no longer compile against the
older runtime. The grammar ABI is unchanged -- both 0.26 and 0.27 are TREE_SITTER_LANGUAGE_VERSION 15 with a minimum compatible version of 13 -- so every bundled
grammar loads exactly as before and no regeneration is implied.
Consumers that also depend on tree-sitter directly must move to 0.27 in the same step. The tree-sitter crate declares links = "tree-sitter", and Cargo permits only one package per links value in a dependency graph, so pairing this release with a 0.26 pin fails to resolve
rather than failing to compile. Nothing this crate exports changed: the requirement is a
dependency floor, not a break in its own API.
Grammar scanners now compile with NDEBUG on wasm32. 0.27's WASM libc is a documented subset
that excludes assert, so a scanner keeping its assertions emitted an unresolved __assert_fail.
That became an env module import rather than a link error, and the package then failed to load
at runtime with Cannot find module 'env'. Native builds keep their assertions.
Dropped this crate's own WASM libc shims (memchr, strcmp, iswalnum and friends) now that
0.27 defines them. Keeping both made the two definitions collide at link time, which broke the
WASM package under the split-codegen-unit settings the release build uses.
Replaced the 0.26 WASM integration, which used a separate non-thread-safe allocator and an
incomplete libc. 0.27 supplies its own WASM libc and forwards C allocation to the Rust
application's global allocator.
Fixed
Swift binaries again link a single tree-sitter C runtime. SwiftPM builds tree-sitter 0.25.10 for
SwiftTreeSitter as loose object files, while this package's Rust staticlib carries the 0.27
runtime in one archive member. Archive members load only to resolve an undefined symbol, and
0.27's new ts_language_is_parseable was the first symbol SwiftPM's copy could not supply --
pulling the member in and colliding on 253 other runtime symbols at link time. The C bridge now
provides a weak definition, so the member stays unreferenced and yields to any future SwiftPM
runtime that exports the symbol itself (#189).
wasm32 builds now find their headers under either wasi-sysroot include layout. wasi-libc
renamed include/wasm32-wasi to include/wasm32-wasip1, and probing only the former meant a
sysroot that existed but used the newer name contributed no include flag at all, failing every
grammar with 'stdlib.h' file not found. Toolchains whose clang supplies its own sysroot were
unaffected, which is why this surfaced only in local builds.
Node::child_count now returns tree-sitter's u32 widened to the usize this crate has always
declared, rather than failing to compile against the new runtime.
Refreshed 22 grammar pins to their upstream latest: al, blade, cfml, dotenv, gitcommit, javadoc, kcl, kdl, lean, magik, mlir, nix, ocaml, ocaml_interface, perl, proto, sas, sql, swift, sysml and t32. abl is no
longer held back: upstream now defines the outer_join node its highlights.scm
references, so it compiles for the first time since the hold was taken. cuda is now the
one deliberate hold -- upstream's committed parser.c grew past the regeneration
threshold, so a bump would ship it as-is at ABI 15 and drop the injections and tags
queries the grammar only receives while being regenerated.
Re-derived the ocaml_interface highlights overlay from upstream's reworked query.
tree-sitter-ocaml declares one shared queries/highlights.scm for all three of its
grammars, but that query matches (shebang), which only the implementation grammar
defines; the overlay is upstream's file with that alternative removed, and it had drifted
behind their block-access rework.
Regenerated bindings, fixtures, documentation and release workflows with Alef 0.85.15.
C# contains assertions now compare a JSON-serialized value instead of Convert.ToString, which reported a type name rather than content for tagged unions such
as StructureKind. The PHP e2e runner exports the verified extension path so processes it
spawns under -n load the same build.
Upgraded rmcp to 3.3.
Retained tree-sitter 0.26 and the tree-sitter-language 0.1.7 pin. tree-sitter 0.27
requires tree-sitter-language 0.1.8 and removed its Package.swift, so SwiftTreeSitter
cannot follow it; the upgrade also changes this crate's public API, since Language is
re-exported. (#189)
Fixed
Publish every native NuGet runtime package required by the managed package's runtime graph.
Upload Dart native archives and checksums required by the generated package downloader.
Publish Go installer archive aliases and their required SHA256 sidecars.
Recorded the node e2e harness's tree-sitter floor in alef.toml and realigned test_apps/node's lockfile with its regenerated manifest, which disagreed and broke pnpm install --frozen-lockfile. Realigned the generated Go e2e module pin, which the
version sync leaves behind.
Retain tree-sitter 0.26 and the current grammar revisions. The attempted 0.27 upgrade
is deferred because SwiftTreeSitter 0.25 requires the 0.25 C runtime, which conflicts
with the newer runtime in our published static Swift library. Pin the WASM shim
dependency tree-sitter-language to 0.1.7 because 0.1.8 rejects the retained runtime. (#189)
Regenerate bindings, fixtures, documentation, and release workflows with Alef 0.85.11;
upgrade Rust dependencies, including dirs 7 and zstd 0.14.
Added
Restore the Rust extension_ambiguity() API and its serde-gated JSON companion to expose the
default language and alternatives for ambiguous file extensions. (#185)
Fixed
Propagate C# fallible-void native failures as typed exceptions while preserving their
native error codes and messages; narrow Java boolean returns to the C ABI width.
Preserve Swift declaration kinds, protocol requirements, aliases and constants; retain
TypeScript namespace ownership and named arrow functions without duplicate constants. (#186)
Preserve YAML flow collections and scalar keys, TOML dotted keys and commented containers,
JSON property spans, and Terraform/HCL paths. Reject concatenated JSON documents and handle
deeply nested TOML keys without overflowing the stack. (#186)
Stage the matching ktreesitter host native library for Kotlin Android JVM tests and
synchronize dependency lockfiles used by documentation and generated test suites.
process() returns a ProcessResult object again in Python, so attribute access works.
In 1.16.1 the generator emitted options.ProcessResult as class ProcessResult(TypedDict, total=False), which is a type annotation and not a runtime class -- process() therefore handed
back a plain dict, and every documented access (result.language, result.chunks, result.metrics.total_lines) raised AttributeError. Only Python was affected; the TypedDict
path existed in no other binding, so the same call in Node, Go, Ruby or Java kept returning a
real object throughout. ProcessResult is a @dataclass(frozen=True, slots=True) again, as it
was before 1.16.1 and as every sibling binding already models it. (#183)
The generated e2e suites assert against the shape their binding actually returns. Two
backends were broken by one generator-level disagreement, in which the e2e emitter and the
binding emitter held different ideas about the shape of a value they share. In Python, 72 of the
523 tests failed because the emitter wrote attribute assertions (result.language == "python")
against a value the binding emitter was generating as a dict. In TypeScript, 18 of the 37 process tests failed because the emitter wrote String(e.kind).includes("Function") against kind, which is an object -- String({ type: "Function" }) is "[object Object]", so every
structure-kind assertion evaluated false and reported it as the uninformative expected false to be true. Both emitters now read the value the way the binding presents it -- the dataclass
attribute in Python, e.kind?.["type"] === "Function" in TypeScript -- and both suites are 523
passed / 0 failed. (#182)
Changed
Regenerated all bindings, stubs, scaffolding, READMEs, test apps and e2e suites on alef 0.84.1
(from 0.82.2). 0.82.1 deleted the TypedDict path from the Python binding emitter and 0.75.0
fixed the e2e emitter, so this is the first release carrying both. 0.84.1 also makes generation
reproducible across runs, which clears the 459 spurious TypeScript snippet-compile failures the
0.84.0 line reported.
Note on the npm package
@xberg-io/tree-sitter-language-pack skipped both 1.16.0 and 1.16.1 -- npm's latest is still
1.15.8 -- for two different reasons. 1.16.0 never got past Validate version consistency, the
unrun task version:sync recorded in the 1.16.1 notes below. 1.16.1 cleared that gate and then
failed E2E gate — Node on the 18 TypeScript failures above; that job blocks the npm publish, so
the package never reached the registry. The wasm package is gated separately and did ship 1.16.1.
1.16.2 is the first release in which both gates pass.
Note
1.16.2 is a fix-only release. The two defects above landed together in 1.16.1 and are the whole
content of this one; no grammar pins moved.
Configuration
📅 Schedule: (UTC)
Branch creation
At any time (no schedule defined)
Automerge
At any time (no schedule defined)
🚦 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.
If you want to rebase/retry this PR, check this box
Merging this PR will improve performance by 35.82%
2 warnings
⚠️2 benchmarks with a significant change ran on different hardware
Their base and head results were measured on machines with a different CPU, core count or memory, so the changes might not come from the code. Run base and head on the same runner type.
⚠️2 benchmarks with a significant change ran in a different software environment
Their base and head results were measured with a different OS or toolchain, such as compiler, runtime or library versions, so the changes might come from this difference rather than from the code. Open an affected benchmark to see what changed.
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.16.2
chore(deps): update dependency tree-sitter-language-pack to v1.17.0
Sep 10, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.17.0
chore(deps): update dependency tree-sitter-language-pack to v1.18.0
Sep 11, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.18.0
chore(deps): update dependency tree-sitter-language-pack to v1.19.0
Sep 12, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.19.0
chore(deps): update dependency tree-sitter-language-pack to v1.19.1
Sep 13, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.19.1
chore(deps): update dependency tree-sitter-language-pack to v1.20.0
Sep 15, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.20.0
chore(deps): update dependency tree-sitter-language-pack to v1.21.0
Oct 4, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.21.0
chore(deps): update dependency tree-sitter-language-pack to v1.21.1
Oct 10, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.21.1
chore(deps): update dependency tree-sitter-language-pack to v1.21.3
Oct 11, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.21.3
chore(deps): update dependency tree-sitter-language-pack to v1.22.0
Oct 12, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.22.0
chore(deps): update dependency tree-sitter-language-pack to v1.22.1
Oct 13, 2026
renovateBot
changed the title
chore(deps): update dependency tree-sitter-language-pack to v1.22.1
chore(deps): update dependency tree-sitter-language-pack to v1.23.1
Nov 2, 2026
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
==1.16.1→==1.23.1Release Notes
xberg-io/tree-sitter-language-pack (tree-sitter-language-pack)
v1.23.1Compare Source
Fixed
retain the native allocation-failure diagnostic.
Preserve bounded failure diagnostics and terminate owned descendants even after their leader exits.
Security
Elixir, Ruby and Rust consumer lockfiles; audit all five Cargo resolutions in CI.
v1.22.1Compare Source
Fixed
steepdependency, which needs Ruby 3.3,is now declared only on Ruby 3.3 or newer, so Ruby gems can be published again after the 1.21.2 to 1.22.0 gaps.
v1.22.0Compare Source
Changed
editorconfig, erlang, gdscript, gnuplot, idl, lean, mlir, nix, perl, php, proto, rshtml, scss, slint, swift, templ,
wit and xresources. Parse results for these languages can change where upstream fixed or extended the grammar.
ext-php-rs0.16.2,serde_json1.0.154 andzstd0.14.2.v1.21.3Compare Source
Fixed
including the Claude marketplace manifest.
v1.21.1Compare Source
Fixed
of walking the full tree once per chunk. Metadata collection now scales with the AST traversal and
the node-to-chunk overlaps it produces.
Changed
now preserve typed error variants, map cancellation consistently and safely defer handle destruction
until concurrent calls finish.
v1.21.0Compare Source
Added
baml, from BoundaryML/baml-treesitter, Apache-2.0), bringing the pack to 372languages (#200). Upstream ships an ABI 15
parser.c; it is regenerated at ABI 14 like the rest ofthe pack. Known limitation: the grammar rejects the documented backtick
promptform untilBoundaryML/baml#5012 is fixed upstream.
redistributors can retain the applicable upstream notices (#191). Coverage is fail-closed: a grammar
with no resolvable licence text fails the build.
read-only container image works without a
chown(#202). Group- or other-writable directories arestill rejected.
DocstringFormat,StructureKindandSymbolKindgain afrom_other()factory, and theunit enums are hashable. WASM classes gain
copyForTransfer().Changed
F#, F# Signature and Protocol Buffers gained
locals/tagsqueries.cudastays held: its upstreamparser.cis past the regeneration size threshold and would lose its injections and tags queries.DocstringFormat,StructureKindandSymbolKindare sealed types, notenums. Java uses sealed interfaces with record variants and C# uses abstract records with sealed
record variants, so
StructureKind.FUNCTION/StructureKind.Functionbecomesnew StructureKind.Function().Othernow carries its string payload, and Java'svalues(),getValue()and case-insensitivefromValue()are gone, so match with pattern matching orinstanceof/is. The JSON wire format is unchanged. JavaErrorExceptionnow extendsTreeSitterLanguagePackRsException.cache_dir,clean_cache,configure,download,download_all,download_group,init,manifest_groups,manifest_languages,prefetchandprocessraise thetyped
tree_sitter_language_pack.Errorsubclasses (DownloadError,LanguageNotFoundError, ...)instead of
RuntimeError, matchingget_language.except RuntimeError:no longer catches them.The
.pyistubs also drop the never-presenttypeattribute and TypedDict variants on the kindtypes and tighten constructor parameter types.
dataandbodySpansetters no longer acceptnull/undefined. Use thenew
clearData()andclearBodySpan()instead.type_tagproperty, anotherproperty and static factories, not as string constants. The Ruby RBSenum classes become
enum_*type aliases. Kotlin Android unit enums now return the wire stringfrom
toString()("Line", not"LINE").1.20.0), which is the source of the changes above. The PHP extension now builds against ext-php-rs
0.16 and the Elixir package requires
rustler_precompiled ~> 0.10. Ruby builds against magnus 0.9and the MCP server against rmcp 3.5.
libcis held at 0.2.189 because 0.2.190 breaks iOS builds(rust-lang/libc#5601).
Fixed
download([...])fetches languages the manifest knows but the cache does not hold. It previouslyreturned the requested count without downloading anything, leaving
downloaded_languages()empty ona fresh cache (#201).
get_language()releases the GIL while it downloads a missing grammar, so a cache miss nolonger freezes every other thread and the asyncio loop for up to the HTTP timeout (#203).
locks that the earlier bump missed (#198).
v1.20.0Compare Source
Changed
UPPER_SNAKE_CASE.StructureKind.FunctionbecomesStructureKind.FUNCTION, and likewise acrossCommentKind,DataNodeKind,DiagnosticSeverity,DocstringFormat,ExportKindandSymbolKind. The serialized wire values are unchanged, so nodata migration is needed and persisted JSON stays readable; only Java source naming the old
identifiers has to be updated.
process()returns typed value types instead of opaque Rust handles.ProcessResult,StructureItem,DataNodeand fifteen other types are nowCodablestructs withstored properties rather than
typealiases to swift-bridge handles. Field access moves from methodto property syntax (
result.structure, notresult.structure()), collections are real Swift arrays,and
StructureKind/SymbolKind/DocstringFormatare Swift enums with associated values ratherthan strings. Values now cross the bridge as JSON and are decoded in Swift, so
process()isthrowson malformed input rather than returning a handle that fails on first access.0.85.15), lifting the hold recorded in 1.19.1. 0.86.1 promoted the Swift binding to value types but
left the Swift e2e suite it generates calling the old method syntax; 0.87.0 fixed that but emitted
enums whose
Codableconformance could not read serde's wire format. Both are resolved in 0.87.1.Added
scalar fields off
process(), leaving the structure path unexercised — all seventeen passed againstan Alef 0.87.0 build whose
process()threw on any source containing structure. The new test assertsthe decoded
StructureKindcases and item names, which is what exercises the element decoder; nimcannot cover this (its grammar uses none of the node kind names
structure_kind_at()matches) so itgoes through mojo, already in the package's statically compiled language set.
Fixed
serialize as a bare string (
"Function") and payload variants as a single-keyed object(
{"Other": "macro"}); the generated conformance previously fell through to Swift's synthesizedCodable, which expects{"function": {}}and matched neither form. (Alef 0.87.1)FormatMetadataas the flattened shape serdeactually emits, with the sibling-field form asserted directly so a regression to the nested form
fails loudly instead of silently degrading to the variant name. (Alef 0.87.1)
errors.Iswhile still reading the detail the native layer produced. (Alef 0.87.1)v1.19.1Compare Source
Changed
DataNode,ProcessResultandStructureItembecomeCodablestructs with typed propertiesinstead of
typealiases to opaque Rust handles -- but does not update the Swift e2e suite itgenerates alongside them, which still calls
result.language()andresult.structure()onwhat are now properties. The two halves of its own output do not compile together, and
e2e/is generated with a CI freshness gate, so the mismatch cannot be patched downstream. Reported
upstream; the upgrade lands once the e2e emitter follows the binding emitter.
release/swift/<version>branches.publish.yamlmoves therelease tag onto the same checksummed commit it pushes the branch to, so each branch named a
commit already reachable through
v<version>; a consumer pinned to one can switch toexact: "<version>"with no other change.release/swift/1.19.0is retained.Fixed
agdaexternal scanner.VEC_POPis a barelen--andVEC_BACKreadsdata[len - 1], so the dedent loop could drain the stack, wraplentoUINT32_MAXand dereference the buffer plus 16 GiB. 1023 or more repeated'characters -- or NUL bytes -- crash the parser with
SIGBUS. The same scanner also seeded itscolumn-0 sentinel only when
deserializewas called with a NULL buffer, while tree-sitterresets a scanner with a non-NULL inline buffer of length 0, leaving the following scan to read
data[-1]. A survey of all 186 vendored scanners found both defects only inagda.load_from_dircalledLanguage::from_rawon a downloaded parser with only a null check, so an incompatible grammarwas accepted and failed later at
ts_parser_set_language-- or, just outside the compatiblerange, parsed wrongly. The ABI version is now compared against the linked runtime's
MIN_COMPATIBLE_LANGUAGE_VERSION..=LANGUAGE_VERSIONand rejected with both versions named. Thebounds are read from the runtime, so a runtime upgrade moves them rather than leaving a stale
literal behind.
scripts/sync_zig_zon_hashes.pynow maintainsalef.toml's[crates.e2e.registry.packages.zig.platform_hashes]alongsidetest_apps/zig/build.zig.zon.Nothing had ever populated that table, so it carried five
STALE_HASH_REGENERATEplaceholders;Alef responds to a placeholder by omitting the
.hashline entirely, which is the only reasonthe manifest had to be declared
user_ownedin the first place. The five real digests are inplace and the gate now fails on drift in either file.
the 120-minute limit, every one inside the parse sweep after all twelve preceding steps had
passed, so the job reported neither its findings nor how far it got. The sweep now runs against
a 90-minute budget checked between languages, states how many languages it swept, names any it
did not reach, and bounds each parse with a timeout -- one pathological input had been running
over ten minutes. The day's language order rotates by day-of-year so a truncated sweep stops
dropping the same alphabetical tail every night.
SIGABRTwhereabort_on_errordefaults to 1 and printsERROR: UndefinedBehaviorSanitizer,neither of which the previous detector matched, so the
agdacrash above was exactly the shapeit let through; any parse killed by a signal now counts. Its sanitizer environment is scoped to
the
ts-packinvocation as well -- as a step-levelenv:it also reached the shell,python3,find,grepandtee, each running uninstrumented with the runtimeLD_PRELOADed into itand
exitcode=42in force, so a diagnosis raised in a helper would have been reported as ascanner finding.
v1.19.0Compare Source
Changed
tree-sitter-languageto 0.1.8 in the samestep. The two pins are not independent: 0.27 requires
tree-sitter-language^0.1.8, and 0.1.8relocates the 0.26 WASM shims under
wasm/unsupported/so they no longer compile against theolder runtime. The grammar ABI is unchanged -- both 0.26 and 0.27 are
TREE_SITTER_LANGUAGE_VERSION15 with a minimum compatible version of 13 -- so every bundledgrammar loads exactly as before and no regeneration is implied.
tree-sitterdirectly must move to 0.27 in the same step. Thetree-sittercrate declareslinks = "tree-sitter", and Cargo permits only one package perlinksvalue in a dependency graph, so pairing this release with a 0.26 pin fails to resolverather than failing to compile. Nothing this crate exports changed: the requirement is a
dependency floor, not a break in its own API.
NDEBUGonwasm32. 0.27's WASM libc is a documented subsetthat excludes
assert, so a scanner keeping its assertions emitted an unresolved__assert_fail.That became an
envmodule import rather than a link error, and the package then failed to loadat runtime with
Cannot find module 'env'. Native builds keep their assertions.memchr,strcmp,iswalnumand friends) now that0.27 defines them. Keeping both made the two definitions collide at link time, which broke the
WASM package under the split-codegen-unit settings the release build uses.
incomplete libc. 0.27 supplies its own WASM libc and forwards C allocation to the Rust
application's global allocator.
Fixed
SwiftTreeSitter as loose object files, while this package's Rust staticlib carries the 0.27
runtime in one archive member. Archive members load only to resolve an undefined symbol, and
0.27's new
ts_language_is_parseablewas the first symbol SwiftPM's copy could not supply --pulling the member in and colliding on 253 other runtime symbols at link time. The C bridge now
provides a weak definition, so the member stays unreferenced and yields to any future SwiftPM
runtime that exports the symbol itself (#189).
wasm32builds now find their headers under either wasi-sysroot include layout. wasi-libcrenamed
include/wasm32-wasitoinclude/wasm32-wasip1, and probing only the former meant asysroot that existed but used the newer name contributed no include flag at all, failing every
grammar with
'stdlib.h' file not found. Toolchains whose clang supplies its own sysroot wereunaffected, which is why this surfaced only in local builds.
Node::child_countnow returns tree-sitter'su32widened to theusizethis crate has alwaysdeclared, rather than failing to compile against the new runtime.
v1.18.0Compare Source
Changed
al,blade,cfml,dotenv,gitcommit,javadoc,kcl,kdl,lean,magik,mlir,nix,ocaml,ocaml_interface,perl,proto,sas,sql,swift,sysmlandt32.ablis nolonger held back: upstream now defines the
outer_joinnode itshighlights.scmreferences, so it compiles for the first time since the hold was taken.
cudais now theone deliberate hold -- upstream's committed
parser.cgrew past the regenerationthreshold, so a bump would ship it as-is at ABI 15 and drop the injections and tags
queries the grammar only receives while being regenerated.
ocaml_interfacehighlights overlay from upstream's reworked query.tree-sitter-ocaml declares one shared
queries/highlights.scmfor all three of itsgrammars, but that query matches
(shebang), which only the implementation grammardefines; the overlay is upstream's file with that alternative removed, and it had drifted
behind their block-access rework.
C#
containsassertions now compare a JSON-serialized value instead ofConvert.ToString, which reported a type name rather than content for tagged unions suchas
StructureKind. The PHP e2e runner exports the verified extension path so processes itspawns under
-nload the same build.rmcpto 3.3.tree-sitter-language0.1.7 pin. tree-sitter 0.27requires
tree-sitter-language0.1.8 and removed itsPackage.swift, so SwiftTreeSittercannot follow it; the upgrade also changes this crate's public API, since
Languageisre-exported. (#189)
Fixed
tree-sitterfloor inalef.tomland realignedtest_apps/node's lockfile with its regenerated manifest, which disagreed and brokepnpm install --frozen-lockfile. Realigned the generated Go e2e module pin, which theversion sync leaves behind.
v1.17.0Compare Source
Changed
is deferred because SwiftTreeSitter 0.25 requires the 0.25 C runtime, which conflicts
with the newer runtime in our published static Swift library. Pin the WASM shim
dependency
tree-sitter-languageto 0.1.7 because 0.1.8 rejects the retained runtime. (#189)upgrade Rust dependencies, including
dirs7 andzstd0.14.Added
extension_ambiguity()API and its serde-gated JSON companion to expose thedefault language and alternatives for ambiguous file extensions. (#185)
Fixed
native error codes and messages; narrow Java boolean returns to the C ABI width.
TypeScript namespace ownership and named arrow functions without duplicate constants. (#186)
JSON property spans, and Terraform/HCL paths. Reject concatenated JSON documents and handle
deeply nested TOML keys without overflowing the stack. (#186)
synchronize dependency lockfiles used by documentation and generated test suites.
v1.16.2Compare Source
Fixed
process()returns aProcessResultobject again in Python, so attribute access works.In 1.16.1 the generator emitted
options.ProcessResultasclass ProcessResult(TypedDict, total=False), which is a type annotation and not a runtime class --process()therefore handedback a plain
dict, and every documented access (result.language,result.chunks,result.metrics.total_lines) raisedAttributeError. Only Python was affected; the TypedDictpath existed in no other binding, so the same call in Node, Go, Ruby or Java kept returning a
real object throughout.
ProcessResultis a@dataclass(frozen=True, slots=True)again, as itwas before 1.16.1 and as every sibling binding already models it. (#183)
backends were broken by one generator-level disagreement, in which the e2e emitter and the
binding emitter held different ideas about the shape of a value they share. In Python, 72 of the
523 tests failed because the emitter wrote attribute assertions (
result.language == "python")against a value the binding emitter was generating as a dict. In TypeScript, 18 of the 37
processtests failed because the emitter wroteString(e.kind).includes("Function")againstkind, which is an object --String({ type: "Function" })is"[object Object]", so everystructure-kind assertion evaluated false and reported it as the uninformative
expected false to be true. Both emitters now read the value the way the binding presents it -- the dataclassattribute in Python,
e.kind?.["type"] === "Function"in TypeScript -- and both suites are 523passed / 0 failed. (#182)
Changed
(from 0.82.2). 0.82.1 deleted the TypedDict path from the Python binding emitter and 0.75.0
fixed the e2e emitter, so this is the first release carrying both. 0.84.1 also makes generation
reproducible across runs, which clears the 459 spurious TypeScript snippet-compile failures the
0.84.0 line reported.
Note on the npm package
@xberg-io/tree-sitter-language-packskipped both 1.16.0 and 1.16.1 -- npm's latest is still1.15.8 -- for two different reasons. 1.16.0 never got past
Validate version consistency, theunrun
task version:syncrecorded in the 1.16.1 notes below. 1.16.1 cleared that gate and thenfailed
E2E gate — Nodeon the 18 TypeScript failures above; that job blocks the npm publish, sothe package never reached the registry. The wasm package is gated separately and did ship 1.16.1.
1.16.2 is the first release in which both gates pass.
Note
content of this one; no grammar pins moved.
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.