2166: Sort options base on option's short and long representation r=ldm0 a=ldm0



Co-authored-by: Donough Liu <ldm2993593805@163.com>
This commit is contained in:
bors[bot] 2020-10-10 18:54:49 +00:00 committed by GitHub
commit 4f90f3e4bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 20 deletions

View file

@ -210,9 +210,27 @@ impl<'help, 'app, 'parser, 'writer> Help<'help, 'app, 'parser, 'writer> {
debug!("Help::write_args: New Longest...{}", self.longest);
}
let btm = ord_m.entry(arg.disp_ord).or_insert(BTreeMap::new());
// We use name here for alphabetic sorting
// @TODO @maybe perhaps we could do some sort of ordering off of keys?
btm.insert(arg.name, arg);
// Formatting key like this to ensure that:
// 1. Argument has long flags are printed just after short flags.
// 2. For two args both have short flags like `-c` and `-C`, the
// `-C` arg is printed just after the `-c` arg
// 3. For args without short or long flag, print them at last(sorted
// by arg name).
// Example order: -a, -b, -B, -s, --select-file, --select-folder, -x
let key = if let Some(x) = arg.short {
let mut s = x.to_ascii_lowercase().to_string();
s.push(if x.is_ascii_lowercase() { '0' } else { '1' });
s
} else if let Some(x) = arg.long {
x.to_string()
} else {
let mut s = '{'.to_string();
s.push_str(arg.name);
s
};
btm.insert(key, arg);
}
let mut first = true;
for btm in ord_m.values() {

View file

@ -35,13 +35,13 @@ FLAGS:
-V, --version Prints version information
OPTIONS:
-O, --Option <option3> specific vals [possible values: fast, slow]
--long-option-2 <option2> tests long options with exclusions
--maxvals3 <maxvals>... Tests 3 max vals
--minvals2 <minvals>... Tests 2 min vals
--multvals <one> <two> Tests multiple values, not mult occs
--multvalsmo <one> <two> Tests multiple values, and mult occs
-o, --option <opt>... tests options
-O, --Option <option3> specific vals [possible values: fast, slow]
SUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
@ -179,8 +179,8 @@ FLAGS:
-V, --version Prints version information
OPTIONS:
-O, --opt <opt> tests options
-o, --option <option>... tests options";
-o, --option <option>... tests options
-O, --opt <opt> tests options";
static RIPGREP_USAGE: &str = "ripgrep 0.5
@ -390,8 +390,8 @@ USAGE:
conflict [FLAGS]
FLAGS:
--help Prints help information
-h
--help Prints help information
-V, --version Prints version information";
static LAST_ARG: &str = "last 0.1
@ -614,6 +614,22 @@ FLAGS:
-h, --help Prints help information
-V, --version Prints version information";
static OPTION_USAGE_ORDER: &str = "order
USAGE:
order [FLAGS]
FLAGS:
-a
-b
-B
-h, --help Prints help information
-s
--select_file
--select_folder
-V, --version Prints version information
-x";
fn setup() -> App<'static> {
App::new("test")
.author("Kevin K.")
@ -1587,8 +1603,8 @@ OPTIONS:
-s, --speed <SPEED> How fast? [possible values: fast, slow]
NETWORKING:
-n, --no-proxy Do not use system proxy settings
-a, --server-addr Set server address
-n, --no-proxy Do not use system proxy settings
SPECIAL:
-b, --birthday-song <song> Change which song is played for birthdays
@ -2159,3 +2175,23 @@ fn version_about_multi_subcmd_override_long_flag() {
false
));
}
#[test]
fn option_usage_order() {
let app = App::new("order").args(&[
Arg::new("a").short('a'),
Arg::new("B").short('B'),
Arg::new("b").short('b'),
Arg::new("save").short('s'),
Arg::new("select_file").long("select_file"),
Arg::new("select_folder").long("select_folder"),
Arg::new("x").short('x'),
]);
assert!(utils::compare_output(
app,
"order --help",
OPTION_USAGE_ORDER,
false
));
}

View file

@ -46,8 +46,8 @@ USAGE:
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
-v, --visible This text should be visible";
-v, --visible This text should be visible
-V, --version Prints version information";
static HIDDEN_SHORT_ARGS_LONG_HELP: &str = "test 2.31.2
Steve P.
@ -63,11 +63,11 @@ FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
-v, --visible
This text should be visible";
This text should be visible
-V, --version
Prints version information";
/// Ensure hidden with short option
#[test]
@ -134,11 +134,11 @@ FLAGS:
-h, --help
Prints help information
-V, --version
Prints version information
-v, --visible
This text should be visible";
This text should be visible
-V, --version
Prints version information";
#[test]
fn hidden_long_args() {
@ -176,8 +176,8 @@ USAGE:
FLAGS:
-c, --config Some help text describing the --config arg
-h, --help Prints help information
-V, --version Prints version information
-v, --visible This text should be visible";
-v, --visible This text should be visible
-V, --version Prints version information";
#[test]
fn hidden_long_args_short_help() {