Search code examples
rustargumentsclap

Is there a way to make clap override the [ -h | --help ] flags help text?


I'm following the sample code from Rust Clap Package's docs but can't find any reference regarding help text for auto-generated flags [-h and --help].

extern crate clap;

use clap::{App, Arg, SubCommand};

fn main() {
    let matches = App::new("Command One")
        .version("1.0")
        .author("Some Author <[email protected]>")
        .about("Descripción del comando.")
        .arg(Arg::with_name("config")
            .short("c")
            .long("config")
            .value_name("FILE")
            .help("Sets a custom config file")
            .takes_value(true))
        .arg(Arg::with_name("INPUT")
            .help("Sets the input file to use")
            .required(true)
            .index(1))
        .arg(Arg::with_name("v")
            .short("v")
            .multiple(true)
            .help("Sets the level of verbosity"))

        // *** I'm trying this ***
        .arg(Arg::with_name("help")
            .short("h")
            .long("help")
            .help("A new help text."))
        // ***********

        .subcommand(SubCommand::with_name("test")
            .about("controls testing features")
            .version("1.3")
            .author("Someone E. <[email protected]>")
            .arg(Arg::with_name("debug")
                .short("d")
                .help("print debug information verbosely")))
        .get_matches();

    let config = matches.value_of("config").unwrap_or("default.conf");
    println!("Value for config: {}", config);

    println!("Using input file: {}", matches.value_of("INPUT").unwrap());

    match matches.occurrences_of("v") {
        0 => println!("No verbose info"),
        1 => println!("Some verbose info"),
        2 => println!("Tons of verbose info"),
        3 | _ => println!("Don't be crazy"),
    }

    if let Some(matches) = matches.subcommand_matches("test") {
        if matches.is_present("debug") {
            println!("Printing debug info...");
        } else {
            println!("Printing normally...");
        }
    }
}

Solution

  • To change the description of the -h/--help parameter in the help text, use the help_message method. Likewise, to change the description of -V/--version, use version_message.

    extern crate clap;
    
    use clap::App;
    
    fn main() {
        let matches = App::new("app")
            .help_message("this is the help command")
            .version_message("this is the version command")
            .get_matches_from(&["app", "--help"]);
    }
    

    Output:

    app 
    
    USAGE:
        app
    
    FLAGS:
        -h, --help       this is the help command
        -V, --version    this is the version command