aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-08-12 00:34:52 +0200
committerGitHub <noreply@github.com>2022-08-12 00:34:52 +0200
commit1eb0941ac121377042dc7c4b727a515e99832662 (patch)
tree3804eef3608f2b45f2d62fc4738fe1b8c249829b /lua
parentfeat: add xmlformatter (#281) (diff)
downloadmason-1eb0941ac121377042dc7c4b727a515e99832662.tar
mason-1eb0941ac121377042dc7c4b727a515e99832662.tar.gz
mason-1eb0941ac121377042dc7c4b727a515e99832662.tar.bz2
mason-1eb0941ac121377042dc7c4b727a515e99832662.tar.lz
mason-1eb0941ac121377042dc7c4b727a515e99832662.tar.xz
mason-1eb0941ac121377042dc7c4b727a515e99832662.tar.zst
mason-1eb0941ac121377042dc7c4b727a515e99832662.zip
feat(ui): check for new package versions when opening :Mason (#285)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason/settings.lua3
-rw-r--r--lua/mason/ui/instance.lua101
2 files changed, 58 insertions, 46 deletions
diff --git a/lua/mason/settings.lua b/lua/mason/settings.lua
index 015c7b6d..0a980235 100644
--- a/lua/mason/settings.lua
+++ b/lua/mason/settings.lua
@@ -5,6 +5,9 @@ local M = {}
---@class MasonSettings
local DEFAULT_SETTINGS = {
ui = {
+ -- Whether to automatically check for new versions when opening the :Mason window.
+ check_outdated_packages_on_open = true,
+
-- The border to use for the UI window. Accepts same border values as |nvim_open_win()|.
border = "none",
diff --git a/lua/mason/ui/instance.lua b/lua/mason/ui/instance.lua
index c3da5d47..6ac14d30 100644
--- a/lua/mason/ui/instance.lua
+++ b/lua/mason/ui/instance.lua
@@ -291,52 +291,6 @@ local function create_initial_package_state()
}
end
-for _, pkg in ipairs(packages) do
- -- hydrate initial state
- mutate_state(function(state)
- state.packages.states[pkg.name] = create_initial_package_state()
- state.packages.visible[pkg.name] = true
- table.insert(state.packages[pkg:is_installed() and "installed" or "uninstalled"], pkg)
- end)
-
- pkg:get_handle():if_present(setup_handle)
- pkg:on("handle", setup_handle)
-
- pkg:on("install:success", function()
- mutate_state(function(state)
- state.packages.states[pkg.name] = create_initial_package_state()
- if state.packages.expanded == pkg.name then
- hydrate_detailed_package_state(pkg)
- end
- end)
- mutate_package_grouping(pkg, "installed")
- vim.schedule_wrap(notify)(("%q was successfully installed."):format(pkg.name))
- end)
-
- pkg:on(
- "install:failed",
- ---@param handle InstallHandle
- function(handle)
- if handle.is_terminated then
- -- If installation was explicitly terminated - restore to "pristine" state
- mutate_state(function(state)
- state.packages.states[pkg.name] = create_initial_package_state()
- end)
- mutate_package_grouping(pkg, pkg:is_installed() and "installed" or "uninstalled")
- else
- mutate_package_grouping(pkg, "failed")
- end
- end
- )
-
- pkg:on("uninstall:success", function()
- mutate_state(function(state)
- state.packages.states[pkg.name] = create_initial_package_state()
- end)
- mutate_package_grouping(pkg, "uninstalled")
- end)
-end
-
local help_animation
do
local help_command = ":help"
@@ -603,11 +557,66 @@ local effects = {
["UPDATE_ALL_PACKAGES"] = update_all_packages,
}
+for _, pkg in ipairs(packages) do
+ -- hydrate initial state
+ mutate_state(function(state)
+ state.packages.states[pkg.name] = create_initial_package_state()
+ state.packages.visible[pkg.name] = true
+ table.insert(state.packages[pkg:is_installed() and "installed" or "uninstalled"], pkg)
+ end)
+
+ pkg:get_handle():if_present(setup_handle)
+ pkg:on("handle", setup_handle)
+
+ pkg:on("install:success", function()
+ mutate_state(function(state)
+ state.packages.states[pkg.name] = create_initial_package_state()
+ if state.packages.expanded == pkg.name then
+ hydrate_detailed_package_state(pkg)
+ end
+ end)
+ mutate_package_grouping(pkg, "installed")
+ vim.schedule_wrap(notify)(("%q was successfully installed."):format(pkg.name))
+ end)
+
+ pkg:on(
+ "install:failed",
+ ---@param handle InstallHandle
+ function(handle)
+ if handle.is_terminated then
+ -- If installation was explicitly terminated - restore to "pristine" state
+ mutate_state(function(state)
+ state.packages.states[pkg.name] = create_initial_package_state()
+ end)
+ mutate_package_grouping(pkg, pkg:is_installed() and "installed" or "uninstalled")
+ else
+ mutate_package_grouping(pkg, "failed")
+ end
+ end
+ )
+
+ pkg:on("uninstall:success", function()
+ mutate_state(function(state)
+ state.packages.states[pkg.name] = create_initial_package_state()
+ end)
+ mutate_package_grouping(pkg, "uninstalled")
+ end)
+end
+
window.init {
effects = effects,
highlight_groups = palette.highlight_groups,
}
+if settings.current.ui.check_outdated_packages_on_open then
+ vim.defer_fn(
+ a.scope(function()
+ check_new_visible_package_versions()
+ end),
+ 100
+ )
+end
+
return {
window = window,
set_view = function(view)