diff options
author | Lewis Russell <lewis6991@gmail.com> | 2024-03-18 23:19:01 +0000 |
---|---|---|
committer | Lewis Russell <me@lewisr.dev> | 2024-03-19 14:24:59 +0000 |
commit | aca2048bcd57937ea1c7b7f0325f25d5b82588db (patch) | |
tree | 74f26cf464e6ce345cb296c07477cb38c088f613 /runtime/doc | |
parent | 16a416cb3c17ed3a7f21d35da5d211fcad947768 (diff) | |
download | rneovim-aca2048bcd57937ea1c7b7f0325f25d5b82588db.tar.gz rneovim-aca2048bcd57937ea1c7b7f0325f25d5b82588db.tar.bz2 rneovim-aca2048bcd57937ea1c7b7f0325f25d5b82588db.zip |
refactor(treesitter): redesign query iterating
Problem:
`TSNode:_rawquery()` is complicated, has known issues and the Lua and
C code is awkwardly coupled (see logic with `active`).
Solution:
- Add `TSQueryCursor` and `TSQueryMatch` bindings.
- Replace `TSNode:_rawquery()` with `TSQueryCursor:next_capture()` and `TSQueryCursor:next_match()`
- Do more stuff in Lua
- API for `Query:iter_captures()` and `Query:iter_matches()` remains the same.
- `treesitter.c` no longer contains any logic related to predicates.
- Add `match_limit` option to `iter_matches()`. Default is still 256.
Diffstat (limited to 'runtime/doc')
-rw-r--r-- | runtime/doc/treesitter.txt | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/runtime/doc/treesitter.txt b/runtime/doc/treesitter.txt index e036df5130..a76fa3c123 100644 --- a/runtime/doc/treesitter.txt +++ b/runtime/doc/treesitter.txt @@ -1152,6 +1152,10 @@ Query:iter_captures({node}, {source}, {start}, {stop}) end < + Note: ~ + • Captures are only returned if the query pattern of a specific capture + contained predicates. + Parameters: ~ • {node} (`TSNode`) under which the search will occur • {source} (`integer|string`) Source buffer or string to extract text @@ -1162,7 +1166,7 @@ Query:iter_captures({node}, {source}, {start}, {stop}) Defaults to `node:end_()`. Return: ~ - (`fun(end_line: integer?): integer, TSNode, vim.treesitter.query.TSMetadata, table<integer, TSNode>`) + (`fun(end_line: integer?): integer, TSNode, vim.treesitter.query.TSMetadata, table<integer,TSNode[]>?`) capture id, capture node, metadata, match *Query:iter_matches()* @@ -1206,6 +1210,8 @@ Query:iter_matches({node}, {source}, {start}, {stop}, {opts}) • max_start_depth (integer) if non-zero, sets the maximum start depth for each match. This is used to prevent traversing too deep into a tree. + • match_limit (integer) Set the maximum number of + in-progress matches (Default: 256). • all (boolean) When set, the returned match table maps capture IDs to a list of nodes. Older versions of iter_matches incorrectly mapped capture IDs to a single |