aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-lsp-installer/jobs/outdated-servers/init.lua15
-rw-r--r--lua/nvim-lsp-installer/ui/status-win/init.lua59
2 files changed, 41 insertions, 33 deletions
diff --git a/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua b/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
index 6f6ca5a3..4daad18e 100644
--- a/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
+++ b/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
@@ -36,17 +36,21 @@ local checkers = {
local pending_servers = {}
+---@alias VersionCheckResultProgress {completed: integer, total: integer}
+
---@param servers Server[]
----@param on_check_start fun(server: Server)
----@param on_result fun(result: VersionCheckResult)
-function M.identify_outdated_servers(servers, on_check_start, on_result)
+---@param on_result fun(result: VersionCheckResult, progress: VersionCheckResultProgress)
+function M.identify_outdated_servers(servers, on_result)
+ local total_checks = #servers
+ local completed_checks = 0
for _, server in ipairs(servers) do
if not pending_servers[server.name] then
pending_servers[server.name] = true
jobpool:supply(function(_done)
- local function complete(...)
+ local function complete(result)
+ completed_checks = completed_checks + 1
pending_servers[server.name] = nil
- on_result(...)
+ on_result(result, { completed = completed_checks, total = total_checks })
_done()
end
@@ -62,7 +66,6 @@ function M.identify_outdated_servers(servers, on_check_start, on_result)
local checker = checkers[receipt.primary_source.type]
if checker then
- on_check_start(server)
checker(server, receipt.primary_source, complete)
else
complete(VersionCheckResult.empty(server))
diff --git a/lua/nvim-lsp-installer/ui/status-win/init.lua b/lua/nvim-lsp-installer/ui/status-win/init.lua
index 9ab658c4..cb1f59f4 100644
--- a/lua/nvim-lsp-installer/ui/status-win/init.lua
+++ b/lua/nvim-lsp-installer/ui/status-win/init.lua
@@ -14,10 +14,14 @@ local HELP_KEYMAP = "?"
local CLOSE_WINDOW_KEYMAP_1 = "<Esc>"
local CLOSE_WINDOW_KEYMAP_2 = "q"
----@param props {title: string, count: number}
+---@param props {title: string, subtitle: string|nil, count: number}
local function ServerGroupHeading(props)
return Ui.HlTextNode {
- { { props.title, props.highlight or "LspInstallerHeading" }, { (" (%d)"):format(props.count), "Comment" } },
+ {
+ { props.title, props.highlight or "LspInstallerHeading" },
+ { " (" .. props.count .. ") ", "Comment" },
+ { props.subtitle and props.subtitle or "", "Comment" },
+ },
}
end
@@ -290,14 +294,7 @@ local function InstalledServers(servers, props)
{ settings.current.ui.icons.server_installed, "LspInstallerGreen" },
{ " " .. server.name, "" },
Data.when(server.deprecated, { " deprecated", "LspInstallerOrange" }),
- Data.when(server.is_checking_outdated_packages, {
- " (checking for updates)",
- "LspInstallerMuted",
- }),
- Data.when(
- #server.metadata.outdated_packages > 0,
- { " new version available", "LspInstallerGreen" }
- )
+ Data.when(#server.metadata.outdated_packages > 0, { " new version available", "Comment" })
),
},
Ui.Keybind(settings.current.ui.keymaps.toggle_server_expand, "EXPAND_SERVER", { server.name }),
@@ -402,7 +399,7 @@ local function UninstalledServers(servers, props)
end, servers))
end
----@alias ServerGroupProps {title: string, hide_when_empty: boolean|nil, servers: ServerState[][], expanded_server: string|nil, renderer: fun(servers: ServerState[], props: ServerGroupProps)}
+---@alias ServerGroupProps {title: string, subtitle: string|nil, hide_when_empty: boolean|nil, servers: ServerState[][], expanded_server: string|nil, renderer: fun(servers: ServerState[], props: ServerGroupProps)}
---@param props ServerGroupProps
local function ServerGroup(props)
@@ -418,6 +415,7 @@ local function ServerGroup(props)
Ui.EmptyLine(),
ServerGroupHeading {
title = props.title,
+ subtitle = props.subtitle,
count = total_server_count,
},
Indent(Data.list_map(function(servers)
@@ -427,11 +425,8 @@ local function ServerGroup(props)
end)
end
----@param servers table<string, ServerState>
----@param expanded_server string|nil
----@param prioritized_servers string[]
----@param server_name_order string[]
-local function Servers(servers, expanded_server, prioritized_servers, server_name_order)
+---@param state StatusWinState
+local function Servers(state)
local grouped_servers = {
installed = {},
queued = {},
@@ -444,6 +439,9 @@ local function Servers(servers, expanded_server, prioritized_servers, server_nam
session_uninstalled = {},
}
+ local servers, server_name_order, prioritized_servers, expanded_server =
+ state.servers, state.server_name_order, state.prioritized_servers, state.expanded_server
+
-- giggity
for _, server_name in ipairs(server_name_order) do
local server = servers[server_name]
@@ -477,6 +475,8 @@ local function Servers(servers, expanded_server, prioritized_servers, server_nam
return Ui.Node {
ServerGroup {
title = "Installed servers",
+ subtitle = state.server_version_check_completed_percentage ~= nil
+ and ("checking for new versions (" .. state.server_version_check_completed_percentage .. "%)"),
renderer = InstalledServers,
servers = { grouped_servers.session_installed, grouped_servers.installed },
expanded_server = expanded_server,
@@ -513,7 +513,6 @@ local function create_initial_server_state(server)
local server_state = {
name = server.name,
is_installed = server:is_installed(),
- is_checking_outdated_packages = false,
deprecated = server.deprecated,
hints = tostring(ServerHints.new(server)),
expanded_schema_properties = {},
@@ -572,12 +571,7 @@ local function init(all_servers)
return Help(state.is_current_settings_expanded, state.vader_saber_ticks)
end),
Ui.When(not state.is_showing_help, function()
- return Servers(
- state.servers,
- state.expanded_server,
- state.prioritized_servers,
- state.server_name_order
- )
+ return Servers(state)
end),
}
end
@@ -600,6 +594,7 @@ local function init(all_servers)
local initial_state = {
server_name_order = server_name_order,
servers = servers,
+ server_version_check_completed_percentage = nil,
is_showing_help = false,
is_current_settings_expanded = false,
prioritized_servers = {},
@@ -832,13 +827,23 @@ local function init(all_servers)
table.sort(servers, function(a, b)
return a.name < b.name
end)
- jobs.identify_outdated_servers(servers, function(server)
+ if #servers > 0 then
mutate_state(function(state)
- state.servers[server.name].is_checking_outdated_packages = true
+ state.server_version_check_completed_percentage = 0
end)
- end, function(check_result)
+ end
+ jobs.identify_outdated_servers(servers, function(check_result, progress)
mutate_state(function(state)
- state.servers[check_result.server.name].is_checking_outdated_packages = false
+ local completed_percentage = progress.completed / progress.total
+ state.server_version_check_completed_percentage = math.floor(completed_percentage * 100)
+ if completed_percentage == 1 then
+ vim.defer_fn(function()
+ mutate_state(function(state)
+ state.server_version_check_completed_percentage = nil
+ end)
+ end, 700)
+ end
+
if check_result.success and check_result:has_outdated_packages() then
state.servers[check_result.server.name].metadata.outdated_packages = check_result.outdated_packages
end