diff options
| author | William Boman <william@redwill.se> | 2022-08-12 00:34:52 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-12 00:34:52 +0200 |
| commit | 1eb0941ac121377042dc7c4b727a515e99832662 (patch) | |
| tree | 3804eef3608f2b45f2d62fc4738fe1b8c249829b /lua | |
| parent | feat: add xmlformatter (#281) (diff) | |
| download | mason-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.lua | 3 | ||||
| -rw-r--r-- | lua/mason/ui/instance.lua | 101 |
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) |
