using open_floating_preview API as focus preview deprecated

neovim_0_5
ray-x 3 years ago
parent 6a15e6838d
commit 9788bbaf54

@ -31,22 +31,30 @@ local function definition_hdlr(err, _, locations, _, bufnr)
end
end
local function get_symbol()
local currentWord = vim.fn.expand('<cword>')
return currentWord
end
local function def_preview(timeout_ms)
assert(#vim.lsp.buf_get_clients() > 0, "Must have a client running")
local method = "textDocument/definition"
local params = vim.lsp.util.make_position_params()
local result = vim.lsp.buf_request_sync(0, method, params, timeout_ms or 2000)
local result = vim.lsp.buf_request_sync(0, method, params, timeout_ms or 1000)
if result == nil or vim.tbl_isempty(result) then
print("No result found: " .. method)
return nil
end
log(result)
local data = {}
-- result = {vim.tbl_deep_extend("force", {}, unpack(result))}
-- log("def-preview", result)
for key, value in pairs(result) do
if result[key] ~= nil then table.insert(data, value.result[1]) end
if result[key] ~= nil then
table.insert(data, value.result[1])
end
end
local range = data[1].targetRange or data[1].range
@ -55,9 +63,13 @@ local function def_preview(timeout_ms)
row = math.max(row - 3, 1)
local delta = range.start.line - row + 1
local uri = data[1].uri or data[1].targetUri
if not uri then return end
if not uri then
return
end
local bufnr = vim.uri_to_bufnr(uri)
if not vim.api.nvim_buf_is_loaded(bufnr) then vim.fn.bufload(bufnr) end
if not vim.api.nvim_buf_is_loaded(bufnr) then
vim.fn.bufload(bufnr)
end
-- TODO: 12 should be an option
local definition = vim.api.nvim_buf_get_lines(bufnr, row, range["end"].line + 12, false)
local def_line = vim.api.nvim_buf_get_lines(bufnr, range.start.line, range.start.line + 1, false)
@ -69,7 +81,14 @@ local function def_preview(timeout_ms)
break
end
end
definition = vim.list_extend({"" .. "Definition: "}, definition)
local width = 40
for key, value in pairs(definition) do
log(key, value, width)
width = math.max(width, #value)
width = math.min(90, width)
end
definition = vim.list_extend({"  [" .. get_symbol() .. "] Definition: "}, definition)
local filetype = vim.api.nvim_buf_get_option(bufnr, "filetype")
-- TODO multiple resuts?
@ -77,6 +96,7 @@ local function def_preview(timeout_ms)
relative = "cursor",
style = "minimal",
ft = filetype,
width = width,
data = definition,
enter = true
}

@ -16,7 +16,7 @@ local ts_enabled, _ = pcall(require, "nvim-treesitter.locals")
local TS_analysis_enabled = require"navigator".config_values().treesitter_analysis
-- extract symbol from range
local function get_symbol(text, range)
function M.get_symbol(text, range)
if range == nil then
return ""
end
@ -282,7 +282,7 @@ function M.locations_to_items(locations)
item.call_by = find_ts_func_by_range(funcs, item.range)
item.rpath = util.get_relative_path(cwd, item.filename)
width = math.max(width, #item.text)
item.symbol_name = get_symbol(item.text, item.range)
item.symbol_name = M.get_symbol(item.text, item.range)
item.lhs = check_lhs(item.text, item.symbol_name)
table.insert(items, item)

@ -18,7 +18,9 @@ local match_parameter = function(result)
return result
end
if signature.parameters == nil then return end
if signature.parameters == nil then
return
end
if #signature.parameters < 2 or activeParameter + 1 > #signature.parameters then
return result
@ -29,15 +31,15 @@ local match_parameter = function(result)
local label = signature.label
if type(nextParameter.label) == "table" then -- label = {2, 4} c style
local range = nextParameter.label
label =
label:sub(1, range[1]) ..
[[`]] .. label:sub(range[1] + 1, range[2]) .. [[`]] .. label:sub(range[2] + 1, #label + 1)
label = label:sub(1, range[1]) .. [[`]] .. label:sub(range[1] + 1, range[2]) .. [[`]]
.. label:sub(range[2] + 1, #label + 1)
signature.label = label
else
if type(nextParameter.label) == "string" then -- label = 'par1 int'
local i, j = label:find(nextParameter.label, 1, true)
if i ~= nil then
label = label:sub(1, i - 1) .. [[`]] .. label:sub(i, j) .. [[`]] .. label:sub(j + 1, #label + 1)
label = label:sub(1, i - 1) .. [[`]] .. label:sub(i, j) .. [[`]]
.. label:sub(j + 1, #label + 1)
signature.label = label
end
end
@ -54,12 +56,10 @@ local function signature_handler(err, method, result, _, bufnr, config)
if vim.tbl_isempty(lines) then
return
end
vim.lsp.util.focusable_preview(
method .. "lsp_signature",
function()
lines = vim.lsp.util.trim_empty_lines(lines)
return lines, vim.lsp.util.try_trim_markdown_code_blocks(lines)
end
)
local syntax = vim.lsp.util.try_trim_markdown_code_blocks(lines)
config.focus_id = method .. "lsp_signature"
vim.lsp.util.open_floating_preview(lines, syntax, config)
end
return {signature_handler = signature_handler}

Loading…
Cancel
Save