diff options
Diffstat (limited to 'runtime/lua/vim/treesitter/query.lua')
-rw-r--r-- | runtime/lua/vim/treesitter/query.lua | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua index 9d1f265e54..e49f54681d 100644 --- a/runtime/lua/vim/treesitter/query.lua +++ b/runtime/lua/vim/treesitter/query.lua @@ -340,6 +340,19 @@ function Query:apply_directives(match, pattern, source, metadata) end end + +--- Returns the start and stop value if set else the node's range. +-- When the node's range is used, the stop is incremented by 1 +-- to make the search inclusive. +local function value_or_node_range(start, stop, node) + if start == nil and stop == nil then + local node_start, _, node_stop, _ = node:range() + return node_start, node_stop + 1 -- Make stop inclusive + end + + return start, stop +end + --- Iterates of the captures of self on a given range. -- -- @param node The node under witch the search will occur @@ -354,10 +367,7 @@ function Query:iter_captures(node, source, start, stop) source = vim.api.nvim_get_current_buf() end - if start == nil and stop == nil then - start, _, stop, _ = node:range() - stop = stop + 1 -- Make stop inclusive - end + start, stop = value_or_node_range(start, stop, node) local raw_iter = node:_rawquery(self.query, true, start, stop) local function iter() @@ -392,10 +402,7 @@ function Query:iter_matches(node, source, start, stop) source = vim.api.nvim_get_current_buf() end - if start == nil and stop == nil then - start, _, stop, _ = node:range() - stop = stop + 1 -- Make stop inclusive - end + start, stop = value_or_node_range(start, stop, node) local raw_iter = node:_rawquery(self.query, false, start, stop) local function iter() |