From bf66871113831d7df25795fae412e39945766959 Mon Sep 17 00:00:00 2001 From: Tristan Knight Date: Mon, 16 Dec 2024 11:17:40 +0000 Subject: [PATCH] fix(lsp): cancel pending requests before refreshing (#31500) 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. --- runtime/lua/vim/lsp/util.lua | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/runtime/lua/vim/lsp/util.lua b/runtime/lua/vim/lsp/util.lua index c9e96c2ddb..4afd3aba9b 100644 --- a/runtime/lua/vim/lsp/util.lua +++ b/runtime/lua/vim/lsp/util.lua @@ -2306,6 +2306,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),