navigator.lua/lua/navigator/reference.lua

72 lines
2.2 KiB
Lua
Raw Normal View History

2021-04-19 02:56:32 +00:00
local util = require "navigator.util"
local mk_handler = util.mk_handler
2021-04-26 11:45:45 +00:00
local log = util.log
2021-04-19 02:56:32 +00:00
local lsphelper = require "navigator.lspwrapper"
local gui = require "navigator.gui"
2021-05-08 04:54:37 +00:00
local lsp = require "navigator.lspwrapper"
local trace = require"navigator.util".trace
2021-04-19 02:56:32 +00:00
-- local partial = util.partial
-- local cwd = vim.loop.cwd()
2021-04-19 02:56:32 +00:00
-- local lsphelper = require "navigator.lspwrapper"
local locations_to_items = lsphelper.locations_to_items
local ref_view = function(err, locations, ctx, cfg)
2021-04-19 02:56:32 +00:00
local opts = {}
trace("arg1", err, ctx, locations)
log(ctx.api)
trace(locations)
2021-04-19 02:56:32 +00:00
-- log("num", num)
-- log("bfnr", bufnr)
if err ~= nil then
print('lsp ref callback error', err, ctx, vim.inspect(locations))
log('ref callback error, lsp may not ready', err, ctx, vim.inspect(locations))
return
end
if type(locations) ~= 'table' then
log(locations)
log("ctx", ctx)
print("incorrect setup", location)
return
end
2021-04-19 02:56:32 +00:00
if locations == nil or vim.tbl_isempty(locations) then
print "References not found"
return
end
local items, width = locations_to_items(locations)
local ft = vim.api.nvim_buf_get_option(ctx.bufnr, "ft")
local wwidth = vim.api.nvim_get_option("columns")
2021-06-25 10:18:55 +00:00
local mwidth = _NgConfigValues.width
width = math.min(width + 30, 120, math.floor(wwidth * mwidth))
-- log(items)
-- log(width)
local listview = gui.new_list_view({
2021-06-13 04:03:01 +00:00
items = items,
ft = ft,
width = width,
api = "Reference",
enable_preview_edit = true
})
return listview, items, width
end
local M = {}
local ref_hdlr = mk_handler(function(err, locations, ctx, cfg)
trace(err, locations, ctx, cfg)
M.async_hdlr = vim.loop.new_async(vim.schedule_wrap(function()
ref_view(err, locations, ctx, cfg)
2021-04-19 02:56:32 +00:00
M.async_hdlr:close()
end))
M.async_hdlr:send()
end)
2021-04-26 11:45:45 +00:00
local async_reference_request = function()
local ref_params = vim.lsp.util.make_position_params()
2021-05-08 04:54:37 +00:00
ref_params.context = {includeDeclaration = true}
-- lsp.call_async("textDocument/references", ref_params, ref_hdlr) -- return asyncresult, canceller
lsp.call_async("textDocument/definition", ref_params, ref_hdlr) -- return asyncresult, canceller
2021-04-26 11:45:45 +00:00
end
return {reference_handler = ref_hdlr, show_reference = async_reference_request, ref_view = ref_view}