From b68e21a01069a937ab2bfd7f99683d0126524a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E6=83=B3=E5=AE=9E=E7=8E=B0=E5=AE=B6?= <835683985@qq.com> Date: Sat, 11 Jun 2022 07:01:48 +0800 Subject: [PATCH 1/5] Fix default_value_ifs_os function, should directly pass in parameter arg instead of arg.key() --- src/builder/arg.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/builder/arg.rs b/src/builder/arg.rs index 6bd79cc69f3..efd53a5266c 100644 --- a/src/builder/arg.rs +++ b/src/builder/arg.rs @@ -3303,7 +3303,7 @@ impl<'help> Arg<'help> { ifs: &[(T, Option<&'help OsStr>, Option<&'help OsStr>)], ) -> Self { for (arg, val, default) in ifs { - self = self.default_value_if_os(arg.key(), *val, *default); + self = self.default_value_if_os(arg, *val, *default); } self } From a2871b0858345c672bd74360dcbe4a6a5ca7e715 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E4=BC=9F?= <835683985@qq.com> Date: Sat, 11 Jun 2022 09:18:32 +0800 Subject: [PATCH 2/5] fix:default_value_ifs_os modified arg name, it replaces arg with arg.key(), but it call self.default_value_if_os. so please delete `.key()`. --- tests/builder/arg_settings.rs | 38 ++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/tests/builder/arg_settings.rs b/tests/builder/arg_settings.rs index d4e900ab92c..8adf6791b10 100644 --- a/tests/builder/arg_settings.rs +++ b/tests/builder/arg_settings.rs @@ -1,5 +1,7 @@ #![allow(deprecated)] -use clap::{Arg, ArgSettings}; + +use std::ffi::OsStr; +use clap::{Arg, ArgSettings, Command}; #[test] fn setting() { @@ -42,3 +44,37 @@ fn unset_setting_bitor() { assert!(!m.is_hide_set(), "{:#?}", m); assert!(!m.is_last_set(), "{:#?}", m); } + +#[test] +fn default_value_ifs_os() { + let cmd = Command::new("my_cargo") + .arg( + Arg::new("flag") + .long("flag") + .allow_invalid_utf8(true) + .takes_value(true) + ) + .arg( + arg!(option: -o --option [option] "option arg") + .allow_invalid_utf8(true) + ) + .arg( + Arg::new("other") + .long("other") + .allow_invalid_utf8(true) + .default_value_ifs_os(&[ + ("flag", Some("标记2").map(OsStr::new), Some("flag=标记2").map(OsStr::new)) + ]) + ); + let result = cmd.try_get_matches_from([OsStr::new("my_cargo"), OsStr::new("--flag"), OsStr::new("标记2")]); + assert!(result.is_ok()); + match result { + Ok(arg_matches) => { + assert_eq!(arg_matches.value_of_os("flag"), Some(OsStr::new("标记2"))); + assert_eq!(arg_matches.value_of_os("other"), Some(OsStr::new("flag=标记2"))); + } + Err(e) => { + println!("{}", e.to_string()); + } + } +} From 0cafd895f75bec0e0afd5f37c9912ec59dffb047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E4=BC=9F?= <835683985@qq.com> Date: Sat, 11 Jun 2022 09:37:24 +0800 Subject: [PATCH 3/5] modify test case for default_value_ifs_os --- tests/builder/arg_settings.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/builder/arg_settings.rs b/tests/builder/arg_settings.rs index 8adf6791b10..9d443119cb6 100644 --- a/tests/builder/arg_settings.rs +++ b/tests/builder/arg_settings.rs @@ -1,7 +1,6 @@ #![allow(deprecated)] - -use std::ffi::OsStr; use clap::{Arg, ArgSettings, Command}; +use std::ffi::OsStr; #[test] fn setting() { @@ -54,10 +53,6 @@ fn default_value_ifs_os() { .allow_invalid_utf8(true) .takes_value(true) ) - .arg( - arg!(option: -o --option [option] "option arg") - .allow_invalid_utf8(true) - ) .arg( Arg::new("other") .long("other") From 66b7d0a7a9e9ebf4c954b9ce552b02873d1d3f4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E4=BC=9F?= <835683985@qq.com> Date: Sat, 11 Jun 2022 09:48:56 +0800 Subject: [PATCH 4/5] format test case --- tests/builder/arg_settings.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/builder/arg_settings.rs b/tests/builder/arg_settings.rs index 9d443119cb6..1b40159725c 100644 --- a/tests/builder/arg_settings.rs +++ b/tests/builder/arg_settings.rs @@ -1,4 +1,5 @@ #![allow(deprecated)] + use clap::{Arg, ArgSettings, Command}; use std::ffi::OsStr; From e19a2047d0a77b1ed0075c25027c36b62431b879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E4=BC=9F?= <835683985@qq.com> Date: Sat, 11 Jun 2022 09:57:15 +0800 Subject: [PATCH 5/5] format test case for default_value_ifs_os --- tests/builder/arg_settings.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/builder/arg_settings.rs b/tests/builder/arg_settings.rs index 1b40159725c..719721605ec 100644 --- a/tests/builder/arg_settings.rs +++ b/tests/builder/arg_settings.rs @@ -52,22 +52,31 @@ fn default_value_ifs_os() { Arg::new("flag") .long("flag") .allow_invalid_utf8(true) - .takes_value(true) + .takes_value(true), ) .arg( Arg::new("other") .long("other") .allow_invalid_utf8(true) - .default_value_ifs_os(&[ - ("flag", Some("标记2").map(OsStr::new), Some("flag=标记2").map(OsStr::new)) - ]) + .default_value_ifs_os(&[( + "flag", + Some("标记2").map(OsStr::new), + Some("flag=标记2").map(OsStr::new), + )]), ); - let result = cmd.try_get_matches_from([OsStr::new("my_cargo"), OsStr::new("--flag"), OsStr::new("标记2")]); + let result = cmd.try_get_matches_from([ + OsStr::new("my_cargo"), + OsStr::new("--flag"), + OsStr::new("标记2"), + ]); assert!(result.is_ok()); match result { Ok(arg_matches) => { assert_eq!(arg_matches.value_of_os("flag"), Some(OsStr::new("标记2"))); - assert_eq!(arg_matches.value_of_os("other"), Some(OsStr::new("flag=标记2"))); + assert_eq!( + arg_matches.value_of_os("other"), + Some(OsStr::new("flag=标记2")), + ); } Err(e) => { println!("{}", e.to_string());