update
This commit is contained in:
44
lua/util/open-docs-in-split.lua
Normal file
44
lua/util/open-docs-in-split.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
function open_doc_in_vsplit()
|
||||
local word = vim.fn.expand("<cword>")
|
||||
if word == "" then
|
||||
vim.notify("No word under cursor", vim.log.levels.INFO)
|
||||
return
|
||||
end
|
||||
|
||||
-- Try to get LSP hover documentation
|
||||
local params = vim.lsp.util.make_position_params()
|
||||
local results = vim.lsp.buf_request_sync(0, "textDocument/hover", params, 1000) or {}
|
||||
local doc_lines = nil
|
||||
|
||||
for _, res in pairs(results) do
|
||||
local contents = res.result and res.result.contents
|
||||
if contents then
|
||||
doc_lines = vim.lsp.util.convert_input_to_markdown_lines(contents)
|
||||
doc_lines = vim.lsp.util.trim_empty_lines(doc_lines)
|
||||
if #doc_lines > 0 then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if doc_lines and #doc_lines > 0 then
|
||||
-- Open a new vertical split for LSP hover documentation
|
||||
vim.cmd("vnew")
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
-- Set the buffer to unmodifiable scratch buffer
|
||||
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, doc_lines)
|
||||
vim.bo[bufnr].modifiable = false
|
||||
vim.bo[bufnr].bufhidden = "wipe"
|
||||
vim.bo[bufnr].filetype = "markdown"
|
||||
return
|
||||
end
|
||||
|
||||
-- Fallback to vim help command
|
||||
local help_cmd = "vertical help " .. word
|
||||
local ok, _ = pcall(vim.cmd, help_cmd)
|
||||
if not ok then
|
||||
vim.notify("No documentation available for '" .. word .. "'", vim.log.levels.INFO)
|
||||
end
|
||||
end
|
||||
|
||||
return open_doc_in_vsplit
|
||||
Reference in New Issue
Block a user