57 lines
1.8 KiB
Lua
57 lines
1.8 KiB
Lua
-- hdlr alternatively, use lua vim.lsp.diagnostic.set_loclist({open_loclist = false})
|
|
-- true to open loclist
|
|
-- local diag_hdlr = function(err, method, result, client_id, bufnr, config)
|
|
-- New signature on_publish_diagnostics({_}, {result}, {ctx}, {config})
|
|
debug = debug or nil
|
|
local vfn = vim.fn
|
|
local nvim_0_6 = (vfn.has('nvim-0.6') == 1)
|
|
|
|
local function hdlr(result)
|
|
if result and result.diagnostics then
|
|
local item_list = {}
|
|
local s = result.uri
|
|
local fname = s
|
|
for _, v in ipairs(result.diagnostics) do
|
|
local _, j = string.find(s, 'file://')
|
|
if j then
|
|
fname = string.sub(s, j + 1)
|
|
end
|
|
table.insert(item_list, {
|
|
filename = fname,
|
|
lnum = v.range.start.line + 1,
|
|
col = v.range.start.character + 1,
|
|
text = v.message,
|
|
})
|
|
end
|
|
local old_items = vfn.getqflist()
|
|
for _, old_item in ipairs(old_items) do
|
|
if vim.uri_from_bufnr(old_item.bufnr) ~= result.uri then
|
|
table.insert(item_list, old_item)
|
|
end
|
|
end
|
|
vfn.setqflist({}, ' ', { title = 'LSP', items = item_list })
|
|
end
|
|
end
|
|
|
|
local diag_hdlr_0_6 = function(err, result, ctx, config)
|
|
-- vim.lsp.diagnostic.clear(vfn.bufnr(), client.id, nil, nil)
|
|
vim.lsp.diagnostic.on_publish_diagnostics(err, result, ctx, config)
|
|
hdlr(result)
|
|
end
|
|
|
|
if not nvim_0_6 then
|
|
vim.notify('nvim 0.6 required for lsp diagnostics')
|
|
end
|
|
|
|
vim.lsp.handlers['textDocument/publishDiagnostics'] = vim.lsp.with(diag_hdlr_0_6, {
|
|
-- Enable underline, use default values
|
|
underline = _GO_NVIM_CFG.lsp_diag_underline,
|
|
-- Enable virtual text, override spacing to 0
|
|
virtual_text = _GO_NVIM_CFG.lsp_diag_virtual_text,
|
|
-- Use a function to dynamically turn signs off
|
|
-- and on, using buffer local variables
|
|
signs = _GO_NVIM_CFG.lsp_diag_signs,
|
|
-- Disable a feature
|
|
update_in_insert = _GO_NVIM_CFG.lsp_diag_update_in_insert,
|
|
})
|