aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim
diff options
context:
space:
mode:
authorYi Ming <ofseed@foxmail.com>2026-02-02 09:40:31 +0800
committerYi Ming <ofseed@foxmail.com>2026-02-03 22:25:21 +0800
commit965468fca1e7c465292ea9dd767f5cf02fc61dad (patch)
tree7f2988b750ae4c9bf968157ba5a03664bbf5ee50 /runtime/lua/vim
parentfe23168e2bc1a985b8206c3c9049d6f94233bf2d (diff)
downloadrneovim-965468fca1e7c465292ea9dd767f5cf02fc61dad.tar.gz
rneovim-965468fca1e7c465292ea9dd767f5cf02fc61dad.tar.bz2
rneovim-965468fca1e7c465292ea9dd767f5cf02fc61dad.zip
feat(lsp): support `workspace/codeLens/refresh`
Diffstat (limited to 'runtime/lua/vim')
-rw-r--r--runtime/lua/vim/lsp/codelens.lua31
-rw-r--r--runtime/lua/vim/lsp/handlers.lua5
-rw-r--r--runtime/lua/vim/lsp/protocol.lua3
3 files changed, 37 insertions, 2 deletions
diff --git a/runtime/lua/vim/lsp/codelens.lua b/runtime/lua/vim/lsp/codelens.lua
index 1baba2a06a..3b72b1990b 100644
--- a/runtime/lua/vim/lsp/codelens.lua
+++ b/runtime/lua/vim/lsp/codelens.lua
@@ -123,9 +123,10 @@ function Provider:handler(err, result, ctx)
self.version = ctx.version
end
----@private
+---@package
---@param client_id? integer
-function Provider:request(client_id)
+---@param on_response? function
+function Provider:request(client_id, on_response)
---@type lsp.CodeLensParams
local params = { textDocument = util.make_text_document_params(self.bufnr) }
for id in pairs(self.client_state) do
@@ -133,6 +134,10 @@ function Provider:request(client_id)
local client = assert(vim.lsp.get_client_by_id(id))
client:request('textDocument/codeLens', params, function(...)
self:handler(...)
+
+ if on_response then
+ on_response()
+ end
end, self.bufnr)
end
end
@@ -404,6 +409,28 @@ function M.run(opts)
end
end
+--- |lsp-handler| for the method `workspace/codeLens/refresh`
+---
+---@private
+---@type lsp.Handler
+function M.on_refresh(err, _, ctx)
+ if err then
+ return vim.NIL
+ end
+
+ for bufnr, provider in pairs(Provider.active) do
+ for client_id in pairs(provider.client_state) do
+ if client_id == ctx.client_id then
+ provider:request(client_id, function()
+ provider.row_version = {}
+ vim.api.nvim__redraw({ buf = bufnr, valid = true, flush = false })
+ end)
+ end
+ end
+ end
+ return vim.NIL
+end
+
---@deprecated
---@param client_id? integer
---@param bufnr? integer
diff --git a/runtime/lua/vim/lsp/handlers.lua b/runtime/lua/vim/lsp/handlers.lua
index 722e3a17c3..1f6f22cfc8 100644
--- a/runtime/lua/vim/lsp/handlers.lua
+++ b/runtime/lua/vim/lsp/handlers.lua
@@ -649,6 +649,11 @@ RSC['window/showDocument'] = function(_, params, ctx)
return { success = success or false }
end
+---@see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeLens_refresh
+RSC['workspace/codeLens/refresh'] = function(err, result, ctx)
+ return vim.lsp.codelens.on_refresh(err, result, ctx)
+end
+
---@see https://microsoft.github.io/language-server-protocol/specification/#diagnostic_refresh
RSC['workspace/diagnostic/refresh'] = function(err, result, ctx)
return vim.lsp.diagnostic.on_refresh(err, result, ctx)
diff --git a/runtime/lua/vim/lsp/protocol.lua b/runtime/lua/vim/lsp/protocol.lua
index 6e4b1f713b..95550a8534 100644
--- a/runtime/lua/vim/lsp/protocol.lua
+++ b/runtime/lua/vim/lsp/protocol.lua
@@ -604,6 +604,9 @@ function protocol.make_client_capabilities()
dynamicRegistration = sysname == 'Darwin' or sysname == 'Windows_NT',
relativePatternSupport = true,
},
+ codeLens = {
+ refreshSupport = true,
+ },
inlayHint = {
refreshSupport = true,
},