aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Lithammer <peter.lithammer@gmail.com>2024-12-18 15:31:25 +0100
committerGitHub <noreply@github.com>2024-12-18 06:31:25 -0800
commit07d5dc8938a7f5d8cf2b702ef4f26af926b6ac45 (patch)
tree723e3e11c11b822124255f7702bc0a46d7047b45
parentf9eb68f340f9c0dbf3b6b2da3ddbab2d5be21b61 (diff)
downloadrneovim-07d5dc8938a7f5d8cf2b702ef4f26af926b6ac45.tar.gz
rneovim-07d5dc8938a7f5d8cf2b702ef4f26af926b6ac45.tar.bz2
rneovim-07d5dc8938a7f5d8cf2b702ef4f26af926b6ac45.zip
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`.
-rw-r--r--runtime/doc/lsp.txt3
-rw-r--r--runtime/doc/news.txt1
-rw-r--r--runtime/lua/vim/lsp/client.lua6
-rw-r--r--runtime/lua/vim/lsp/health.lua3
4 files changed, 13 insertions, 0 deletions
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 ' })),