aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/lsp/util.lua
diff options
context:
space:
mode:
authortris203 <admin@snappeh.com>2024-12-06 16:25:13 +0000
committerLewis Russell <me@lewisr.dev>2024-12-07 10:08:33 +0000
commitbdfba8598b41b891e1fcc8b96163f442baf509b4 (patch)
treed02fed5b888b34974c635051c6eba105a5d1ad18 /runtime/lua/vim/lsp/util.lua
parentc2bf09ddff4994f901350dd02412087a8abfde0a (diff)
downloadrneovim-bdfba8598b41b891e1fcc8b96163f442baf509b4.tar.gz
rneovim-bdfba8598b41b891e1fcc8b96163f442baf509b4.tar.bz2
rneovim-bdfba8598b41b891e1fcc8b96163f442baf509b4.zip
fix(lsp): cancel pending requests before refreshing
Problem: Diagnostics and inlay hints can be expensive to calculate, and we shouldn't stack them as this can cause noticeable lag. Solution: Check for duplicate inflight requests and cancel them before issuing a new one. This ensures that only the latest request is processed, improving performance and preventing potential conflicts.
Diffstat (limited to 'runtime/lua/vim/lsp/util.lua')
-rw-r--r--runtime/lua/vim/lsp/util.lua5
1 files changed, 5 insertions, 0 deletions
diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua
index ced8aa5745..5bf436f2ca 100644
--- a/runtime/lua/vim/lsp/util.lua
+++ b/runtime/lua/vim/lsp/util.lua
@@ -2162,6 +2162,11 @@ function M._refresh(method, opts)
local first = vim.fn.line('w0', window)
local last = vim.fn.line('w$', window)
for _, client in ipairs(clients) do
+ for rid, req in pairs(client.requests) do
+ if req.method == method and req.type == 'pending' and req.bufnr == bufnr then
+ client:cancel_request(rid)
+ end
+ end
client:request(method, {
textDocument = textDocument,
range = make_line_range_params(bufnr, first - 1, last - 1, client.offset_encoding),