feat(lsp): add handlers for inlay hints (#23736)

initial support; public API left for a follow-up PR
This commit is contained in:
Chinmay Dalal
2023-06-11 15:23:37 +05:30
committed by GitHub
parent cce9460524
commit 643546b82b
10 changed files with 429 additions and 6 deletions

View File

@@ -219,6 +219,10 @@ M['textDocument/codeLens'] = function(...)
return require('vim.lsp.codelens').on_codelens(...)
end
M['textDocument/inlayHint'] = function(...)
return require('vim.lsp._inlay_hint').on_inlayhint(...)
end
--see: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_references
M['textDocument/references'] = function(_, result, ctx, config)
if not result or vim.tbl_isempty(result) then
@@ -612,6 +616,28 @@ M['window/showDocument'] = function(_, result, ctx, _)
return { success = success or false }
end
---@see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_inlayHint_refresh
M['workspace/inlayHint/refresh'] = function(err, _, ctx)
local inlay_hint = require('vim.lsp._inlay_hint')
if not inlay_hint.__explicit_buffers[ctx.bufnr] then
return vim.NIL
end
if err then
return vim.NIL
end
for _, bufnr in ipairs(vim.lsp.get_buffers_by_client_id(ctx.client_id)) do
for _, winid in ipairs(api.nvim_list_wins()) do
if api.nvim_win_get_buf(winid) == bufnr then
inlay_hint.refresh({ bufnr = bufnr })
break
end
end
end
return vim.NIL
end
-- Add boilerplate error validation and logging for all of these.
for k, fn in pairs(M) do
M[k] = function(err, result, ctx, config)