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.lua20
1 files changed, 14 insertions, 6 deletions
diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua
index eef840bee5..41c8bd36ec 100644
--- a/runtime/lua/vim/lsp/diagnostic.lua
+++ b/runtime/lua/vim/lsp/diagnostic.lua
@@ -52,7 +52,7 @@ end
---@private
local function line_byte_from_position(lines, lnum, col, offset_encoding)
- if offset_encoding == "utf-8" then
+ if not lines or offset_encoding == "utf-8" then
return col
end
@@ -73,7 +73,19 @@ local function get_buf_lines(bufnr)
local filename = vim.api.nvim_buf_get_name(bufnr)
local f = io.open(filename)
- local lines = vim.split(f:read("*a"), "\n")
+ if not f then
+ return
+ end
+
+ local content = f:read("*a")
+ if not content then
+ -- Some LSP servers report diagnostics at a directory level, in which case
+ -- io.read() returns nil
+ f:close()
+ return
+ end
+
+ local lines = vim.split(content, "\n")
f:close()
return lines
end
@@ -183,10 +195,6 @@ function M.on_publish_diagnostics(_, result, ctx, config)
local diagnostics = result.diagnostics
if config then
- if vim.F.if_nil(config.severity_sort, false) then
- table.sort(diagnostics, function(a, b) return a.severity > b.severity end)
- end
-
for _, opt in pairs(config) do
if type(opt) == 'table' then
if not opt.severity and opt.severity_limit then