aboutsummaryrefslogtreecommitdiff
path: root/runtime/doc
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2024-03-18 23:19:01 +0000
committerLewis Russell <me@lewisr.dev>2024-03-19 14:24:59 +0000
commitaca2048bcd57937ea1c7b7f0325f25d5b82588db (patch)
tree74f26cf464e6ce345cb296c07477cb38c088f613 /runtime/doc
parent16a416cb3c17ed3a7f21d35da5d211fcad947768 (diff)
downloadrneovim-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.txt8
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