aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter/query.lua
diff options
context:
space:
mode:
authorStephan Seitz <stephan.seitz@fau.de>2022-07-14 12:18:03 +0200
committerGitHub <noreply@github.com>2022-07-14 12:18:03 +0200
commitddaef0618dbe4f55ed5eed50440ff6d06e48f02a (patch)
treedfc6e618d224e81403446417991a18a90c009957 /runtime/lua/vim/treesitter/query.lua
parentc6f0be116ec7481f16341552940764a1f3c6d1c7 (diff)
downloadrneovim-ddaef0618dbe4f55ed5eed50440ff6d06e48f02a.tar.gz
rneovim-ddaef0618dbe4f55ed5eed50440ff6d06e48f02a.tar.bz2
rneovim-ddaef0618dbe4f55ed5eed50440ff6d06e48f02a.zip
fix(treesitter): don't error when node argument of predicate is nil (#19355)
When the node mentioned in a predicate is not required for the query then predicates putting restrictions on that node shouldn't run. Fixes https://github.com/nvim-treesitter/nvim-treesitter/issues/2600
Diffstat (limited to 'runtime/lua/vim/treesitter/query.lua')
-rw-r--r--runtime/lua/vim/treesitter/query.lua15
1 files changed, 15 insertions, 0 deletions
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua
index 0cc2b6d2a4..103e85abfd 100644
--- a/runtime/lua/vim/treesitter/query.lua
+++ b/runtime/lua/vim/treesitter/query.lua
@@ -221,6 +221,9 @@ end
local predicate_handlers = {
['eq?'] = function(match, _, source, predicate)
local node = match[predicate[2]]
+ if not node then
+ return true
+ end
local node_text = M.get_node_text(node, source)
local str
@@ -241,6 +244,9 @@ local predicate_handlers = {
['lua-match?'] = function(match, _, source, predicate)
local node = match[predicate[2]]
+ if not node then
+ return true
+ end
local regex = predicate[3]
return string.find(M.get_node_text(node, source), regex)
end,
@@ -265,6 +271,9 @@ local predicate_handlers = {
return function(match, _, source, pred)
local node = match[pred[2]]
+ if not node then
+ return true
+ end
local regex = compiled_vim_regexes[pred[3]]
return regex:match_str(M.get_node_text(node, source))
end
@@ -272,6 +281,9 @@ local predicate_handlers = {
['contains?'] = function(match, _, source, predicate)
local node = match[predicate[2]]
+ if not node then
+ return true
+ end
local node_text = M.get_node_text(node, source)
for i = 3, #predicate do
@@ -285,6 +297,9 @@ local predicate_handlers = {
['any-of?'] = function(match, _, source, predicate)
local node = match[predicate[2]]
+ if not node then
+ return true
+ end
local node_text = M.get_node_text(node, source)
-- Since 'predicate' will not be used by callers of this function, use it