fix: deprecated treesitter API in nvim nightly

This commit is contained in:
Steven Arcangeli 2023-03-25 12:22:36 -07:00
parent 9ee71844b9
commit a6b86fd357
2 changed files with 31 additions and 16 deletions

View file

@ -3,6 +3,19 @@
local _, utils = pcall(require, "nvim-treesitter.utils")
local M = {}
local get_node_text
if vim.treesitter.get_node_text then
-- Neovim 0.9
get_node_text = vim.treesitter.get_node_text
elseif vim.treesitter.query and vim.treesitter.query.get_node_text then
get_node_text = vim.treesitter.query.get_node_text
else
local ts_utils = require("nvim-treesitter.ts_utils")
get_node_text = function(node, buf)
return ts_utils.get_node_text(node, buf)[1]
end
end
local default_methods = {
get_parent = function(stack, match, node)
local ts_utils = require("nvim-treesitter.ts_utils")
@ -71,7 +84,7 @@ M.elixir = {
postprocess = function(bufnr, item, match)
local identifier = (utils.get_at_path(match, "identifier") or {}).node
if identifier then
local name = vim.treesitter.query.get_node_text(identifier, bufnr) or "<parse error>"
local name = get_node_text(identifier, bufnr) or "<parse error>"
if name == "defp" then
item.scope = "private"
end
@ -83,7 +96,7 @@ M.elixir = {
return false
elseif name == "defimpl" then
local protocol = (utils.get_at_path(match, "protocol") or {}).node
local protocol_name = vim.treesitter.query.get_node_text(protocol, bufnr) or "<parse error>"
local protocol_name = get_node_text(protocol, bufnr) or "<parse error>"
item.name = string.format("%s > %s", item.name, protocol_name)
elseif name == "test" then
item.name = string.format("test %s", item.name)
@ -124,7 +137,7 @@ M.go = {
postprocess = function(bufnr, item, match)
local receiver = (utils.get_at_path(match, "receiver") or {}).node
if receiver then
local receiver_text = vim.treesitter.query.get_node_text(receiver, bufnr) or "<parse error>"
local receiver_text = get_node_text(receiver, bufnr) or "<parse error>"
item.name = string.format("%s %s", receiver_text, item.name)
end
return true
@ -161,7 +174,7 @@ M.help = {
if vim.startswith(match.type.node:type(), "h") then
while node and node:type() == "word" do
local row, col = node:start()
table.insert(pieces, 1, vim.treesitter.query.get_node_text(node, bufnr))
table.insert(pieces, 1, get_node_text(node, bufnr))
node = node:prev_sibling()
item.lnum = row + 1
item.col = col
@ -192,9 +205,9 @@ M.rust = {
if item.kind == "Class" then
local trait_node = (utils.get_at_path(match, "trait") or {}).node
local type = (utils.get_at_path(match, "rust_type") or {}).node
local name = vim.treesitter.query.get_node_text(type, bufnr) or "<parse error>"
local name = get_node_text(type, bufnr) or "<parse error>"
if trait_node then
local trait = vim.treesitter.query.get_node_text(trait_node, bufnr) or "<parse error>"
local trait = get_node_text(trait_node, bufnr) or "<parse error>"
name = string.format("%s > %s", name, trait)
end
item.name = name
@ -206,7 +219,7 @@ M.ruby = {
postprocess = function(bufnr, item, match)
local method = (utils.get_at_path(match, "method") or {}).node
if method then
local fn = vim.treesitter.query.get_node_text(method, bufnr) or "<parse error>"
local fn = get_node_text(method, bufnr) or "<parse error>"
if fn ~= item.name then
item.name = fn .. " " .. item.name
end
@ -218,7 +231,7 @@ M.lua = {
postprocess = function(bufnr, item, match)
local method = (utils.get_at_path(match, "method") or {}).node
if method then
local fn = vim.treesitter.query.get_node_text(method, bufnr) or "<parse error>"
local fn = get_node_text(method, bufnr) or "<parse error>"
if fn == "it" or fn == "describe" then
item.name = fn .. " " .. string.sub(item.name, 2, string.len(item.name) - 1)
end
@ -232,11 +245,11 @@ M.javascript = {
local modifier = (utils.get_at_path(match, "modifier") or {}).node
local string = (utils.get_at_path(match, "string") or {}).node
if method and string then
local fn = vim.treesitter.query.get_node_text(method, bufnr) or "<parse error>"
local fn = get_node_text(method, bufnr) or "<parse error>"
if modifier then
fn = fn .. "." .. (vim.treesitter.query.get_node_text(modifier, bufnr) or "<parse error>")
fn = fn .. "." .. (get_node_text(modifier, bufnr) or "<parse error>")
end
local str = vim.treesitter.query.get_node_text(string, bufnr) or "<parse error>"
local str = get_node_text(string, bufnr) or "<parse error>"
item.name = fn .. " " .. str
end
end,
@ -263,7 +276,7 @@ local function c_postprocess(bufnr, item, match)
break
end
end
item.name = vim.treesitter.query.get_node_text(root, bufnr) or "<parse error>"
item.name = get_node_text(root, bufnr) or "<parse error>"
end
end
@ -292,11 +305,11 @@ M.typescript = {
local modifier = (utils.get_at_path(match, "modifier") or {}).node
local string = (utils.get_at_path(match, "string") or {}).node
if method and string then
local fn = vim.treesitter.query.get_node_text(method, bufnr) or "<parse error>"
local fn = get_node_text(method, bufnr) or "<parse error>"
if modifier then
fn = fn .. "." .. (vim.treesitter.query.get_node_text(modifier, bufnr) or "<parse error>")
fn = fn .. "." .. (get_node_text(modifier, bufnr) or "<parse error>")
end
local str = vim.treesitter.query.get_node_text(string, bufnr) or "<parse error>"
local str = get_node_text(string, bufnr) or "<parse error>"
item.name = fn .. " " .. str
end
end,

View file

@ -33,7 +33,9 @@ M.fetch_symbols_sync = function(bufnr)
local parsers = require("nvim-treesitter.parsers")
local query = require("nvim-treesitter.query")
local get_node_text
if vim.treesitter.query and vim.treesitter.query.get_node_text then
if vim.treesitter.get_node_text then
get_node_text = vim.treesitter.get_node_text
elseif vim.treesitter.query and vim.treesitter.query.get_node_text then
get_node_text = vim.treesitter.query.get_node_text
else
local ts_utils = require("nvim-treesitter.ts_utils")