summaryrefslogtreecommitdiff
path: root/lua/nvim-treesitter/query.lua
diff options
context:
space:
mode:
authorStephan Seitz <stephan.seitz@fau.de>2020-07-20 17:48:58 +0200
committerThomas Vigouroux <39092278+vigoux@users.noreply.github.com>2020-07-27 10:15:33 +0200
commit5462fc92cbb6e94d93a7e20d15f81f68d918f71d (patch)
treebad50530f61969a2f2691bcd487b4343a2925aa6 /lua/nvim-treesitter/query.lua
parent6f01384cb2d60db4b5990085422711c0a764ed7f (diff)
Add predicates module
Diffstat (limited to 'lua/nvim-treesitter/query.lua')
-rw-r--r--lua/nvim-treesitter/query.lua13
1 files changed, 12 insertions, 1 deletions
diff --git a/lua/nvim-treesitter/query.lua b/lua/nvim-treesitter/query.lua
index 896b11da..678c7b68 100644
--- a/lua/nvim-treesitter/query.lua
+++ b/lua/nvim-treesitter/query.lua
@@ -2,6 +2,7 @@ local api = vim.api
local ts = vim.treesitter
local utils = require'nvim-treesitter.utils'
local parsers = require'nvim-treesitter.parsers'
+local predicates = require'nvim-treesitter.query_predicates'
local M = {}
@@ -129,7 +130,7 @@ function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)
local matches = query:iter_matches(qnode, bufnr, start_row, end_row)
- return function()
+ local function iterator()
local pattern, match = matches()
if pattern ~= nil then
local prepared_match = {}
@@ -147,15 +148,25 @@ function M.iter_prepared_matches(query, qnode, bufnr, start_row, end_row)
local preds = query.info.patterns[pattern]
if preds then
for _, pred in pairs(preds) do
+ -- functions
if pred[1] == "set!" and type(pred[2]) == "string" then
insert_to_path(prepared_match, split(pred[2]), pred[3])
end
+
+ -- predicates
+ if type(pred[1]) == 'string' then
+ if not predicates.check_predicate(query, prepared_match, pred) or
+ not predicates.check_negated_predicate(query, prepared_match, pred) then
+ return iterator()
+ end
+ end
end
end
return prepared_match
end
end
+ return iterator
end
--- Return all nodes corresponding to a specific capture path (like @definition.var, @reference.type)