mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 05:05:00 -07:00
fix(diagnostic): preserve fields from LSP diagnostics via user_data (#15735)
* preserve fields from LSP diagnostics via adding a user_data table to the diagnostic, which can hold arbitrary data in addition to the lsp diagnostic information.
This commit is contained in:
parent
8164adc144
commit
17b7968f02
@ -102,7 +102,16 @@ local function diagnostic_lsp_to_vim(diagnostics, bufnr, client_id)
|
|||||||
end_lnum = _end.line,
|
end_lnum = _end.line,
|
||||||
end_col = line_byte_from_position(buf_lines, _end.line, _end.character, offset_encoding),
|
end_col = line_byte_from_position(buf_lines, _end.line, _end.character, offset_encoding),
|
||||||
severity = severity_lsp_to_vim(diagnostic.severity),
|
severity = severity_lsp_to_vim(diagnostic.severity),
|
||||||
message = diagnostic.message
|
message = diagnostic.message,
|
||||||
|
user_data = {
|
||||||
|
lsp = {
|
||||||
|
code = diagnostic.code,
|
||||||
|
codeDescription = diagnostic.codeDescription,
|
||||||
|
tags = diagnostic.tags,
|
||||||
|
relatedInformation = diagnostic.relatedInformation,
|
||||||
|
data = diagnostic.data,
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
end, diagnostics)
|
end, diagnostics)
|
||||||
end
|
end
|
||||||
@ -110,7 +119,7 @@ end
|
|||||||
---@private
|
---@private
|
||||||
local function diagnostic_vim_to_lsp(diagnostics)
|
local function diagnostic_vim_to_lsp(diagnostics)
|
||||||
return vim.tbl_map(function(diagnostic)
|
return vim.tbl_map(function(diagnostic)
|
||||||
return {
|
return vim.tbl_extend("error", {
|
||||||
range = {
|
range = {
|
||||||
start = {
|
start = {
|
||||||
line = diagnostic.lnum,
|
line = diagnostic.lnum,
|
||||||
@ -123,7 +132,7 @@ local function diagnostic_vim_to_lsp(diagnostics)
|
|||||||
},
|
},
|
||||||
severity = severity_vim_to_lsp(diagnostic.severity),
|
severity = severity_vim_to_lsp(diagnostic.severity),
|
||||||
message = diagnostic.message,
|
message = diagnostic.message,
|
||||||
}
|
}, diagnostic.user_data and (diagnostic.user_data.lsp or {}) or {})
|
||||||
end, diagnostics)
|
end, diagnostics)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -428,6 +428,32 @@ describe('vim.lsp.diagnostic', function()
|
|||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('maintains LSP information when translating diagnostics', function()
|
||||||
|
local result = exec_lua [[
|
||||||
|
local diagnostics = {
|
||||||
|
make_error("Error 1", 1, 1, 1, 5),
|
||||||
|
}
|
||||||
|
|
||||||
|
diagnostics[1].code = 42
|
||||||
|
diagnostics[1].tags = {"foo", "bar"}
|
||||||
|
diagnostics[1].data = "Hello world"
|
||||||
|
|
||||||
|
vim.lsp.diagnostic.on_publish_diagnostics(nil, {
|
||||||
|
uri = fake_uri,
|
||||||
|
diagnostics = diagnostics,
|
||||||
|
}, {client_id=1})
|
||||||
|
|
||||||
|
return {
|
||||||
|
vim.diagnostic.get(diagnostic_bufnr, {lnum=1})[1],
|
||||||
|
vim.lsp.diagnostic.get_line_diagnostics(diagnostic_bufnr, 1)[1],
|
||||||
|
}
|
||||||
|
]]
|
||||||
|
eq({code = 42, tags = {"foo", "bar"}, data = "Hello world"}, result[1].user_data.lsp)
|
||||||
|
eq(42, result[2].code)
|
||||||
|
eq({"foo", "bar"}, result[2].tags)
|
||||||
|
eq("Hello world", result[2].data)
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe("vim.lsp.diagnostic.get_line_diagnostics", function()
|
describe("vim.lsp.diagnostic.get_line_diagnostics", function()
|
||||||
|
Loading…
Reference in New Issue
Block a user