Better than average syntax highlighting and formatting for emacs.
Go to file
Will Lillis 15adfa9e51 fix(generate): fold case-insensitive patterns at the AST leaves
A previous fix moved case folding for `/i` patterns out of `regex_syntax` and
into `expand_regex`, so folding could drop the two non-ASCII code points
Unicode simple folding maps onto ASCII letters: the long s `ſ` (U+017F)
onto `s`, and the Kelvin sign `K` (U+212A) onto `k`. Left in, they leak
into otherwise-ASCII tokens and stop those tokens from being extracted as
keywords.

By that point, though, the HIR has already turned a negated class into a
complement, so folding it applies the fold on the wrong side of the
negation. `(?i)[^a-z]` folds a set that contains `A-Z`, which re-admits
`a-z` and leaves a class matching very nearly everything.

`regex_syntax` folds each leaf of a class expression before applying that
leaf's negation and the set algebra above it. Keep that order and change
only the fold: walk the AST, replace each leaf with its fold, and translate
with `case_insensitive(false)`.
2026-08-14 01:16:45 -04:00
.cargo chore: remove CARGO_WORKSPACE_DIR var 2025-09-24 16:14:08 -04:00
.github fix(ci): re-set executable permission on release artifacts before zipping 2026-07-11 10:44:46 +02:00
.zed Add zed config file (enable all cargo features for rust-analyzer) 2025-04-23 16:32:21 -07:00
crates fix(generate): fold case-insensitive patterns at the AST leaves 2026-08-14 01:16:45 -04:00
docs fix(query): keep the trailing anchor when a zero-matched quantifier is anchored 2026-07-17 19:47:19 -04:00
lib fix(query): correctly set a state's skipped_quantifier flag when a 2026-08-11 00:26:25 -05:00
test/fixtures fix(lib): continue search for later named siblings in 2026-08-08 00:20:18 +02: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 feat: add nix flake 2025-09-01 22:48:37 -04: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
build.zig fix(build): define _BSD_SOURCE 2026-01-12 23:43:46 -05:00
build.zig.zon release v0.26.12 2026-08-08 15:04:48 +02:00
Cargo.lock release v0.26.12 2026-08-08 15:04:48 +02:00
Cargo.toml release v0.26.12 2026-08-08 15:04:48 +02:00
CMakeLists.txt release v0.26.12 2026-08-08 15:04:48 +02: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 refactor: rework nix flake 2025-09-09 03:03:35 -04:00
flake.nix release v0.26.12 2026-08-08 15:04:48 +02: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 release v0.26.12 2026-08-08 15:04:48 +02:00
Package.swift fix(build): define _BSD_SOURCE 2026-01-12 23:43:46 -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