Good syntax highlighting that can be embedding into Emacs.
Go to file
Will Lillis 123fb1c13c perf(query): use min-heap for finished_states in next_capture
`ts_query_cursor_next_capture` linearly scanned all finished states to
find the one with the earliest next capture byte offset. With deeply
nested code, this O(n) scan per capture caused the highlight crate to
hang for minutes on large files.

Replace the linear scan with a min-heap over the finished_states array,
keyed by (next_capture_byte_offset, pattern_index, id). The heap is
maintained lazily: ts_query_cursor__advance uses plain array_push
(preserving FIFO insertion order), and next_capture sifts new elements
into the heap on entry via a tracked heap_size boundary. This preserves
the documented "order found" guarantee for next_match while giving
next_capture O(log n) per call.
2026-04-26 18:03:55 -04:00
.cargo chore: remove CARGO_WORKSPACE_DIR var 2025-09-24 16:14:08 -04:00
.github ci: run on illumos 2026-04-26 13:23:32 -04:00
.zed Add zed config file (enable all cargo features for rust-analyzer) 2025-04-23 16:32:21 -07:00
crates lexer: pass code-unit length to U16_NEXT in UTF-16 decoders 2026-04-26 03:38:47 -04:00
docs docs: add AI policy 2026-04-26 02:58:56 -04:00
lib perf(query): use min-heap for finished_states in next_capture 2026-04-26 18:03:55 -04:00
test/fixtures lexer: pass code-unit length to U16_NEXT in UTF-16 decoders 2026-04-26 03:38:47 -04:00
.dockerignore Add a simple dockerfile for testing 2024-03-18 12:35:10 -07:00
.editorconfig style(zig): reformat files 2025-08-28 20:54:25 +03:00
.envrc nix: support single-checkout and multi-workspace direnv setups 2026-02-18 00:50:06 -05:00
.gitattributes Reorganize rust crates into a flat crates directory, simplify some CI steps (#4496) 2025-06-06 14:25:37 -07:00
.gitignore refactor: rework nix flake 2025-09-09 03:03:35 -04:00
.taplo.toml treewide: add taplo config and reformat toml files 2026-02-18 00:59:34 -05:00
build.zig build(zig): update to zig 0.16 2026-04-15 14:54:53 +02:00
build.zig.zon build(zig): update to zig 0.16 2026-04-15 14:54:53 +02:00
Cargo.lock build(deps): bump the cargo group with 3 updates 2026-04-21 09:38:08 +02:00
Cargo.toml build(deps): bump the cargo group with 3 updates 2026-04-21 09:38:08 +02:00
CMakeLists.txt fix(build): define _BSD_SOURCE 2026-01-12 19:41:58 -05:00
CONTRIBUTING.md docs: improve docs for contributing to docs 2025-01-10 22:57:54 -05:00
Dockerfile Add a simple dockerfile for testing 2024-03-18 12:35:10 -07:00
flake.lock flake: update lockfile 2026-02-09 22:52:13 -05:00
flake.nix nix: fix clangd not working 2026-02-08 11:09:31 +01:00
FUNDING.json chore: add FUNDING.json 2023-11-08 00:08:07 -05:00
LICENSE chore: copy license to all packages 2025-09-11 03:12:35 -04:00
Makefile make: drop redundant cargo check 2026-02-09 22:52:13 -05:00
Package.swift fix(build): define _BSD_SOURCE 2026-01-12 19:41:58 -05:00
README.md docs: change WASM/wasm to Wasm 2025-08-21 09:56:32 +03:00

tree-sitter

DOI discord matrix

Tree-sitter is a parser generator tool and an incremental parsing library. It can build a concrete syntax tree for a source file and efficiently update the syntax tree as the source file is edited. Tree-sitter aims to be:

  • General enough to parse any programming language
  • Fast enough to parse on every keystroke in a text editor
  • Robust enough to provide useful results even in the presence of syntax errors
  • Dependency-free so that the runtime library (which is written in pure C) can be embedded in any application