You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
841 B
Lua

local ts_query = require 'nvim-treesitter.query'
local parsers = require 'nvim-treesitter.parsers'
local locals = require 'nvim-treesitter.locals'
local M = {}
function M.parse(bufnr, query, lang_tree)
lang_tree = lang_tree or parsers.get_parser(bufnr)
local success, parsed_query = pcall(function()
return vim.treesitter.parse_query(lang_tree:lang(), query)
end)
if not success then return {} end
local results = {}
for _, tree in ipairs(lang_tree:trees()) do
local root = tree:root()
local start_row, _, end_row, _ = root:range()
for match in ts_query.iter_prepared_matches(parsed_query, root, bufnr, start_row, end_row) do
locals.recurse_local_nodes(match, function(_, node, path)
table.insert(results, { node = node, tag = path })
end)
end
end
return results
end
return M