mirror of
https://github.com/neovim/neovim.git
synced 2026-05-01 19:45:02 +00:00
feat(lsp): support workspace/codeLens/refresh
This commit is contained in:
@@ -300,6 +300,8 @@ LSP
|
|||||||
|hl-LspReferenceTarget| highlight group.
|
|hl-LspReferenceTarget| highlight group.
|
||||||
• Support for `textDocument/codeLens` |lsp-codelens| has been reimplemented:
|
• Support for `textDocument/codeLens` |lsp-codelens| has been reimplemented:
|
||||||
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.18/specification/#textDocument_codeLens
|
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.18/specification/#textDocument_codeLens
|
||||||
|
• Support for `workspace/codeLens/refresh`:
|
||||||
|
https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#codeLens_refresh
|
||||||
|
|
||||||
LUA
|
LUA
|
||||||
|
|
||||||
|
|||||||
@@ -123,9 +123,10 @@ function Provider:handler(err, result, ctx)
|
|||||||
self.version = ctx.version
|
self.version = ctx.version
|
||||||
end
|
end
|
||||||
|
|
||||||
---@private
|
---@package
|
||||||
---@param client_id? integer
|
---@param client_id? integer
|
||||||
function Provider:request(client_id)
|
---@param on_response? function
|
||||||
|
function Provider:request(client_id, on_response)
|
||||||
---@type lsp.CodeLensParams
|
---@type lsp.CodeLensParams
|
||||||
local params = { textDocument = util.make_text_document_params(self.bufnr) }
|
local params = { textDocument = util.make_text_document_params(self.bufnr) }
|
||||||
for id in pairs(self.client_state) do
|
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))
|
local client = assert(vim.lsp.get_client_by_id(id))
|
||||||
client:request('textDocument/codeLens', params, function(...)
|
client:request('textDocument/codeLens', params, function(...)
|
||||||
self:handler(...)
|
self:handler(...)
|
||||||
|
|
||||||
|
if on_response then
|
||||||
|
on_response()
|
||||||
|
end
|
||||||
end, self.bufnr)
|
end, self.bufnr)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -404,6 +409,28 @@ function M.run(opts)
|
|||||||
end
|
end
|
||||||
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
|
---@deprecated
|
||||||
---@param client_id? integer
|
---@param client_id? integer
|
||||||
---@param bufnr? integer
|
---@param bufnr? integer
|
||||||
|
|||||||
@@ -649,6 +649,11 @@ RSC['window/showDocument'] = function(_, params, ctx)
|
|||||||
return { success = success or false }
|
return { success = success or false }
|
||||||
end
|
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
|
---@see https://microsoft.github.io/language-server-protocol/specification/#diagnostic_refresh
|
||||||
RSC['workspace/diagnostic/refresh'] = function(err, result, ctx)
|
RSC['workspace/diagnostic/refresh'] = function(err, result, ctx)
|
||||||
return vim.lsp.diagnostic.on_refresh(err, result, ctx)
|
return vim.lsp.diagnostic.on_refresh(err, result, ctx)
|
||||||
|
|||||||
@@ -604,6 +604,9 @@ function protocol.make_client_capabilities()
|
|||||||
dynamicRegistration = sysname == 'Darwin' or sysname == 'Windows_NT',
|
dynamicRegistration = sysname == 'Darwin' or sysname == 'Windows_NT',
|
||||||
relativePatternSupport = true,
|
relativePatternSupport = true,
|
||||||
},
|
},
|
||||||
|
codeLens = {
|
||||||
|
refreshSupport = true,
|
||||||
|
},
|
||||||
inlayHint = {
|
inlayHint = {
|
||||||
refreshSupport = true,
|
refreshSupport = true,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ local eq = t.eq
|
|||||||
local api = n.api
|
local api = n.api
|
||||||
local exec_lua = n.exec_lua
|
local exec_lua = n.exec_lua
|
||||||
local insert = n.insert
|
local insert = n.insert
|
||||||
|
local feed = n.feed
|
||||||
|
|
||||||
local clear_notrace = t_lsp.clear_notrace
|
local clear_notrace = t_lsp.clear_notrace
|
||||||
local create_server_definition = t_lsp.create_server_definition
|
local create_server_definition = t_lsp.create_server_definition
|
||||||
@@ -242,6 +243,58 @@ describe('vim.lsp.codelens', function()
|
|||||||
}, result)
|
}, result)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('refreshes code lenses on request', function()
|
||||||
|
feed('ggdd')
|
||||||
|
|
||||||
|
screen:expect([[
|
||||||
|
^a: i32, {1:1 implementation} |
|
||||||
|
b: String, |
|
||||||
|
} |
|
||||||
|
|
|
||||||
|
impl S { |
|
||||||
|
fn new(a: i32, b: String) -> Self { |
|
||||||
|
S { a, b } |
|
||||||
|
} |
|
||||||
|
} |
|
||||||
|
|
|
||||||
|
fn main() { {1:▶︎ Run } |
|
||||||
|
let s = S::new(42, String::from("Hello, world!"))|
|
||||||
|
; |
|
||||||
|
println!("S.a: {}, S.b: {}", s.a, s.b); |
|
||||||
|
} |
|
||||||
|
|
|
||||||
|
{1:~ }|*3
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
exec_lua(function()
|
||||||
|
vim.lsp.codelens.on_refresh(
|
||||||
|
nil,
|
||||||
|
nil,
|
||||||
|
{ method = 'workspace/codeLens/refresh', client_id = client_id }
|
||||||
|
)
|
||||||
|
end)
|
||||||
|
screen:expect([[
|
||||||
|
^a: i32, {1:1 implementation} |
|
||||||
|
b: String, |
|
||||||
|
} |
|
||||||
|
|
|
||||||
|
impl S { |
|
||||||
|
fn new(a: i32, b: String) -> Self { |
|
||||||
|
S { a, b } |
|
||||||
|
} |
|
||||||
|
} |
|
||||||
|
|
|
||||||
|
fn main() { |
|
||||||
|
let s = S::new(42, String::from("Hello, world!"))|
|
||||||
|
; {1:▶︎ Run } |
|
||||||
|
println!("S.a: {}, S.b: {}", s.a, s.b); |
|
||||||
|
} |
|
||||||
|
|
|
||||||
|
{1:~ }|*3
|
||||||
|
|
|
||||||
|
]])
|
||||||
|
end)
|
||||||
|
|
||||||
after_each(function()
|
after_each(function()
|
||||||
api.nvim_exec_autocmds('VimLeavePre', { modeline = false })
|
api.nvim_exec_autocmds('VimLeavePre', { modeline = false })
|
||||||
end)
|
end)
|
||||||
|
|||||||
Reference in New Issue
Block a user