fix(lsp): make sure to always reset active codelens refreshes (#18331)

This fixes issues where subsequent calls to vim.lsp.codelens.refresh()
would have no effect due to the buffer not getting cleared from the
active_refresh table.

Examples of how such scenarios would occur are:
  - A textDocument/codeLens result yielded an error.
  - The 'textDocument/codeLens' handler was overriden in such a way that
    it no longer called vim.lsp.codelens.on_codelens().
This commit is contained in:
William Boman
2022-05-05 18:50:12 +02:00
committed by GitHub
parent b2fb3614b0
commit 94eb72cc44
3 changed files with 129 additions and 3 deletions

View File

@ -1,4 +1,5 @@
local util = require('vim.lsp.util')
local log = require('vim.lsp.log')
local api = vim.api
local M = {}
@ -214,7 +215,11 @@ end
--- |lsp-handler| for the method `textDocument/codeLens`
---
function M.on_codelens(err, result, ctx, _)
assert(not err, vim.inspect(err))
if err then
active_refreshes[ctx.bufnr] = nil
local _ = log.error() and log.error("codelens", err)
return
end
M.save(result, ctx.bufnr, ctx.client_id)
@ -222,8 +227,8 @@ function M.on_codelens(err, result, ctx, _)
-- once resolved.
M.display(result, ctx.bufnr, ctx.client_id)
resolve_lenses(result, ctx.bufnr, ctx.client_id, function()
M.display(result, ctx.bufnr, ctx.client_id)
active_refreshes[ctx.bufnr] = nil
M.display(result, ctx.bufnr, ctx.client_id)
end)
end
@ -245,7 +250,7 @@ function M.refresh()
return
end
active_refreshes[bufnr] = true
vim.lsp.buf_request(0, 'textDocument/codeLens', params)
vim.lsp.buf_request(0, 'textDocument/codeLens', params, M.on_codelens)
end