An incremental parsing system for programming tools https://tree-sitter.github.io
Find a file
Riley Bruins e7f4dfcd4a fix(query): prevent cycles when analyzing hidden children
**Problem:** `query.c` compares the current analysis state with the
previous analysis state to see if they are equal, so that it can return
early if so. This prevents redundant work. However, the comparison
function here differs from the one used for sorted insertion/lookup in
that it does not check any state data other than the child index. This
is problematic because it leads to infinite analysis when hidden nodes
have cycles.

**Solution:** Remove the custom comparison function, and apply the
insertion/lookup comparison function in place of it.

**NOTE:** This commit also changes the comparison function slightly, so
that some comparisons are reordered. Namely, for performance, it returns
early if the lhs depth is less than the rhs depth. Is this acceptable?
Tests still pass and nothing hangs in my testing, but it still seems
sketchy. Returning early if the lhs depth is greater than the rhs depth
does seem to make query analysis hang, weirdly enough... Keeping the
depth checks at the end of the loop also works, but it introduces a
noticeable performance regression (for queries that otherwise wouldn't
have had analysis cycles, of course).

(cherry picked from commit 6850df969d)
2025-07-30 01:15:58 -04:00
.cargo feat: add xtasks to assist with bumping crates 2024-02-25 13:40:03 -05:00
.github ci(lint): stop linting with nightly 2025-06-26 15:06:52 +02:00
cli feat(bindings): improve python binding test 2025-07-29 23:52:26 -04:00
docs fix(bindings): update swift & node dependencies (#4432) (#4499) 2025-06-07 15:09:22 -04:00
highlight fix(highlight): account for carriage return at EOF and chunk ends 2025-06-05 09:16:09 +02:00
lib fix(query): prevent cycles when analyzing hidden children 2025-07-30 01:15:58 -04:00
tags feat(tags): implement Send + Sync for TagsConfiguration 2025-01-21 00:21:35 -05:00
test/fixtures Fix crash w/ goto_previous_sibling when parent node has leading extra child (#4472) (#4473) 2025-05-27 17:35:57 -07:00
xtask ci(lint): stop linting with nightly 2025-06-26 15:06:52 +02:00
.dockerignore Add a simple dockerfile for testing 2024-03-18 12:35:10 -07:00
.editorconfig build: add editorconfig 2024-02-11 13:03:58 +01:00
.gitattributes fix: specify eof should be lf for windows cicd 2024-01-25 20:12:36 -05:00
.gitignore feat(web)!: rewrite the library in TypeScript 2025-01-21 12:36:15 -05:00
build.zig fix(build.zig): remove deprecated addStaticLibrary() 2025-07-16 11:40:36 +02:00
build.zig.zon 0.25.8 2025-07-13 20:32:42 +02:00
Cargo.lock 0.25.8 2025-07-13 20:32:42 +02:00
Cargo.toml 0.25.8 2025-07-13 20:32:42 +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
FUNDING.json chore: add FUNDING.json 2023-11-08 00:08:07 -05:00
LICENSE docs(license): update year 2024-03-16 01:15:22 -04:00
Makefile 0.25.8 2025-07-13 20:32:42 +02:00
Package.swift build(swift): include all source files 2025-01-06 01:13:04 -05:00
README.md docs: add discord and matrix badges 2024-03-10 11:28:14 -04:00
rustfmt.toml refactor(rust): misc fixes & tidying 2024-04-11 22:35:43 -04: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