Skip to content

Commit ca511de

Browse files
committed
imp(Aliases): improves readability of asliases in help messages
Aliases are now displayed after the help text inside a `[aliases: als1, als2, als3]` style box. Closes #526 Closes #529
1 parent 50ca205 commit ca511de

File tree

6 files changed

+33
-15
lines changed

6 files changed

+33
-15
lines changed

src/app/help.rs

+11-15
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,17 @@ impl<'a> Help<'a> {
461461
"".into()
462462
}
463463
});
464+
} else if let Some(ref aliases) = a.aliases() {
465+
debugln!("Writing aliases");
466+
return format!(" [aliases: {}]",
467+
if self.color {
468+
aliases.iter()
469+
.map(|v| format!("{}", self.cizer.good(v)))
470+
.collect::<Vec<_>>()
471+
.join(", ")
472+
} else {
473+
aliases.join(", ")
474+
});
464475
} else if !self.hide_pv {
465476
debugln!("Writing values");
466477
if let Some(ref pv) = a.possible_vals() {
@@ -548,21 +559,6 @@ impl<'a> Help<'a> {
548559

549560
let mut ord_m = VecMap::new();
550561
for sc in parser.subcommands.iter().filter(|s| !s.p.is_set(AppSettings::Hidden)) {
551-
let sc = if let Some(ref aliases) = sc.p.meta.aliases {
552-
let mut a = App::new(format!("{}|{}", &*sc.p.meta.name, aliases.iter()
553-
.filter(|&&(_, vis)| vis)
554-
.map(|&(n, _)| n)
555-
.collect::<Vec<_>>()
556-
.join("|")));
557-
a = if let Some(about) = sc.p.meta.about {
558-
a.about(about)
559-
} else {
560-
a
561-
};
562-
a
563-
} else {
564-
sc.clone()
565-
};
566562
let btm = ord_m.entry(sc.p.meta.disp_ord).or_insert(BTreeMap::new());
567563
longest = cmp::max(longest, sc.p.meta.name.len());
568564
btm.insert(sc.p.meta.name.clone(), sc.clone());

src/app/mod.rs

+12
Original file line numberDiff line numberDiff line change
@@ -1261,6 +1261,18 @@ impl<'n, 'e> AnyArg<'n, 'e> for App<'n, 'e> {
12611261
fn longest_filter(&self) -> bool {
12621262
true
12631263
}
1264+
fn aliases(&self) -> Option<Vec<&'e str>> {
1265+
if let Some(ref aliases) = self.p.meta.aliases {
1266+
let vis_aliases: Vec<_> = aliases.iter().filter_map(|&(n,v)| if v { Some(n) } else {None}).collect();
1267+
if vis_aliases.is_empty() {
1268+
None
1269+
} else {
1270+
Some(vis_aliases)
1271+
}
1272+
} else {
1273+
None
1274+
}
1275+
}
12641276
}
12651277

12661278
impl<'n, 'e> fmt::Display for App<'n, 'e> {

src/args/any_arg.rs

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use args::settings::ArgSettings;
88
pub trait AnyArg<'n, 'e> {
99
fn name(&self) -> &'n str;
1010
fn overrides(&self) -> Option<&[&'e str]>;
11+
fn aliases(&self) -> Option<Vec<&'e str>>;
1112
fn requires(&self) -> Option<&[&'e str]>;
1213
fn blacklist(&self) -> Option<&[&'e str]>;
1314
fn required_unless(&self) -> Option<&[&'e str]>;

src/args/arg_builder/flag.rs

+3
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,9 @@ impl<'n, 'e> AnyArg<'n, 'e> for FlagBuilder<'n, 'e> {
166166
fn longest_filter(&self) -> bool {
167167
self.long.is_some()
168168
}
169+
fn aliases(&self) -> Option<Vec<&'e str>> {
170+
None
171+
}
169172
}
170173

171174
impl<'n, 'e> DispOrder for FlagBuilder<'n, 'e> {

src/args/arg_builder/option.rs

+3
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ impl<'n, 'e> AnyArg<'n, 'e> for OptBuilder<'n, 'e> {
248248
fn longest_filter(&self) -> bool {
249249
true
250250
}
251+
fn aliases(&self) -> Option<Vec<&'e str>> {
252+
None
253+
}
251254
}
252255

253256
impl<'n, 'e> DispOrder for OptBuilder<'n, 'e> {

src/args/arg_builder/positional.rs

+3
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,9 @@ impl<'n, 'e> AnyArg<'n, 'e> for PosBuilder<'n, 'e> {
238238
fn longest_filter(&self) -> bool {
239239
true
240240
}
241+
fn aliases(&self) -> Option<Vec<&'e str>> {
242+
None
243+
}
241244
}
242245

243246
impl<'n, 'e> DispOrder for PosBuilder<'n, 'e> {

0 commit comments

Comments
 (0)