mirror of
https://git.proxmox.com/git/proxmox
synced 2025-08-07 07:18:58 +00:00
CliCommandMap: add usage_skip_options to suppress options in generate_usage_str()
This is useful for commands where sub-commands all takes the same options. You can supress them in the generated manual pages (printdoc), and instead document them somewhere else.
This commit is contained in:
parent
50e9148853
commit
d014c6f2d1
@ -356,7 +356,7 @@ fn prepare_cli_command(def: &CommandLineInterface) -> (String, Vec<String>) {
|
|||||||
if args[0] == "printdoc" {
|
if args[0] == "printdoc" {
|
||||||
let usage = match def {
|
let usage = match def {
|
||||||
CommandLineInterface::Simple(cli_cmd) => {
|
CommandLineInterface::Simple(cli_cmd) => {
|
||||||
generate_usage_str(&prefix, &cli_cmd, DocumentationFormat::ReST, "")
|
generate_usage_str(&prefix, &cli_cmd, DocumentationFormat::ReST, "", &[])
|
||||||
}
|
}
|
||||||
CommandLineInterface::Nested(map) => {
|
CommandLineInterface::Nested(map) => {
|
||||||
generate_nested_usage(&prefix, &map, DocumentationFormat::ReST)
|
generate_nested_usage(&prefix, &map, DocumentationFormat::ReST)
|
||||||
|
@ -60,12 +60,17 @@ pub fn generate_usage_str(
|
|||||||
cli_cmd: &CliCommand,
|
cli_cmd: &CliCommand,
|
||||||
format: DocumentationFormat,
|
format: DocumentationFormat,
|
||||||
indent: &str,
|
indent: &str,
|
||||||
|
skip_options: &'static [&'static str],
|
||||||
) -> String {
|
) -> String {
|
||||||
let arg_param = cli_cmd.arg_param;
|
let arg_param = cli_cmd.arg_param;
|
||||||
let fixed_param = &cli_cmd.fixed_param;
|
let fixed_param = &cli_cmd.fixed_param;
|
||||||
let schema = cli_cmd.info.parameters;
|
let schema = cli_cmd.info.parameters;
|
||||||
|
|
||||||
let mut done_hash = HashSet::<&str>::new();
|
let mut done_hash = HashSet::<&str>::new();
|
||||||
|
for option in skip_options {
|
||||||
|
done_hash.insert(option);
|
||||||
|
}
|
||||||
|
|
||||||
let mut args = String::new();
|
let mut args = String::new();
|
||||||
|
|
||||||
for positional_arg in arg_param {
|
for positional_arg in arg_param {
|
||||||
@ -178,7 +183,7 @@ pub fn generate_usage_str(
|
|||||||
|
|
||||||
/// Print command usage for simple commands to ``stderr``.
|
/// Print command usage for simple commands to ``stderr``.
|
||||||
pub fn print_simple_usage_error(prefix: &str, cli_cmd: &CliCommand, err_msg: &str) {
|
pub fn print_simple_usage_error(prefix: &str, cli_cmd: &CliCommand, err_msg: &str) {
|
||||||
let usage = generate_usage_str(prefix, cli_cmd, DocumentationFormat::Long, "");
|
let usage = generate_usage_str(prefix, cli_cmd, DocumentationFormat::Long, "", &[]);
|
||||||
eprint!("Error: {}\nUsage: {}", err_msg, usage);
|
eprint!("Error: {}\nUsage: {}", err_msg, usage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,6 +202,8 @@ pub fn generate_nested_usage(
|
|||||||
let mut cmds: Vec<&String> = def.commands.keys().collect();
|
let mut cmds: Vec<&String> = def.commands.keys().collect();
|
||||||
cmds.sort();
|
cmds.sort();
|
||||||
|
|
||||||
|
let skip_options = def.usage_skip_options;
|
||||||
|
|
||||||
let mut usage = String::new();
|
let mut usage = String::new();
|
||||||
|
|
||||||
for cmd in cmds {
|
for cmd in cmds {
|
||||||
@ -211,7 +218,7 @@ pub fn generate_nested_usage(
|
|||||||
if !usage.is_empty() && format == DocumentationFormat::ReST {
|
if !usage.is_empty() && format == DocumentationFormat::ReST {
|
||||||
usage.push_str("----\n\n");
|
usage.push_str("----\n\n");
|
||||||
}
|
}
|
||||||
usage.push_str(&generate_usage_str(&new_prefix, cli_cmd, format, ""));
|
usage.push_str(&generate_usage_str(&new_prefix, cli_cmd, format, "", skip_options));
|
||||||
}
|
}
|
||||||
CommandLineInterface::Nested(map) => {
|
CommandLineInterface::Nested(map) => {
|
||||||
usage.push_str(&generate_nested_usage(&new_prefix, map, format));
|
usage.push_str(&generate_nested_usage(&new_prefix, map, format));
|
||||||
@ -268,7 +275,7 @@ pub fn print_help(
|
|||||||
CommandLineInterface::Simple(cli_cmd) => {
|
CommandLineInterface::Simple(cli_cmd) => {
|
||||||
println!(
|
println!(
|
||||||
"Usage: {}",
|
"Usage: {}",
|
||||||
generate_usage_str(&prefix, cli_cmd, format, "")
|
generate_usage_str(&prefix, cli_cmd, format, "", &[])
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,6 +102,8 @@ pub struct CliCommandMap {
|
|||||||
/// command definitions.
|
/// command definitions.
|
||||||
pub commands: HashMap<String, CommandLineInterface>,
|
pub commands: HashMap<String, CommandLineInterface>,
|
||||||
pub aliases: Vec<(Vec<&'static str>, Vec<&'static str>)>,
|
pub aliases: Vec<(Vec<&'static str>, Vec<&'static str>)>,
|
||||||
|
/// List of options to suppress in generate_usage
|
||||||
|
pub usage_skip_options: &'static [&'static str],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl CliCommandMap {
|
impl CliCommandMap {
|
||||||
@ -121,6 +123,13 @@ impl CliCommandMap {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn usage_skip_options(mut self, list: &'static [&'static str]) -> Self {
|
||||||
|
self.usage_skip_options = list;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Insert the help command.
|
/// Insert the help command.
|
||||||
pub fn insert_help(mut self) -> Self {
|
pub fn insert_help(mut self) -> Self {
|
||||||
self.commands
|
self.commands
|
||||||
|
Loading…
Reference in New Issue
Block a user