aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-07 01:21:08 +0200
committerWilliam Boman <william@redwill.se>2022-07-07 01:21:08 +0200
commit4a5129d7e615d904612a1f90eed5b6a22596d32b (patch)
tree80a6107455903f3c73627279d4e0eb19c26bca4d /lua
parentstyle: more stylua (diff)
downloadmason-4a5129d7e615d904612a1f90eed5b6a22596d32b.tar
mason-4a5129d7e615d904612a1f90eed5b6a22596d32b.tar.gz
mason-4a5129d7e615d904612a1f90eed5b6a22596d32b.tar.bz2
mason-4a5129d7e615d904612a1f90eed5b6a22596d32b.tar.lz
mason-4a5129d7e615d904612a1f90eed5b6a22596d32b.tar.xz
mason-4a5129d7e615d904612a1f90eed5b6a22596d32b.tar.zst
mason-4a5129d7e615d904612a1f90eed5b6a22596d32b.zip
fix(ui): some ui improvements
Diffstat (limited to 'lua')
-rw-r--r--lua/mason/ui/components/main/package_list.lua25
-rw-r--r--lua/mason/ui/instance.lua30
2 files changed, 42 insertions, 13 deletions
diff --git a/lua/mason/ui/components/main/package_list.lua b/lua/mason/ui/components/main/package_list.lua
index 696b838f..68d954cd 100644
--- a/lua/mason/ui/components/main/package_list.lua
+++ b/lua/mason/ui/components/main/package_list.lua
@@ -210,7 +210,7 @@ local function Installing(state)
Ui.CascadingStyleNode({ "INDENT" }, {
Ui.HlTextNode(_.map(function(line)
return { p.muted(line) }
- end, pkg_state.tailed_output)),
+ end, pkg_state.short_tailed_output)),
}),
}
end,
@@ -249,13 +249,22 @@ local function Failed(state)
packages = packages,
---@param package Package
list_item_renderer = function(package)
- return PackageComponent(state, package, {
- icon = p.error(settings.current.ui.icons.package_pending),
- keybinds = {
- Ui.Keybind(settings.current.ui.keymaps.install_package, "INSTALL_PACKAGE", package),
- Ui.Keybind(settings.current.ui.keymaps.toggle_package_expand, "TOGGLE_EXPAND_PACKAGE", package),
- },
- })
+ ---@type UiPackageState
+ local pkg_state = state.packages.states[package.name]
+ return Ui.Node {
+ PackageComponent(state, package, {
+ icon = p.error(settings.current.ui.icons.package_pending),
+ keybinds = {
+ Ui.Keybind(settings.current.ui.keymaps.install_package, "INSTALL_PACKAGE", package),
+ Ui.Keybind(settings.current.ui.keymaps.toggle_package_expand, "TOGGLE_EXPAND_PACKAGE", package),
+ },
+ }),
+ Ui.CascadingStyleNode({ "INDENT" }, {
+ Ui.HlTextNode(_.map(function(line)
+ return { p.muted(line) }
+ end, pkg_state.tailed_output)),
+ }),
+ }
end,
}
end
diff --git a/lua/mason/ui/instance.lua b/lua/mason/ui/instance.lua
index a6db4d25..eb35cfef 100644
--- a/lua/mason/ui/instance.lua
+++ b/lua/mason/ui/instance.lua
@@ -41,6 +41,7 @@ end
---@field is_terminated boolean
---@field latest_spawn string|nil
---@field tailed_output string[]
+---@field short_tailed_output string[]
---@field linked_executables table<string, string>
---@field version string|nil
---@field is_checking_version boolean
@@ -209,7 +210,7 @@ local function setup_handle(handle)
---@param chunk string
local function handle_output(chunk)
mutate_state(function(state)
- -- TODO: fix this
+ -- TODO: improve this
local pkg_state = state.packages.states[handle.package.name]
for idx, line in ipairs(vim.split(chunk, "\n")) do
if idx == 1 and pkg_state.tailed_output[#pkg_state.tailed_output] then
@@ -219,7 +220,7 @@ local function setup_handle(handle)
pkg_state.tailed_output[#pkg_state.tailed_output + 1] = line
end
end
- pkg_state.tailed_output = {
+ pkg_state.short_tailed_output = {
pkg_state.tailed_output[#pkg_state.tailed_output - 1] or "",
pkg_state.tailed_output[#pkg_state.tailed_output] or "",
}
@@ -287,6 +288,7 @@ local function create_initial_package_state()
return {
latest_spawn = nil,
tailed_output = {},
+ short_tailed_output = {},
version = nil,
is_checking_version = false,
new_version = nil,
@@ -312,6 +314,11 @@ for _, package in ipairs(packages) do
hydrate_detailed_package_state(package)
end
mutate_package_grouping(package, "installed")
+ mutate_state(function(state)
+ state.packages.states[package.name].new_version = nil
+ state.packages.states[package.name].tailed_output = {}
+ state.packages.states[package.name].short_tailed_output = {}
+ end)
calculate_stats()
vim.schedule_wrap(notify)(("%q was successfully installed."):format(package.name))
end)
@@ -468,9 +475,22 @@ local function check_new_visible_package_versions()
if state.packages.new_versions_check.is_checking then
return
end
- local installed_visible_packages = _.filter(function(package)
- return state.packages.visible[package.name]
- end, state.packages.installed)
+ local installed_visible_packages = _.compose(
+ _.filter(
+ ---@param package Package
+ function(package)
+ return package
+ :get_handle()
+ :map(function(handle)
+ return handle:is_closed()
+ end)
+ :or_else(true)
+ end
+ ),
+ _.filter(function(package)
+ return state.packages.visible[package.name]
+ end)
+ )(state.packages.installed)
if #installed_visible_packages == 0 then
return