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.
ts-playground/lua/nvim_treesitter_playground_...

50 lines
1.4 KiB
Lua

local query_linter = require "nvim-treesitter-playground.query_linter"
local tsc = require "vim.treesitter.query"
local M = {}
function M.omnifunc(findstart, base)
if findstart == 1 then
local start = vim.fn.col "." - 1
local result = vim.fn.matchstrpos(vim.fn.getline("."):sub(1, start), '\\v(["#\\-]|\\w)*$')
return result[2]
end
local buf = vim.api.nvim_get_current_buf()
local query_lang = query_linter.guess_query_lang(buf)
local ok, parser_info = pcall(vim.treesitter.language.inspect, query_lang)
if ok then
local items = {}
for _, f in pairs(parser_info.fields) do
if f:find(base, 1, true) == 1 then
table.insert(items, f .. ":")
end
end
for _, p in pairs(tsc.list_predicates()) do
local text = "#" .. p
local found = text:find(base, 1, true)
if found and found <= 2 then -- with or without '#'
table.insert(items, text)
end
text = "#not-" .. p
found = text:find(base, 1, true)
if found and found <= 2 then -- with or without '#'
table.insert(items, text)
end
end
for _, s in pairs(parser_info.symbols) do
local text = s[2] and s[1] or '"' .. vim.fn.escape(s[1], "\\") .. '"'
if text:find(base, 1, true) == 1 then
table.insert(items, text)
end
end
return { words = items, refresh = "always" }
else
return -2
end
end
return M