diff options
Diffstat (limited to 'cli/args/flags.rs')
-rw-r--r-- | cli/args/flags.rs | 71 |
1 files changed, 68 insertions, 3 deletions
diff --git a/cli/args/flags.rs b/cli/args/flags.rs index ec4433f58..05d9a3973 100644 --- a/cli/args/flags.rs +++ b/cli/args/flags.rs @@ -36,6 +36,11 @@ pub struct FileFlags { } #[derive(Clone, Debug, Default, Eq, PartialEq)] +pub struct AddFlags { + pub packages: Vec<String>, +} + +#[derive(Clone, Debug, Default, Eq, PartialEq)] pub struct BenchFlags { pub files: FileFlags, pub filter: Option<String>, @@ -307,6 +312,7 @@ pub struct PublishFlags { #[derive(Clone, Debug, Eq, PartialEq)] pub enum DenoSubcommand { + Add(AddFlags), Bench(BenchFlags), Bundle(BundleFlags), Cache(CacheFlags), @@ -760,9 +766,9 @@ impl Flags { | Test(_) | Bench(_) | Repl(_) | Compile(_) | Publish(_) => { std::env::current_dir().ok() } - Bundle(_) | Completions(_) | Doc(_) | Fmt(_) | Init(_) | Install(_) - | Uninstall(_) | Jupyter(_) | Lsp | Lint(_) | Types | Upgrade(_) - | Vendor(_) => None, + Add(_) | Bundle(_) | Completions(_) | Doc(_) | Fmt(_) | Init(_) + | Install(_) | Uninstall(_) | Jupyter(_) | Lsp | Lint(_) | Types + | Upgrade(_) | Vendor(_) => None, } } @@ -923,6 +929,7 @@ pub fn flags_from_vec(args: Vec<String>) -> clap::error::Result<Flags> { if let Some((subcommand, mut m)) = matches.remove_subcommand() { match subcommand.as_str() { + "add" => add_parse(&mut flags, &mut m), "bench" => bench_parse(&mut flags, &mut m), "bundle" => bundle_parse(&mut flags, &mut m), "cache" => cache_parse(&mut flags, &mut m), @@ -1078,6 +1085,7 @@ fn clap_root() -> Command { .subcommand(run_subcommand()) .defer(|cmd| { cmd + .subcommand(add_subcommand()) .subcommand(bench_subcommand()) .subcommand(bundle_subcommand()) .subcommand(cache_subcommand()) @@ -1107,6 +1115,30 @@ fn clap_root() -> Command { .after_help(ENV_VARIABLES_HELP) } +fn add_subcommand() -> Command { + Command::new("add") + .about("Add dependencies") + .long_about( + "Add dependencies to the configuration file. + + deno add @std/path + +You can add multiple dependencies at once: + + deno add @std/path @std/assert +", + ) + .defer(|cmd| { + cmd.arg( + Arg::new("packages") + .help("List of packages to add") + .required(true) + .num_args(1..) + .action(ArgAction::Append), + ) + }) +} + fn bench_subcommand() -> Command { Command::new("bench") .about("Run benchmarks") @@ -3218,6 +3250,11 @@ fn unsafely_ignore_certificate_errors_arg() -> Arg { .value_parser(flags_net::validator) } +fn add_parse(flags: &mut Flags, matches: &mut ArgMatches) { + let packages = matches.remove_many::<String>("packages").unwrap().collect(); + flags.subcommand = DenoSubcommand::Add(AddFlags { packages }); +} + fn bench_parse(flags: &mut Flags, matches: &mut ArgMatches) { flags.type_check_mode = TypeCheckMode::Local; @@ -8599,4 +8636,32 @@ mod tests { } ); } + + #[test] + fn add_subcommand() { + let r = flags_from_vec(svec!["deno", "add"]); + r.unwrap_err(); + + let r = flags_from_vec(svec!["deno", "add", "@david/which"]); + assert_eq!( + r.unwrap(), + Flags { + subcommand: DenoSubcommand::Add(AddFlags { + packages: svec!["@david/which"], + }), + ..Flags::default() + } + ); + + let r = flags_from_vec(svec!["deno", "add", "@david/which", "@luca/hello"]); + assert_eq!( + r.unwrap(), + Flags { + subcommand: DenoSubcommand::Add(AddFlags { + packages: svec!["@david/which", "@luca/hello"], + }), + ..Flags::default() + } + ); + } } |