summaryrefslogtreecommitdiff
path: root/cli/args/flags.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/args/flags.rs')
-rw-r--r--cli/args/flags.rs71
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()
+ }
+ );
+ }
}