commit 4c66f5ff97a52fbc933fdbe1907c4b960d5a7403
parent e1d5ad1cb87d43c3d75619e239312d4ab2029b45
Author: figsoda <figsoda@pm.me>
Date: Mon, 26 Dec 2022 16:11:45 -0500
feat(treesitter): respect metadata[id].range for offset!
Diffstat:
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua
@@ -445,9 +445,11 @@ local directive_handlers = {
['offset!'] = function(match, _, _, pred, metadata)
---@cast pred integer[]
local capture_id = pred[2]
- local offset_node = match[capture_id]
- local range = { offset_node:range() }
- ---@cast range integer[] bug in sumneko
+ if not metadata[capture_id] then
+ metadata[capture_id] = {}
+ end
+
+ local range = metadata[capture_id].range or { match[capture_id]:range() }
local start_row_offset = pred[3] or 0
local start_col_offset = pred[4] or 0
local end_row_offset = pred[5] or 0
@@ -460,9 +462,6 @@ local directive_handlers = {
-- If this produces an invalid range, we just skip it.
if range[1] < range[3] or (range[1] == range[3] and range[2] <= range[4]) then
- if not metadata[capture_id] then
- metadata[capture_id] = {}
- end
metadata[capture_id].range = range
end
end,