summaryrefslogtreecommitdiff
path: root/lua/nvim-treesitter/query.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/nvim-treesitter/query.lua')
-rw-r--r--lua/nvim-treesitter/query.lua30
1 files changed, 30 insertions, 0 deletions
diff --git a/lua/nvim-treesitter/query.lua b/lua/nvim-treesitter/query.lua
index ec93d5bb..4a2ce57d 100644
--- a/lua/nvim-treesitter/query.lua
+++ b/lua/nvim-treesitter/query.lua
@@ -213,6 +213,36 @@ function M.get_capture_matches(bufnr, capture_string, query_group)
return matches
end
+function M.find_best_match(bufnr, capture_string, query_group, filter_predicate, scoring_function)
+ if not string.sub(capture_string, 1,2) == '@' then
+ api.nvim_err_writeln('capture_string must start with "@"')
+ return
+ end
+
+ --remove leading "@"
+ capture_string = string.sub(capture_string, 2)
+
+ local best
+ local best_score
+
+ for maybe_match in M.iter_group_results(bufnr, query_group) do
+ local match = utils.get_at_path(maybe_match, capture_string)
+
+ if match and filter_predicate(match) then
+ local current_score = scoring_function(match)
+ if not best then
+ best = match
+ best_score = current_score
+ end
+ if current_score > best_score then
+ best = match
+ best_score = current_score
+ end
+ end
+ end
+ return best
+end
+
-- Iterates matches from a query file.
-- @param bufnr the buffer
-- @param query_group the query file to use