From 07d5dc8938a7f5d8cf2b702ef4f26af926b6ac45 Mon Sep 17 00:00:00 2001 From: Peter Lithammer Date: Wed, 18 Dec 2024 15:31:25 +0100 Subject: [PATCH] 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`. --- runtime/doc/lsp.txt | 3 +++ runtime/doc/news.txt | 1 + runtime/lua/vim/lsp/client.lua | 6 ++++++ runtime/lua/vim/lsp/health.lua | 3 +++ 4 files changed, 13 insertions(+) diff --git a/runtime/doc/lsp.txt b/runtime/doc/lsp.txt index 83d191ed48..228bbafdd2 100644 --- 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 index 73704a143c..172fa4625c 100644 --- 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 index 72043c18dd..d51a45b473 100644 --- 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 index d2cf888d89..d94bc70a65 100644 --- 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 ' })),