diff options
author | Folke Lemaitre <folke.lemaitre@gmail.com> | 2021-07-08 17:40:41 +0200 |
---|---|---|
committer | Sean Dewar <seandewar@users.noreply.github.com> | 2021-09-16 14:26:05 +0100 |
commit | eaa1c4737792b45ba3411bdf93f74b28c1a37bc6 (patch) | |
tree | 99b8656cd0789529911e9a7c3677c8d00fb99dfa | |
parent | 942b16adf7312c243fb27e579fa5da794fa0f502 (diff) | |
download | rneovim-eaa1c4737792b45ba3411bdf93f74b28c1a37bc6.tar.gz rneovim-eaa1c4737792b45ba3411bdf93f74b28c1a37bc6.tar.bz2 rneovim-eaa1c4737792b45ba3411bdf93f74b28c1a37bc6.zip |
backport: fix(lsp): restore diagnostics extmarks that were moved to the last edit line (#15023)
-rw-r--r-- | runtime/lua/vim/lsp/diagnostic.lua | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/runtime/lua/vim/lsp/diagnostic.lua b/runtime/lua/vim/lsp/diagnostic.lua index c67ea0c07a..c83e29aa64 100644 --- a/runtime/lua/vim/lsp/diagnostic.lua +++ b/runtime/lua/vim/lsp/diagnostic.lua @@ -1042,16 +1042,17 @@ function M.on_publish_diagnostics(_, _, params, client_id, _, config) end -- restores the extmarks set by M.display +--- @param last number last line that was changed -- @private -local function restore_extmarks(bufnr) - local lcount = api.nvim_buf_line_count(bufnr) +local function restore_extmarks(bufnr, last) for client_id, extmarks in pairs(diagnostic_cache_extmarks[bufnr]) do local ns = M._get_diagnostic_namespace(client_id) local extmarks_current = api.nvim_buf_get_extmarks(bufnr, ns, 0, -1, {details = true}) local found = {} for _, extmark in ipairs(extmarks_current) do - -- HACK: the missing extmarks seem to still exist, but at the line after the last - if extmark[2] < lcount then + -- nvim_buf_set_lines will move any extmark to the line after the last + -- nvim_buf_set_text will move any extmark to the last line + if extmark[2] ~= last + 1 then found[extmark[1]] = true end end @@ -1076,8 +1077,8 @@ local function save_extmarks(bufnr, client_id) bufnr = bufnr == 0 and api.nvim_get_current_buf() or bufnr if not diagnostic_attached_buffers[bufnr] then api.nvim_buf_attach(bufnr, false, { - on_lines = function() - restore_extmarks(bufnr) + on_lines = function(_, _, _, _, _, last) + restore_extmarks(bufnr, last - 1) end, on_detach = function() diagnostic_cache_extmarks[bufnr] = nil |