aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/diagnostic.lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/vim/lsp/diagnostic.lua')
-rw-r--r--runtime/lua/vim/lsp/diagnostic.lua33
1 files changed, 20 insertions, 13 deletions
diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua
index 08cea13548..c10312484b 100644
--- a/runtime/lua/vim/lsp/diagnostic.lua
+++ b/runtime/lua/vim/lsp/diagnostic.lua
@@ -110,6 +110,14 @@ local function diagnostic_lsp_to_vim(diagnostics, bufnr, client_id)
return vim.tbl_map(function(diagnostic)
local start = diagnostic.range.start
local _end = diagnostic.range['end']
+ local message = diagnostic.message
+ if type(message) ~= 'string' then
+ vim.notify_once(
+ string.format('Unsupported Markup message from LSP client %d', client_id),
+ vim.lsp.log_levels.ERROR
+ )
+ message = diagnostic.message.value
+ end
--- @type vim.Diagnostic
return {
lnum = start.line,
@@ -117,18 +125,12 @@ local function diagnostic_lsp_to_vim(diagnostics, bufnr, client_id)
end_lnum = _end.line,
end_col = line_byte_from_position(buf_lines, _end.line, _end.character, offset_encoding),
severity = severity_lsp_to_vim(diagnostic.severity),
- message = diagnostic.message,
+ message = message,
source = diagnostic.source,
code = diagnostic.code,
_tags = tags_lsp_to_vim(diagnostic, client_id),
user_data = {
- lsp = {
- -- usage of user_data.lsp.code is deprecated in favor of the top-level code field
- code = diagnostic.code,
- codeDescription = diagnostic.codeDescription,
- relatedInformation = diagnostic.relatedInformation,
- data = diagnostic.data,
- },
+ lsp = diagnostic,
},
}
end, diagnostics)
@@ -151,14 +153,18 @@ local function tags_vim_to_lsp(diagnostic)
return tags
end
+--- Converts the input `vim.Diagnostic`s to LSP diagnostics.
--- @param diagnostics vim.Diagnostic[]
--- @return lsp.Diagnostic[]
-local function diagnostic_vim_to_lsp(diagnostics)
+function M.from(diagnostics)
---@param diagnostic vim.Diagnostic
---@return lsp.Diagnostic
return vim.tbl_map(function(diagnostic)
- return vim.tbl_extend('keep', {
- -- "keep" the below fields over any duplicate fields in diagnostic.user_data.lsp
+ local user_data = diagnostic.user_data or {}
+ if user_data.lsp then
+ return user_data.lsp
+ end
+ return {
range = {
start = {
line = diagnostic.lnum,
@@ -174,7 +180,7 @@ local function diagnostic_vim_to_lsp(diagnostics)
source = diagnostic.source,
code = diagnostic.code,
tags = tags_vim_to_lsp(diagnostic),
- }, diagnostic.user_data and (diagnostic.user_data.lsp or {}) or {})
+ }
end, diagnostics)
end
@@ -366,6 +372,7 @@ end
--- Structured: { [1] = {...}, [5] = {.... } }
---@private
function M.get_line_diagnostics(bufnr, line_nr, opts, client_id)
+ vim.deprecate('vim.lsp.diagnostic.get_line_diagnostics', 'vim.diagnostic.get', '0.12')
convert_severity(opts)
local diag_opts = {} --- @type vim.diagnostic.GetOpts
@@ -379,7 +386,7 @@ function M.get_line_diagnostics(bufnr, line_nr, opts, client_id)
diag_opts.lnum = line_nr or (api.nvim_win_get_cursor(0)[1] - 1)
- return diagnostic_vim_to_lsp(vim.diagnostic.get(bufnr, diag_opts))
+ return M.from(vim.diagnostic.get(bufnr, diag_opts))
end
--- Clear diagnostics from pull based clients