From afc29c28aedcba016a5c4205080c5907fd7bde0b Mon Sep 17 00:00:00 2001 From: Cre3per <12541974+Cre3per@users.noreply.github.com> Date: Wed, 10 Aug 2022 17:55:34 +0200 Subject: [PATCH] fix(task): subcommand parser skips global args (#15297) --- cli/args/flags.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/cli/args/flags.rs b/cli/args/flags.rs index f4a379cf72..9feef54b09 100644 --- a/cli/args/flags.rs +++ b/cli/args/flags.rs @@ -2582,7 +2582,8 @@ fn task_parse( } if let Some(mut index) = matches.index_of("task_name_and_args") { - index += 1; // skip `task` + let task_word_index = raw_args.iter().position(|el| el == "task").unwrap(); + let raw_args = &raw_args[task_word_index..]; // temporary workaround until https://github.com/clap-rs/clap/issues/1538 is fixed while index < raw_args.len() { @@ -5764,6 +5765,25 @@ mod tests { ); } + #[test] + fn task_with_global_flags() { + // can fail if the custom parser in task_parse() starts at the wrong index + let r = + flags_from_vec(svec!["deno", "--quiet", "--unstable", "task", "build"]); + assert_eq!( + r.unwrap(), + Flags { + subcommand: DenoSubcommand::Task(TaskFlags { + cwd: None, + task: "build".to_string(), + }), + unstable: true, + log_level: Some(log::Level::Error), + ..Flags::default() + } + ); + } + #[test] fn task_subcommand_empty() { let r = flags_from_vec(svec!["deno", "task"]);