From 17b7968f02bca309bb2e7b00752667baa6b4d765 Mon Sep 17 00:00:00 2001 From: Gregory Anders <8965202+gpanders@users.noreply.github.com> Date: Tue, 21 Sep 2021 16:27:12 -0600 Subject: 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. --- test/functional/plugin/lsp/diagnostic_spec.lua | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'test/functional') diff --git a/test/functional/plugin/lsp/diagnostic_spec.lua b/test/functional/plugin/lsp/diagnostic_spec.lua index 353de667ea..243ad6bdb8 100644 --- a/test/functional/plugin/lsp/diagnostic_spec.lua +++ b/test/functional/plugin/lsp/diagnostic_spec.lua @@ -428,6 +428,32 @@ describe('vim.lsp.diagnostic', function() 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) describe("vim.lsp.diagnostic.get_line_diagnostics", function() -- cgit