From 3f2fbb824e8943f8851920eb375fbf70302658fd Mon Sep 17 00:00:00 2001 From: Mathias Fußenegger Date: Mon, 10 Jan 2022 17:33:36 +0100 Subject: fix(lsp): ensure pending changes are flushed on skipped debounce (#17015) Follow up to https://github.com/neovim/neovim/pull/16881 Document changes could get sent out of order to the server: 1. on_lines: debounce > 0; add to pending changes; setup timer 2. on_lines: debounce = 0; send new changes immediately 3. timer triggers, sending changes from 1. --- runtime/lua/vim/lsp.lua | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'runtime/lua/vim') diff --git a/runtime/lua/vim/lsp.lua b/runtime/lua/vim/lsp.lua index fb08e54dfc..fc9c991c05 100644 --- a/runtime/lua/vim/lsp.lua +++ b/runtime/lua/vim/lsp.lua @@ -413,8 +413,12 @@ do return end local state = state_by_client[client.id] + changetracking._reset_timer(state) local debounce = next_debounce(client.config.flags.debounce_text_changes or 150, state, bufnr) if debounce == 0 then + if state.pending_change then + state.pending_change() + end local changes = state.use_incremental_sync and incremental_changes(client) or full_changes() client.notify("textDocument/didChange", { textDocument = { @@ -425,7 +429,6 @@ do }) return end - changetracking._reset_timer(state) if state.use_incremental_sync then -- This must be done immediately and cannot be delayed -- The contents would further change and startline/endline may no longer fit -- cgit