diff options
| author | William Boman <william@redwill.se> | 2022-07-31 02:36:30 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-31 00:36:30 +0000 |
| commit | b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3 (patch) | |
| tree | 1c25825b385e588c56436c766cfd3ddf62836438 | |
| parent | feat: add rubocop (#167) (diff) | |
| download | mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.tar mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.tar.gz mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.tar.bz2 mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.tar.lz mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.tar.xz mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.tar.zst mason-b655a2fa2840ecc3c2ea06f618ba7673f6a1b1a3.zip | |
feat(ui): highlight packages that have transitioned during the session (#203)
The idea is to subtly indicate which packages have been uninstalled or
installed during the current session.
| -rw-r--r-- | lua/mason/ui/components/main/package_list.lua | 2 | ||||
| -rw-r--r-- | lua/mason/ui/instance.lua | 27 |
2 files changed, 14 insertions, 15 deletions
diff --git a/lua/mason/ui/components/main/package_list.lua b/lua/mason/ui/components/main/package_list.lua index 1502629a..830e025c 100644 --- a/lua/mason/ui/components/main/package_list.lua +++ b/lua/mason/ui/components/main/package_list.lua @@ -117,7 +117,7 @@ end local function PackageComponent(state, pkg, opts) local pkg_state = state.packages.states[pkg.name] local is_expanded = state.packages.expanded == pkg.name - local label = is_expanded and p.Bold(" " .. pkg.name) or p.none(" " .. pkg.name) + local label = (is_expanded or pkg_state.has_transitioned) and p.Bold(" " .. pkg.name) or p.none(" " .. pkg.name) return Ui.Node { Ui.HlTextNode { { opts.icon, label } }, diff --git a/lua/mason/ui/instance.lua b/lua/mason/ui/instance.lua index 81fde781..c3da5d47 100644 --- a/lua/mason/ui/instance.lua +++ b/lua/mason/ui/instance.lua @@ -40,6 +40,7 @@ end ---@field expanded_json_schema_keys table<string, table<string, boolean>> ---@field expanded_json_schemas table<string, boolean> ---@field has_expanded_before boolean +---@field has_transitioned boolean ---@field is_checking_new_version boolean ---@field is_checking_version boolean ---@field is_terminated boolean @@ -150,6 +151,7 @@ local function mutate_package_grouping(pkg, group, tail) else table.insert(state.packages[group], 1, pkg) end + state.packages.states[pkg.name].has_transitioned = true end) end @@ -275,6 +277,7 @@ local function create_initial_package_state() expanded_json_schema_keys = {}, expanded_json_schemas = {}, has_expanded_before = false, + has_transitioned = false, is_checking_new_version = false, is_checking_version = false, is_terminated = false, @@ -293,27 +296,20 @@ for _, pkg in ipairs(packages) do 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) - mutate_package_grouping(pkg, pkg:is_installed() and "installed" or "uninstalled", true) pkg:get_handle():if_present(setup_handle) pkg:on("handle", setup_handle) pkg:on("install:success", function() - if get_state().packages.expanded == pkg.name then - vim.schedule(function() - hydrate_detailed_package_state(pkg) - end) - end - mutate_package_grouping(pkg, "installed") mutate_state(function(state) - local pkg_state = state.packages.states[pkg.name] - pkg_state.new_version = nil - pkg_state.version = nil - pkg_state.has_expanded_before = false - pkg_state.tailed_output = {} - pkg_state.short_tailed_output = {} + 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) @@ -323,6 +319,9 @@ for _, pkg in ipairs(packages) do 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") @@ -331,10 +330,10 @@ for _, pkg in ipairs(packages) do ) pkg:on("uninstall:success", function() - mutate_package_grouping(pkg, "uninstalled") mutate_state(function(state) state.packages.states[pkg.name] = create_initial_package_state() end) + mutate_package_grouping(pkg, "uninstalled") end) end |
