neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 07d5dc8938a7f5d8cf2b702ef4f26af926b6ac45
parent f9eb68f340f9c0dbf3b6b2da3ddbab2d5be21b61
Author: Peter Lithammer <peter.lithammer@gmail.com>
Date:   Wed, 18 Dec 2024 15:31:25 +0100

feat(lsp): show server version in `:checkhealth` #31611

Problem:
Language server version information missing from `:checkhealth vim.lsp`.

Solution:
Store `InitializeResult.serverInfo.version` from the `initialize`
response and display for each client in `:checkhealth vim.lsp`.
Diffstat:
Mruntime/doc/lsp.txt | 3+++
Mruntime/doc/news.txt | 1+
Mruntime/lua/vim/lsp/client.lua | 6++++++
Mruntime/lua/vim/lsp/health.lua | 3+++
4 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt @@ -1126,6 +1126,9 @@ Lua module: vim.lsp.client *lsp-client* • {server_capabilities} (`lsp.ServerCapabilities?`) Response from the server sent on `initialize` describing the server's capabilities. + • {server_info} (`lsp.ServerInfo?`) Response from the server + sent on `initialize` describing information + about the server. • {progress} (`vim.lsp.Client.Progress`) A ring buffer (|vim.ringbuf()|) containing progress messages sent by the server. See diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt @@ -115,6 +115,7 @@ LSP • |vim.lsp.util.make_position_params()|, |vim.lsp.util.make_range_params()| and |vim.lsp.util.make_given_range_params()| now require the `position_encoding` parameter. +• `:checkhealth vim.lsp` displays the server version (if available). LUA diff --git a/runtime/lua/vim/lsp/client.lua b/runtime/lua/vim/lsp/client.lua @@ -174,6 +174,10 @@ local validate = vim.validate --- capabilities. --- @field server_capabilities lsp.ServerCapabilities? --- +--- Response from the server sent on `initialize` describing information about +--- the server. +--- @field server_info lsp.ServerInfo? +--- --- A ring buffer (|vim.ringbuf()|) containing progress messages --- sent by the server. --- @field progress vim.lsp.Client.Progress @@ -556,6 +560,8 @@ function Client:initialize() self.offset_encoding = self.server_capabilities.positionEncoding end + self.server_info = result.serverInfo + if next(self.settings) then self:notify(ms.workspace_didChangeConfiguration, { settings = self.settings }) end diff --git a/runtime/lua/vim/lsp/health.lua b/runtime/lua/vim/lsp/health.lua @@ -40,6 +40,8 @@ local function check_active_clients() local clients = vim.lsp.get_clients() if next(clients) then for _, client in pairs(clients) do + local server_version = vim.tbl_get(client, 'server_info', 'version') + or '? (no serverInfo.version response)' local cmd ---@type string local ccmd = client.config.cmd if type(ccmd) == 'table' then @@ -62,6 +64,7 @@ local function check_active_clients() end report_info(table.concat({ string.format('%s (id: %d)', client.name, client.id), + string.format('- Version: %s', server_version), dirs_info, string.format('- Command: %s', cmd), string.format('- Settings: %s', vim.inspect(client.settings, { newline = '\n ' })),