aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/treesitter
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-05-13 12:56:21 +0200
committerChristian Clason <c.clason@uni-graz.at>2023-05-15 14:13:42 +0200
commit9ff59517cbf309d31f979a49b7dc82b237ecfcc4 (patch)
tree68ce6e9f0b5cfe37b338a549fd2989ac08fdf37c /runtime/lua/vim/treesitter
parentc97de026e357dec0bed034af3b54abf10966200b (diff)
downloadrneovim-9ff59517cbf309d31f979a49b7dc82b237ecfcc4.tar.gz
rneovim-9ff59517cbf309d31f979a49b7dc82b237ecfcc4.tar.bz2
rneovim-9ff59517cbf309d31f979a49b7dc82b237ecfcc4.zip
fix(treesitter): update c queries
Diffstat (limited to 'runtime/lua/vim/treesitter')
-rw-r--r--runtime/lua/vim/treesitter/query.lua33
1 files changed, 33 insertions, 0 deletions
diff --git a/runtime/lua/vim/treesitter/query.lua b/runtime/lua/vim/treesitter/query.lua
index 75e5bf8870..73b561c777 100644
--- a/runtime/lua/vim/treesitter/query.lua
+++ b/runtime/lua/vim/treesitter/query.lua
@@ -382,6 +382,39 @@ local predicate_handlers = {
return string_set[node_text]
end,
+
+ ['has-ancestor?'] = function(match, _, _, predicate)
+ local node = match[predicate[2]]
+ if not node then
+ return true
+ end
+
+ local ancestor_types = {}
+ for _, type in ipairs({ unpack(predicate, 3) }) do
+ ancestor_types[type] = true
+ end
+
+ node = node:parent()
+ while node do
+ if ancestor_types[node:type()] then
+ return true
+ end
+ node = node:parent()
+ end
+ return false
+ end,
+
+ ['has-parent?'] = function(match, _, _, predicate)
+ local node = match[predicate[2]]
+ if not node then
+ return true
+ end
+
+ if vim.list_contains({ unpack(predicate, 3) }, node:parent():type()) then
+ return true
+ end
+ return false
+ end,
}
-- As we provide lua-match? also expose vim-match?