mirror of
https://github.com/nushell/nushell.git
synced 2025-08-25 08:46:18 +02:00
Sort help message flags by required field (#16476)
closes #16462. The --help flag will now appear after all required flags in help messages. ## Release notes summary - What our users need to know N/A ## Tasks after submitting N/A
This commit is contained in:
@@ -727,6 +727,51 @@ pub enum FormatterValue<'a> {
|
||||
CodeString(&'a str),
|
||||
}
|
||||
|
||||
fn write_flag_to_long_desc<F>(
|
||||
flag: &nu_protocol::Flag,
|
||||
long_desc: &mut String,
|
||||
help_subcolor_one: &str,
|
||||
help_subcolor_two: &str,
|
||||
formatter: &mut F,
|
||||
) where
|
||||
F: FnMut(FormatterValue) -> String,
|
||||
{
|
||||
// Indentation
|
||||
long_desc.push_str(" ");
|
||||
// Short flag shown before long flag
|
||||
if let Some(short) = flag.short {
|
||||
let _ = write!(long_desc, "{help_subcolor_one}-{short}{RESET}");
|
||||
if !flag.long.is_empty() {
|
||||
let _ = write!(long_desc, "{DEFAULT_COLOR},{RESET} ");
|
||||
}
|
||||
}
|
||||
if !flag.long.is_empty() {
|
||||
let _ = write!(long_desc, "{help_subcolor_one}--{}{RESET}", flag.long);
|
||||
}
|
||||
if flag.required {
|
||||
long_desc.push_str(" (required parameter)")
|
||||
}
|
||||
// Type/Syntax shape info
|
||||
if let Some(arg) = &flag.arg {
|
||||
let _ = write!(long_desc, " <{help_subcolor_two}{arg}{RESET}>");
|
||||
}
|
||||
if !flag.desc.is_empty() {
|
||||
let _ = write!(
|
||||
long_desc,
|
||||
": {}",
|
||||
&formatter(FormatterValue::CodeString(&flag.desc))
|
||||
);
|
||||
}
|
||||
if let Some(value) = &flag.default_value {
|
||||
let _ = write!(
|
||||
long_desc,
|
||||
" (default: {})",
|
||||
&formatter(FormatterValue::DefaultValue(value))
|
||||
);
|
||||
}
|
||||
long_desc.push('\n');
|
||||
}
|
||||
|
||||
pub fn get_flags_section<F>(
|
||||
signature: &Signature,
|
||||
help_style: &HelpStyle,
|
||||
@@ -741,42 +786,26 @@ where
|
||||
|
||||
let mut long_desc = String::new();
|
||||
let _ = write!(long_desc, "\n{help_section_name}Flags{RESET}:\n");
|
||||
for flag in &signature.named {
|
||||
// Indentation
|
||||
long_desc.push_str(" ");
|
||||
// Short flag shown before long flag
|
||||
if let Some(short) = flag.short {
|
||||
let _ = write!(long_desc, "{help_subcolor_one}-{short}{RESET}");
|
||||
if !flag.long.is_empty() {
|
||||
let _ = write!(long_desc, "{DEFAULT_COLOR},{RESET} ");
|
||||
}
|
||||
}
|
||||
if !flag.long.is_empty() {
|
||||
let _ = write!(long_desc, "{help_subcolor_one}--{}{RESET}", flag.long);
|
||||
}
|
||||
if flag.required {
|
||||
long_desc.push_str(" (required parameter)")
|
||||
}
|
||||
// Type/Syntax shape info
|
||||
if let Some(arg) = &flag.arg {
|
||||
let _ = write!(long_desc, " <{help_subcolor_two}{arg}{RESET}>");
|
||||
}
|
||||
if !flag.desc.is_empty() {
|
||||
let _ = write!(
|
||||
long_desc,
|
||||
": {}",
|
||||
&formatter(FormatterValue::CodeString(&flag.desc))
|
||||
);
|
||||
}
|
||||
if let Some(value) = &flag.default_value {
|
||||
let _ = write!(
|
||||
long_desc,
|
||||
" (default: {})",
|
||||
&formatter(FormatterValue::DefaultValue(value))
|
||||
);
|
||||
}
|
||||
long_desc.push('\n');
|
||||
|
||||
let help = signature.named.iter().find(|flag| flag.long == "help");
|
||||
let required = signature.named.iter().filter(|flag| flag.required);
|
||||
let optional = signature
|
||||
.named
|
||||
.iter()
|
||||
.filter(|flag| !flag.required && flag.long != "help");
|
||||
|
||||
let flags = required.chain(help).chain(optional);
|
||||
|
||||
for flag in flags {
|
||||
write_flag_to_long_desc(
|
||||
flag,
|
||||
&mut long_desc,
|
||||
help_subcolor_one,
|
||||
help_subcolor_two,
|
||||
&mut formatter,
|
||||
);
|
||||
}
|
||||
|
||||
long_desc
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user