aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-03-05 03:33:41 +0100
committerGitHub <noreply@github.com>2023-03-05 02:33:41 +0000
commit51228a60d1a5017030429ba38f018ff27a460c76 (patch)
treeaab1aba6059cab2c93e3c6eca76aed5686c91a6a /lua
parentfix(package): emit registry event on abnormal failures (#1061) (diff)
downloadmason-51228a60d1a5017030429ba38f018ff27a460c76.tar
mason-51228a60d1a5017030429ba38f018ff27a460c76.tar.gz
mason-51228a60d1a5017030429ba38f018ff27a460c76.tar.bz2
mason-51228a60d1a5017030429ba38f018ff27a460c76.tar.lz
mason-51228a60d1a5017030429ba38f018ff27a460c76.tar.xz
mason-51228a60d1a5017030429ba38f018ff27a460c76.tar.zst
mason-51228a60d1a5017030429ba38f018ff27a460c76.zip
feat(ui): display registries in help window (#1062)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-registry/init.lua1
-rw-r--r--lua/mason-registry/sources/init.lua6
-rw-r--r--lua/mason-registry/sources/lua.lua8
-rw-r--r--lua/mason/ui/components/footer.lua17
-rw-r--r--lua/mason/ui/components/help/init.lua24
-rw-r--r--lua/mason/ui/instance.lua21
6 files changed, 47 insertions, 30 deletions
diff --git a/lua/mason-registry/init.lua b/lua/mason-registry/init.lua
index f897095c..01f18c90 100644
--- a/lua/mason-registry/init.lua
+++ b/lua/mason-registry/init.lua
@@ -9,6 +9,7 @@ local sources = require "mason-registry.sources"
---@class RegistrySource
---@field get_package fun(self: RegistrySource, pkg_name: string): Package?
---@field get_all_package_names fun(self: RegistrySource): string[]
+---@field get_display_name fun(self: RegistrySource): string
---@field is_installed fun(self: RegistrySource): boolean
---@field install async fun(self: RegistrySource): Result
diff --git a/lua/mason-registry/sources/init.lua b/lua/mason-registry/sources/init.lua
index 39b7fad5..e4abe062 100644
--- a/lua/mason-registry/sources/init.lua
+++ b/lua/mason-registry/sources/init.lua
@@ -36,7 +36,9 @@ function M.set_registries(registry_ids)
end
end
-function M.iter()
+---@param opts? { include_uninstalled?: boolean }
+function M.iter(opts)
+ opts = opts or {}
local i = 1
return function()
while i <= #registries do
@@ -47,7 +49,7 @@ function M.iter()
registries[i] = registry
end
i = i + 1
- if registry:is_installed() then
+ if opts.include_uninstalled or registry:is_installed() then
return registry
end
end
diff --git a/lua/mason-registry/sources/lua.lua b/lua/mason-registry/sources/lua.lua
index d2032cc0..7af4feee 100644
--- a/lua/mason-registry/sources/lua.lua
+++ b/lua/mason-registry/sources/lua.lua
@@ -39,6 +39,14 @@ function LuaRegistrySource:install()
return Result.success()
end
+function LuaRegistrySource:get_display_name()
+ if self:is_installed() then
+ return ("require(%q)"):format(self.spec.mod)
+ else
+ return ("require(%q) [uninstalled]"):format(self.spec.mod)
+ end
+end
+
function LuaRegistrySource:__tostring()
return ("LuaRegistrySource(mod=%s)"):format(self.spec.mod)
end
diff --git a/lua/mason/ui/components/footer.lua b/lua/mason/ui/components/footer.lua
deleted file mode 100644
index c4319bf7..00000000
--- a/lua/mason/ui/components/footer.lua
+++ /dev/null
@@ -1,17 +0,0 @@
-local Ui = require "mason-core.ui"
-local p = require "mason.ui.palette"
-
----@param state InstallerUiState
-return function(state)
- if not state.stats.used_disk_space then
- return Ui.Node {}
- end
- return Ui.CascadingStyleNode({ "CENTERED" }, {
- Ui.Table {
- {
- p.muted "Used disk space:",
- p.none(state.stats.used_disk_space),
- },
- },
- })
-end
diff --git a/lua/mason/ui/components/help/init.lua b/lua/mason/ui/components/help/init.lua
index 27307dce..c6944ab5 100644
--- a/lua/mason/ui/components/help/init.lua
+++ b/lua/mason/ui/components/help/init.lua
@@ -68,16 +68,26 @@ local function GenericHelp(state)
{ p.muted "Mason log: ", p.none(log.outfile) },
},
Ui.EmptyLine(),
- Ui.Table(vim.list_extend(
+ Ui.HlTextNode {
{
- {
- p.Bold "Keyboard shortcuts",
- },
+ p.Bold "Registries",
+ },
+ {
+ p.muted "Packages are sourced from the following registries:",
},
- _.map(function(keymap_tuple)
+ unpack(_.map(function(registry)
+ return { p.none(" - " .. registry) }
+ end, state.info.registries)),
+ },
+ Ui.EmptyLine(),
+ Ui.Table {
+ {
+ p.Bold "Keyboard shortcuts",
+ },
+ unpack(_.map(function(keymap_tuple)
return { p.muted(keymap_tuple[1]), p.highlight(keymap_tuple[2]) }
- end, keymap_tuples)
- )),
+ end, keymap_tuples)),
+ },
Ui.EmptyLine(),
Ui.HlTextNode {
{ p.Bold "Problems installing packages" },
diff --git a/lua/mason/ui/instance.lua b/lua/mason/ui/instance.lua
index c7000bc5..52717654 100644
--- a/lua/mason/ui/instance.lua
+++ b/lua/mason/ui/instance.lua
@@ -9,7 +9,6 @@ local settings = require "mason.settings"
local notify = require "mason-core.notify"
local Header = require "mason.ui.components.header"
-local Footer = require "mason.ui.components.footer"
local Help = require "mason.ui.components.help"
local Tabs = require "mason.ui.components.tabs"
local Main = require "mason.ui.components.main"
@@ -57,9 +56,11 @@ end
---@class InstallerUiState
local INITIAL_STATE = {
- stats = {
+ info = {
---@type string | nil
used_disk_space = nil,
+ ---@type string[]
+ registries = {},
},
view = {
is_showing_help = false,
@@ -132,7 +133,6 @@ window.view(
Main(state),
}
end),
- Footer(state),
}
end
)
@@ -210,6 +210,10 @@ local function setup_handle(handle)
mutate_package_grouping(handle.package, "queued", true)
elseif handle.state == "ACTIVE" then
mutate_package_grouping(handle.package, "installing", true)
+ elseif handle.state == "CLOSED" then
+ mutate_state(function(state)
+ state.packages.states[handle.package.name].is_terminated = false
+ end)
end
end
@@ -264,7 +268,6 @@ local function setup_handle(handle)
handle_spawnhandle_change()
mutate_state(function(state)
state.packages.states[handle.package.name] = create_initial_package_state()
- state.packages.states[handle.package.name].short_tailed_output = "Installing…"
end)
end
@@ -642,6 +645,16 @@ if settings.current.ui.check_outdated_packages_on_open then
)
end
+do
+ local registries = {}
+ for source in require("mason-registry.sources").iter { include_uninstalled = true } do
+ table.insert(registries, source:get_display_name())
+ end
+ mutate_state(function(state)
+ state.info.registries = registries
+ end)
+end
+
return {
window = window,
set_view = function(view)