Skip to content

Commit fb41d06

Browse files
committed
api(Arg): adds Arg::hide_env_values(bool) which allows one to hide any current env values and display only the key in help messages
1 parent a652db0 commit fb41d06

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

src/app/help.rs

+10-4
Original file line numberDiff line numberDiff line change
@@ -505,11 +505,17 @@ impl<'a> Help<'a> {
505505
env.0,
506506
env.1
507507
);
508-
spec_vals.push(format!(
509-
" [env: {}={}]",
508+
let env_val = if !a.is_set(ArgSettings::HideEnvValues) {
509+
format!("={}", env.1.map_or(Cow::Borrowed(""), |val| val.to_string_lossy()))
510+
} else {
511+
String::new()
512+
};
513+
let env_info = format!(
514+
" [env: {}{}]",
510515
env.0.to_string_lossy(),
511-
env.1.map_or(Cow::Borrowed(""), |val| val.to_string_lossy())
512-
));
516+
env_val
517+
);
518+
spec_vals.push(env_info);
513519
}
514520
if !a.is_set(ArgSettings::HideDefaultValue) {
515521
if let Some(pv) = a.default_val() {

src/args/arg.rs

+9
Original file line numberDiff line numberDiff line change
@@ -3515,6 +3515,15 @@ impl<'a, 'b> Arg<'a, 'b> {
35153515
self
35163516
}
35173517

3518+
/// @TODO @p2 @docs @release: write docs
3519+
pub fn hide_env_values(self, hide: bool) -> Self {
3520+
if hide {
3521+
self.set(ArgSettings::HideEnvValues)
3522+
} else {
3523+
self.unset(ArgSettings::HideEnvValues)
3524+
}
3525+
}
3526+
35183527
/// When set to `true` the help string will be displayed on the line after the argument and
35193528
/// indented once. This can be helpful for arguments with very long or complex help messages.
35203529
/// This can also be helpful for arguments with very long flag names, or many/long value names.

src/args/settings.rs

+9
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ bitflags! {
2222
const LAST = 1 << 14;
2323
const HIDE_DEFAULT_VAL = 1 << 15;
2424
const CASE_INSENSITIVE = 1 << 16;
25+
const HIDE_ENV_VALS = 1 << 17;
2526
}
2627
}
2728

@@ -49,6 +50,7 @@ impl ArgFlags {
4950
RequireEquals => Flags::REQUIRE_EQUALS,
5051
Last => Flags::LAST,
5152
CaseInsensitive => Flags::CASE_INSENSITIVE,
53+
HideEnvValues => Flags::HIDE_ENV_VALS,
5254
HideDefaultValue => Flags::HIDE_DEFAULT_VAL
5355
}
5456
}
@@ -96,6 +98,8 @@ pub enum ArgSettings {
9698
HideDefaultValue,
9799
/// Makes `Arg::possible_values` case insensitive
98100
CaseInsensitive,
101+
/// Hides ENV values in the help message
102+
HideEnvValues,
99103
#[doc(hidden)] RequiredUnlessAll,
100104
#[doc(hidden)] ValueDelimiterNotSet,
101105
}
@@ -121,6 +125,7 @@ impl FromStr for ArgSettings {
121125
"last" => Ok(ArgSettings::Last),
122126
"hidedefaultvalue" => Ok(ArgSettings::HideDefaultValue),
123127
"caseinsensitive" => Ok(ArgSettings::CaseInsensitive),
128+
"hideenvvalues" => Ok(ArgSettings::HideEnvValues),
124129
_ => Err("unknown ArgSetting, cannot convert from str".to_owned()),
125130
}
126131
}
@@ -197,6 +202,10 @@ mod test {
197202
"caseinsensitive".parse::<ArgSettings>().unwrap(),
198203
ArgSettings::CaseInsensitive
199204
);
205+
assert_eq!(
206+
"hideenvvalues".parse::<ArgSettings>().unwrap(),
207+
ArgSettings::HideEnvValues
208+
);
200209
assert!("hahahaha".parse::<ArgSettings>().is_err());
201210
}
202211
}

0 commit comments

Comments
 (0)