An incremental parsing system for programming tools
https://tree-sitter.github.io
**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). |
||
|---|---|---|
| .cargo | ||
| .github | ||
| .zed | ||
| crates | ||
| docs | ||
| lib | ||
| test/fixtures | ||
| .dockerignore | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| build.zig | ||
| build.zig.zon | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CONTRIBUTING.md | ||
| Dockerfile | ||
| FUNDING.json | ||
| LICENSE | ||
| Makefile | ||
| Package.swift | ||
| README.md | ||
tree-sitter
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