aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp.lua
diff options
context:
space:
mode:
authorRishikesh Vaishnav <rishhvaishnav@gmail.com>2022-07-11 03:48:02 -0700
committerGitHub <noreply@github.com>2022-07-11 12:48:02 +0200
commitac10c0f4184a04c82b8e039c546ab32f4a629e30 (patch)
tree3b66561fd94c0e296cb4ab257bc117352be675eb /runtime/lua/vim/lsp.lua
parent95c65a6b221fe6e1cf91e8322e7d7571dc511a71 (diff)
downloadrneovim-ac10c0f4184a04c82b8e039c546ab32f4a629e30.tar.gz
rneovim-ac10c0f4184a04c82b8e039c546ab32f4a629e30.tar.bz2
rneovim-ac10c0f4184a04c82b8e039c546ab32f4a629e30.zip
fix(lsp): abort pending changes after flush when debouncing (#19314)
Issuing a server request triggers `changetracking.flush` so as to make sure we're not operating on a stale state. This immediately triggers notification of any pending changes (as a result of debouncing) to the server. However, this happens in addition to the notification that is waiting on the debounce delay. Because we `nil` `buf_state.pending_change` when it is called, the fix is to also check that this is non-`nil` when it is called and exit if it is, as this being `nil` would mean that it originates from a pending change that has already been flushed out.
Diffstat (limited to 'runtime/lua/vim/lsp.lua')
-rw-r--r--runtime/lua/vim/lsp.lua3
1 files changed, 3 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua
index e11f127f47..554b5f0bfa 100644
--- a/runtime/lua/vim/lsp.lua
+++ b/runtime/lua/vim/lsp.lua
@@ -500,6 +500,9 @@ do
table.insert(buf_state.pending_changes, incremental_changes(client, buf_state))
end
buf_state.pending_change = function()
+ if buf_state.pending_change == nil then
+ return
+ end
buf_state.pending_change = nil
buf_state.last_flush = uv.hrtime()
if client.is_stopped() or not vim.api.nvim_buf_is_valid(bufnr) then