aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-10-19 14:41:42 +0200
committerGitHub <noreply@github.com>2022-10-19 14:41:42 +0200
commit38c3c7f68c0cd442f4faf46569d83c5b8a610c97 (patch)
tree23c655b038ad8c0c1d80fe1aca7eaf5108aeb0f7 /lua
parentchore: update generated code (#575) (diff)
downloadmason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.tar
mason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.tar.gz
mason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.tar.bz2
mason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.tar.lz
mason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.tar.xz
mason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.tar.zst
mason-38c3c7f68c0cd442f4faf46569d83c5b8a610c97.zip
feat(api/command): add --debug flag to :MasonInstall (#576)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-core/functional/init.lua1
-rw-r--r--lua/mason-core/functional/list.lua12
-rw-r--r--lua/mason-core/installer/context.lua1
-rw-r--r--lua/mason-core/installer/init.lua14
-rw-r--r--lua/mason-core/package/init.lua3
-rw-r--r--lua/mason/api/command.lua17
6 files changed, 40 insertions, 8 deletions
diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua
index a153e8fa..ed502a4b 100644
--- a/lua/mason-core/functional/init.lua
+++ b/lua/mason-core/functional/init.lua
@@ -50,6 +50,7 @@ _.flatten = list.flatten
_.sort_by = list.sort_by
_.uniq_by = list.uniq_by
_.join = list.join
+_.partition = list.partition
---@module "mason-core.functional.relation"
local relation = lazy_require "mason-core.functional.relation"
diff --git a/lua/mason-core/functional/list.lua b/lua/mason-core/functional/list.lua
index 151b9b25..31b631b8 100644
--- a/lua/mason-core/functional/list.lua
+++ b/lua/mason-core/functional/list.lua
@@ -189,4 +189,16 @@ _.uniq_by = fun.curryN(function(id, list)
return result
end, 2)
+---@generic T
+---@param predicate fun(item: T): boolean
+---@param list T[]
+---@return T[][] # [T[], T[]]
+_.partition = fun.curryN(function(predicate, list)
+ local partitions = { {}, {} }
+ for _, item in ipairs(list) do
+ table.insert(partitions[predicate(item) and 1 or 2], item)
+ end
+ return partitions
+end, 2)
+
return _
diff --git a/lua/mason-core/installer/context.lua b/lua/mason-core/installer/context.lua
index b6cc24e5..dd9b9617 100644
--- a/lua/mason-core/installer/context.lua
+++ b/lua/mason-core/installer/context.lua
@@ -147,6 +147,7 @@ InstallContext.__index = InstallContext
---@class InstallContextOpts
---@field requested_version string?
+---@field debug boolean?
---@param handle InstallHandle
---@param opts InstallContextOpts
diff --git a/lua/mason-core/installer/init.lua b/lua/mason-core/installer/init.lua
index 2ab33bc6..ba45789e 100644
--- a/lua/mason-core/installer/init.lua
+++ b/lua/mason-core/installer/init.lua
@@ -147,10 +147,16 @@ function M.execute(handle, opts)
context.stdio_sink.stderr(tostring(failure))
context.stdio_sink.stderr "\n"
- -- clean up installation dir
- pcall(function()
- fs.async.rmrf(context.cwd:get())
- end)
+ if not opts.debug then
+ -- clean up installation dir
+ pcall(function()
+ fs.async.rmrf(context.cwd:get())
+ end)
+ else
+ context.stdio_sink.stdout(
+ ("[debug] Installation directory retained at %q.\n"):format(context.cwd:get())
+ )
+ end
-- unlink linked executables (in the rare occasion an error occurs after linking)
linker.unlink(context.package, context.receipt.links)
diff --git a/lua/mason-core/package/init.lua b/lua/mason-core/package/init.lua
index ad7f6037..81d8ca31 100644
--- a/lua/mason-core/package/init.lua
+++ b/lua/mason-core/package/init.lua
@@ -84,7 +84,7 @@ function Package:new_handle()
return handle
end
----@param opts { version: string? }?
+---@param opts? { version: string?, debug: boolean? }
---@return InstallHandle
function Package:install(opts)
opts = opts or {}
@@ -125,6 +125,7 @@ function Package:install(opts)
handle,
{
requested_version = opts.version,
+ debug = opts.debug,
}
)
return handle
diff --git a/lua/mason/api/command.lua b/lua/mason/api/command.lua
index c02b18c0..8cadbc33 100644
--- a/lua/mason/api/command.lua
+++ b/lua/mason/api/command.lua
@@ -78,7 +78,9 @@ local function join_handles(handles)
end
---@param package_specifiers string[]
-local function MasonInstall(package_specifiers)
+---@param opts? { debug: boolean }
+local function MasonInstall(package_specifiers, opts)
+ opts = opts or {}
local Package = require "mason-core.package"
local registry = require "mason-registry"
local valid_packages = filter_valid_packages(package_specifiers)
@@ -96,7 +98,7 @@ local function MasonInstall(package_specifiers)
local handles = _.map(function(pkg_specifier)
local package_name, version = Package.Parse(pkg_specifier)
local pkg = registry.get_package(package_name)
- return pkg:install { version = version }
+ return pkg:install { version = version, debug = opts.debug }
end, valid_packages)
if is_headless then
@@ -110,8 +112,17 @@ local function MasonInstall(package_specifiers)
end
end
+---@param args string[]
+---@return table<string, true> opts, string[] args
+local function parse_args(args)
+ local opts_list, args = unpack(_.partition(_.starts_with "--", args))
+ local opts = _.set_of(_.map(_.gsub("^%-%-", ""), opts_list))
+ return opts, args
+end
+
vim.api.nvim_create_user_command("MasonInstall", function(opts)
- MasonInstall(opts.fargs)
+ local command_opts, packages = parse_args(opts.fargs)
+ MasonInstall(packages, command_opts)
end, {
desc = "Install one or more packages.",
nargs = "+",