mirror of
https://github.com/clap-rs/clap
synced 2024-12-14 06:42:33 +00:00
always add env parameter when passed
This commit is contained in:
parent
797b6b3340
commit
85f0fd1c87
9 changed files with 32 additions and 24 deletions
|
@ -1,4 +1,5 @@
|
|||
// Std
|
||||
use std::borrow::Cow;
|
||||
use std::cmp;
|
||||
use std::collections::BTreeMap;
|
||||
use std::fmt::Display;
|
||||
|
@ -501,7 +502,7 @@ impl<'a> Help<'a> {
|
|||
spec_vals.push(format!(
|
||||
" [env:{}: {}]",
|
||||
env.0.to_string_lossy(),
|
||||
env.1.to_string_lossy()
|
||||
env.1.map_or(Cow::Borrowed(""), |val| val.to_string_lossy())
|
||||
));
|
||||
}
|
||||
if !a.is_set(ArgSettings::HideDefaultValue) {
|
||||
|
|
|
@ -1796,7 +1796,7 @@ impl<'n, 'e> AnyArg<'n, 'e> for App<'n, 'e> {
|
|||
fn default_vals_ifs(&self) -> Option<map::Values<(&'n str, Option<&'e OsStr>, &'e OsStr)>> {
|
||||
None
|
||||
}
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, &'s OsString)> { None }
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, Option<&'s OsString>)> { None }
|
||||
fn longest_filter(&self) -> bool { true }
|
||||
fn aliases(&self) -> Option<Vec<&'e str>> {
|
||||
if let Some(ref aliases) = self.p.meta.aliases {
|
||||
|
|
|
@ -1794,18 +1794,22 @@ impl<'a, 'b> Parser<'a, 'b>
|
|||
($_self:ident, $a:ident, $m:ident) => {
|
||||
if let Some(ref val) = $a.v.env {
|
||||
if $m.get($a.b.name).map(|ma| ma.vals.len()).map(|len| len == 0).unwrap_or(false) {
|
||||
$_self.add_val_to_arg($a, OsStr::new(&val.1), $m)?;
|
||||
if let Some(ref val) = val.1 {
|
||||
$_self.add_val_to_arg($a, OsStr::new(val), $m)?;
|
||||
|
||||
if $_self.cache.map_or(true, |name| name != $a.name()) {
|
||||
arg_post_processing!($_self, $a, $m);
|
||||
$_self.cache = Some($a.name());
|
||||
if $_self.cache.map_or(true, |name| name != $a.name()) {
|
||||
arg_post_processing!($_self, $a, $m);
|
||||
$_self.cache = Some($a.name());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$_self.add_val_to_arg($a, OsStr::new(&val.1), $m)?;
|
||||
if let Some(ref val) = val.1 {
|
||||
$_self.add_val_to_arg($a, OsStr::new(val), $m)?;
|
||||
|
||||
if $_self.cache.map_or(true, |name| name != $a.name()) {
|
||||
arg_post_processing!($_self, $a, $m);
|
||||
$_self.cache = Some($a.name());
|
||||
if $_self.cache.map_or(true, |name| name != $a.name()) {
|
||||
arg_post_processing!($_self, $a, $m);
|
||||
$_self.cache = Some($a.name());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ pub trait AnyArg<'n, 'e>: std_fmt::Display {
|
|||
fn long_help(&self) -> Option<&'e str>;
|
||||
fn default_val(&self) -> Option<&'e OsStr>;
|
||||
fn default_vals_ifs(&self) -> Option<map::Values<(&'n str, Option<&'e OsStr>, &'e OsStr)>>;
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, &'s OsString)>;
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, Option<&'s OsString>)>;
|
||||
fn longest_filter(&self) -> bool;
|
||||
fn val_terminator(&self) -> Option<&'e str>;
|
||||
}
|
||||
|
|
|
@ -3421,7 +3421,7 @@ impl<'a, 'b> Arg<'a, 'b> {
|
|||
pub fn env_os(mut self, name: &'a OsStr) -> Self {
|
||||
self.setb(ArgSettings::TakesValue);
|
||||
|
||||
self.v.env = env::var_os(name).map(|value| (name, value));
|
||||
self.v.env = Some((name, env::var_os(name)));
|
||||
self
|
||||
}
|
||||
|
||||
|
|
|
@ -89,7 +89,7 @@ impl<'n, 'e> AnyArg<'n, 'e> for FlagBuilder<'n, 'e> {
|
|||
fn default_vals_ifs(&self) -> Option<map::Values<(&'n str, Option<&'e OsStr>, &'e OsStr)>> {
|
||||
None
|
||||
}
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, &'s OsString)> { None }
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, Option<&'s OsString>)> { None }
|
||||
fn longest_filter(&self) -> bool { self.s.long.is_some() }
|
||||
fn aliases(&self) -> Option<Vec<&'e str>> {
|
||||
if let Some(ref aliases) = self.s.aliases {
|
||||
|
|
|
@ -140,8 +140,11 @@ impl<'n, 'e> AnyArg<'n, 'e> for OptBuilder<'n, 'e> {
|
|||
fn default_vals_ifs(&self) -> Option<map::Values<(&'n str, Option<&'e OsStr>, &'e OsStr)>> {
|
||||
self.v.default_vals_ifs.as_ref().map(|vm| vm.values())
|
||||
}
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, &'s OsString)> {
|
||||
self.v.env.as_ref().map(|&(key, ref value)| (key, value))
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, Option<&'s OsString>)> {
|
||||
self.v
|
||||
.env
|
||||
.as_ref()
|
||||
.map(|&(key, ref value)| (key, value.as_ref()))
|
||||
}
|
||||
fn longest_filter(&self) -> bool { true }
|
||||
fn aliases(&self) -> Option<Vec<&'e str>> {
|
||||
|
|
|
@ -39,8 +39,8 @@ impl<'n, 'e> PosBuilder<'n, 'e> {
|
|||
v: Valued::from(a),
|
||||
index: idx,
|
||||
};
|
||||
if a.v.max_vals.is_some() || a.v.min_vals.is_some() ||
|
||||
(a.v.num_vals.is_some() && a.v.num_vals.unwrap() > 1)
|
||||
if a.v.max_vals.is_some() || a.v.min_vals.is_some()
|
||||
|| (a.v.num_vals.is_some() && a.v.num_vals.unwrap() > 1)
|
||||
{
|
||||
pb.b.settings.set(ArgSettings::Multiple);
|
||||
}
|
||||
|
@ -48,8 +48,8 @@ impl<'n, 'e> PosBuilder<'n, 'e> {
|
|||
}
|
||||
|
||||
pub fn from_arg(mut a: Arg<'n, 'e>, idx: u64) -> Self {
|
||||
if a.v.max_vals.is_some() || a.v.min_vals.is_some() ||
|
||||
(a.v.num_vals.is_some() && a.v.num_vals.unwrap() > 1)
|
||||
if a.v.max_vals.is_some() || a.v.min_vals.is_some()
|
||||
|| (a.v.num_vals.is_some() && a.v.num_vals.unwrap() > 1)
|
||||
{
|
||||
a.b.settings.set(ArgSettings::Multiple);
|
||||
}
|
||||
|
@ -109,8 +109,8 @@ impl<'n, 'e> Display for PosBuilder<'n, 'e> {
|
|||
} else {
|
||||
write!(f, "<{}>", self.b.name)?;
|
||||
}
|
||||
if self.b.settings.is_set(ArgSettings::Multiple) &&
|
||||
(self.v.val_names.is_none() || self.v.val_names.as_ref().unwrap().len() == 1)
|
||||
if self.b.settings.is_set(ArgSettings::Multiple)
|
||||
&& (self.v.val_names.is_none() || self.v.val_names.as_ref().unwrap().len() == 1)
|
||||
{
|
||||
write!(f, "...")?;
|
||||
}
|
||||
|
@ -152,11 +152,11 @@ impl<'n, 'e> AnyArg<'n, 'e> for PosBuilder<'n, 'e> {
|
|||
self.v.default_vals_ifs.as_ref().map(|vm| vm.values())
|
||||
}
|
||||
fn default_val(&self) -> Option<&'e OsStr> { self.v.default_val }
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, &'s OsString)> {
|
||||
fn env<'s>(&'s self) -> Option<(&'n OsStr, Option<&'s OsString>)> {
|
||||
self.v
|
||||
.env
|
||||
.as_ref()
|
||||
.map(|&(key, ref value)| (key, value))
|
||||
.map(|&(key, ref value)| (key, value.as_ref()))
|
||||
}
|
||||
fn longest_filter(&self) -> bool { true }
|
||||
fn aliases(&self) -> Option<Vec<&'e str>> { None }
|
||||
|
|
|
@ -21,7 +21,7 @@ where
|
|||
pub val_delim: Option<char>,
|
||||
pub default_val: Option<&'b OsStr>,
|
||||
pub default_vals_ifs: Option<VecMap<(&'a str, Option<&'b OsStr>, &'b OsStr)>>,
|
||||
pub env: Option<(&'a OsStr, OsString)>,
|
||||
pub env: Option<(&'a OsStr, Option<OsString>)>,
|
||||
pub terminator: Option<&'b str>,
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue