aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/ui/status-win/init.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-03-05 22:42:25 +0100
committerGitHub <noreply@github.com>2022-03-05 22:42:25 +0100
commitf9299bb59c9e42d59fc57ed034fb84bdd23bbd77 (patch)
tree0ac6e701d7fa206ce5e05b4daed2238ab1eaf6c0 /lua/nvim-lsp-installer/ui/status-win/init.lua
parentasync: raise errors instead of returning pcall-style (#521) (diff)
downloadmason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.gz
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.bz2
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.lz
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.xz
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.tar.zst
mason-f9299bb59c9e42d59fc57ed034fb84bdd23bbd77.zip
feat(ui): display installed server version (#520)
Diffstat (limited to 'lua/nvim-lsp-installer/ui/status-win/init.lua')
-rw-r--r--lua/nvim-lsp-installer/ui/status-win/init.lua68
1 files changed, 46 insertions, 22 deletions
diff --git a/lua/nvim-lsp-installer/ui/status-win/init.lua b/lua/nvim-lsp-installer/ui/status-win/init.lua
index 3b0ec33a..beb788ed 100644
--- a/lua/nvim-lsp-installer/ui/status-win/init.lua
+++ b/lua/nvim-lsp-installer/ui/status-win/init.lua
@@ -1,3 +1,4 @@
+local a = require "nvim-lsp-installer.core.async"
local Ui = require "nvim-lsp-installer.ui"
local fs = require "nvim-lsp-installer.fs"
local log = require "nvim-lsp-installer.log"
@@ -6,7 +7,8 @@ local display = require "nvim-lsp-installer.ui.display"
local settings = require "nvim-lsp-installer.settings"
local lsp_servers = require "nvim-lsp-installer.servers"
local JobExecutionPool = require "nvim-lsp-installer.jobs.pool"
-local jobs = require "nvim-lsp-installer.jobs.outdated-servers"
+local outdated_servers = require "nvim-lsp-installer.jobs.outdated-servers"
+local version_check = require "nvim-lsp-installer.jobs.version-check"
local ServerHints = require "nvim-lsp-installer.ui.status-win.server_hints"
local ServerSettingsSchema = require "nvim-lsp-installer.ui.status-win.components.settings-schema"
@@ -173,15 +175,11 @@ end
---@return string
local function format_new_package_versions(outdated_packages)
local result = {}
+ if #outdated_packages == 1 then
+ return outdated_packages[1].latest_version
+ end
for _, outdated_package in ipairs(outdated_packages) do
- table.insert(
- result,
- ("%s@%s → %s"):format(
- outdated_package.name,
- outdated_package.current_version,
- outdated_package.latest_version
- )
- )
+ result[#result + 1] = ("%s@%s"):format(outdated_package.name, outdated_package.latest_version)
end
return table.concat(result, ", ")
end
@@ -207,10 +205,22 @@ local function ServerMetadata(server)
))
end),
Ui.Table(Data.list_not_nil(
+ Data.lazy(server.is_installed, function()
+ return {
+ { "version", "LspInstallerMuted" },
+ server.installed_version_err and {
+ "Unable to detect version.",
+ "LspInstallerMuted",
+ } or { server.installed_version or "Loading...", "" },
+ }
+ end),
Data.lazy(#server.metadata.outdated_packages > 0, function()
return {
- { "new version", "LspInstallerMuted" },
- { format_new_package_versions(server.metadata.outdated_packages), "LspInstallerGreen" },
+ { "latest version", "LspInstallerGreen" },
+ {
+ format_new_package_versions(server.metadata.outdated_packages),
+ "LspInstallerGreen",
+ },
}
end),
Data.lazy(server.metadata.install_timestamp_seconds, function()
@@ -219,10 +229,10 @@ local function ServerMetadata(server)
{ format_time(server.metadata.install_timestamp_seconds), "" },
}
end),
- {
+ Data.when(not server.is_installed, {
{ "filetypes", "LspInstallerMuted" },
{ server.metadata.filetypes, "" },
- },
+ }),
Data.when(server.is_installed, {
{ "path", "LspInstallerMuted" },
{ server.metadata.install_dir, "String" },
@@ -276,7 +286,10 @@ local function InstalledServers(servers, props)
{ " " .. server.name .. " ", "" },
{ server.hints, "Comment" },
Data.when(server.deprecated, { " deprecated", "LspInstallerOrange" }),
- Data.when(#server.metadata.outdated_packages > 0, { " new version available", "Comment" })
+ Data.when(
+ #server.metadata.outdated_packages > 0 and not is_expanded,
+ { " new version available", "LspInstallerGreen" }
+ )
),
},
Ui.Keybind(settings.current.ui.keymaps.toggle_server_expand, "EXPAND_SERVER", { server.name }),
@@ -513,6 +526,8 @@ local function create_initial_server_state(server)
hints = tostring(ServerHints.new(server)),
expanded_schema_properties = {},
has_expanded_schema = false,
+ installed_version = nil, -- lazy
+ installed_version_err = nil, -- lazy
---@type table
schema = nil, -- lazy
metadata = {
@@ -606,9 +621,8 @@ local function init(all_servers)
---@type fun(): StatusWinState
local get_state = get_state_generic
- -- TODO: memoize or throttle.. or cache. Do something. Also, as opposed to what the naming currently suggests, this
- -- is not really doing anything async stuff, but will very likely do so in the future :tm:.
- local async_populate_server_metadata = vim.schedule_wrap(function(server_name)
+ local async_populate_server_metadata = a.scope(function(server_name)
+ a.scheduler()
local ok, server = lsp_servers.get_server(server_name)
if not ok then
return log.warn("Unable to get server when populating metadata.", server_name)
@@ -618,7 +632,16 @@ local function init(all_servers)
if fstat_ok then
state.servers[server.name].metadata.install_timestamp_seconds = fstat.mtime.sec
end
- state.servers[server_name].schema = server:get_settings_schema()
+ state.servers[server.name].schema = server:get_settings_schema()
+ end)
+ local version = version_check.check_server_version(server)
+ mutate_state(function(state)
+ if version:is_success() then
+ state.servers[server.name].installed_version = version:get_or_nil()
+ state.servers[server.name].installed_version_err = nil
+ else
+ state.servers[server.name].installed_version_err = true
+ end
end)
end)
@@ -671,12 +694,13 @@ local function init(all_servers)
state.servers[server.name].installer.is_running = false
state.servers[server.name].installer.has_run = true
if not state.expanded_server then
+ -- Only automatically expand the server upon installation if none is already expanded, for UX reasons
expand_server(server.name)
+ elseif state.expanded_server == server.name then
+ -- Refresh server metadata
+ async_populate_server_metadata(server.name)
end
end)
- if not get_state().expanded_server then
- expand_server(server.name)
- end
on_complete()
end)
end
@@ -828,7 +852,7 @@ local function init(all_servers)
state.server_version_check_completed_percentage = 0
end)
end
- jobs.identify_outdated_servers(servers, function(check_result, progress)
+ outdated_servers.identify_outdated_servers(servers, function(check_result, progress)
mutate_state(function(state)
local completed_percentage = progress.completed / progress.total
state.server_version_check_completed_percentage = math.floor(completed_percentage * 100)