This resolves https://github.com/tree-sitter/tree-sitter/issues/3454. This brings the usage of wasmtime::Engine in line with how wasmtime intends it to be used. All wasmtime functions that receive an Engine always receive an `&Engine`, never an owned `Engine`. They are always responsible for cloning the reference if they need it. This brings the usage of wasmtime::Engine in line with how TSParser treats TSLanguages: when setting a language to the parser, the parser is responsible for cloning the reference to the TSLanguage. It is counterintuitive for TSParser to have different behavior when receiving wasmtime_engine_t. C API users also expect this behavior, see "Memory Management" [here](https://docs.wasmtime.dev/c-api/wasm_8h.html). Talking about the C API: without this change, failing to clone the `wasmtime_engine_t` (which, again, is never something API users need to do in wasmtime) and then reusing the engine in multiple TSLanguages results in a use after free. With this change, failing to call `wasm_engine_delete` on your owned Engine results in a memory leak. Memory leaks are safer than use-after-free. |
||
|---|---|---|
| .. | ||
| benches | ||
| config | ||
| loader | ||
| npm | ||
| src | ||
| vendor | ||
| build.rs | ||
| Cargo.toml | ||
| README.md | ||
Tree-sitter CLI
The Tree-sitter CLI allows you to develop, test, and use Tree-sitter grammars from the command line. It works on MacOS, Linux, and Windows.
Installation
You can install the tree-sitter-cli with cargo:
cargo install tree-sitter-cli
or with npm:
npm install tree-sitter-cli
You can also download a pre-built binary for your platform from the releases page.
Dependencies
The tree-sitter binary itself has no dependencies, but specific commands have dependencies that must be present at runtime:
- To generate a parser from a grammar, you must have
nodeon your PATH. - To run and test parsers, you must have a C and C++ compiler on your system.
Commands
-
generate- Thetree-sitter generatecommand will generate a Tree-sitter parser based on the grammar in the current working directory. See the documentation for more information. -
test- Thetree-sitter testcommand will run the unit tests for the Tree-sitter parser in the current working directory. See the documentation for more information. -
parse- Thetree-sitter parsecommand will parse a file (or list of files) using Tree-sitter parsers.