dotfiles/.config/nvim/lua/null/lsp-diagnostics.lua

57 lines
1.5 KiB
Lua

-- REF: https://github.com/lukas-reineke/dotfiles/blob/master/vim/lua/lsp/diagnostics.lua
local M = {}
local serverity_map = {
"DiagnosticError",
"DiagnosticWarn",
"DiagnosticInfo",
"DiagnosticHint",
}
local icon_map = {
"",
"",
"",
"",
}
local function source_string(source, code)
if code then
return string.format(" [%s %s]", source, code)
else
return string.format(" [%s]", source)
end
end
M.line_diagnostics = function()
local bufnr, lnum = unpack(vim.fn.getcurpos())
local diagnostics = vim.diagnostic.get(bufnr, { lnum = lnum - 1, })
if vim.tbl_isempty(diagnostics) then
return
end
local lines = {}
for _, diagnostic in ipairs(diagnostics) do
table.insert(
lines,
icon_map[diagnostic.severity]
.. " "
.. diagnostic.message:gsub("\n", " ")
.. source_string(diagnostic.source, diagnostic.code)
)
end
local floating_bufnr, _ = vim.lsp.util.open_floating_preview(lines, "plaintext", {
border = vim.g.floating_window_border_dark,
focus_id = "line",
})
for i, diagnostic in ipairs(diagnostics) do
local message_length = #lines[i] - #source_string(diagnostic.source, diagnostic.code)
vim.api.nvim_buf_add_highlight(floating_bufnr, -1, serverity_map[diagnostic.severity], i - 1, 0, message_length)
vim.api.nvim_buf_add_highlight(floating_bufnr, -1, "DiagnosticSource", i - 1, message_length, -1)
end
end
return M