From 47fdf54d622bde33391fe7fed6f5b74d0846b7c8 Mon Sep 17 00:00:00 2001 From: William Boman Date: Sun, 5 Feb 2023 01:36:00 +0100 Subject: feat(api/command): accept boolean option notation (#967) Now supports passing options such as `:MasonInstall --force --debug`, which will translate to the following install opt table: ```lua { "force" = true, "debug" = true } ``` --- lua/mason/api/command.lua | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'lua') diff --git a/lua/mason/api/command.lua b/lua/mason/api/command.lua index 3343ea1d..5d09c67d 100644 --- a/lua/mason/api/command.lua +++ b/lua/mason/api/command.lua @@ -78,7 +78,7 @@ local function join_handles(handles) end ---@param package_specifiers string[] ----@param opts? { debug: boolean } +---@param opts? PackageInstallOpts local function MasonInstall(package_specifiers, opts) opts = opts or {} local Package = require "mason-core.package" @@ -97,7 +97,12 @@ local function MasonInstall(package_specifiers, opts) local install_packages = _.map(function(pkg_specifier) local package_name, version = Package.Parse(pkg_specifier) local pkg = registry.get_package(package_name) - return pkg:install { version = version, debug = opts.debug } + return pkg:install { + version = version, + debug = opts.debug, + force = opts.force, + target = opts.target, + } end) if is_headless then @@ -114,11 +119,22 @@ local function MasonInstall(package_specifiers, opts) end end +local parse_opts = _.compose( + _.from_pairs, + _.map(_.compose(function(arg) + if #arg == 2 then + return arg + else + return { arg[1], true } + end + end, _.split "=", _.gsub("^%-%-", ""))) +) + ---@param args string[] ----@return table opts, string[] args +---@return table 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)) + local opts = parse_opts(opts_list) return opts, args end -- cgit v1.2.3-70-g09d2