Crate clap

source ·
Expand description

Command Line Argument Parser for Rust

Quick Links:

  • Derive [tutorial][_derive::_tutorial] and [reference][_derive]
  • Builder [tutorial][_tutorial] and reference
  • [Cookbook][_cookbook]
  • [FAQ][_faq]
  • Discussions

Aspirations

  • Out of the box, users get a polished CLI experience
    • Including common argument behavior, help generation, suggested fixes for users, colored output, shell completions, etc
  • Flexible enough to port your existing CLI interface
    • However, we won’t necessarily streamline support for each use case
  • Reasonable parse performance
  • Resilient maintainership, including
    • Willing to break compatibility rather than batching up breaking changes in large releases
    • Leverage feature flags to keep to one active branch
    • Being under WG-CLI to increase the bus factor
  • We follow semver and will wait about 6-9 months between major breaking changes
  • We will support the last two minor Rust releases (MSRV, currently 1.56.1)

While these aspirations can be at odds with fast build times and low binary size, we will still strive to keep these reasonable for the flexibility you get. Check out the argparse-benchmarks for CLI parsers optimized for other use cases.

Example

Run

$ cargo add clap --features derive

(See also [feature flag reference][_features])

Then define your CLI in main.rs:

use clap::Parser;

/// Simple program to greet a person
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Args {
   /// Name of the person to greet
   #[clap(short, long, value_parser)]
   name: String,

   /// Number of times to greet
   #[clap(short, long, value_parser, default_value_t = 1)]
   count: u8,
}

fn main() {
   let args = Args::parse();

   for _ in 0..args.count {
       println!("Hello {}!", args.name)
   }
}

And try it out:

$ demo --help
clap [..]
A simple to use, efficient, and full-featured Command Line Argument Parser

USAGE:
    demo[EXE] [OPTIONS] --name <NAME>

OPTIONS:
    -c, --count <COUNT>    Number of times to greet [default: 1]
    -h, --help             Print help information
    -n, --name <NAME>      Name of the person to greet
    -V, --version          Print version information

$ demo --name Me
Hello Me!

(version number and .exe extension on windows replaced by placeholders)

See also the derive [tutorial][_derive::_tutorial] and [reference][_derive]

Augment clap:

  • wild for supporting wildcards (*) on Windows like you do Linux
  • argfile for loading additional arguments from a file (aka response files)
  • shadow-rs for generating Command::long_version
  • clap_mangen for generating man page source (roff)
  • clap_complete for shell completion support

CLI Helpers

Testing

Documentation:

Re-exports

pub use crate::error::Error;
pub use crate::error::Result;
pub use ValueEnum as ArgEnum;

Modules

Error reporting
Command line argument parser

Macros

Create an Arg from a usage string.
Requires cargo feature flag to be enabled.
Select a ValueParser implementation from the intended type

Structs

Deprecated, replaced with Command
The abstract representation of a command line argument. Used to set all the options and relationships that define a valid argument for the program.
Family of related arguments.
Container for parse results.
Iterate over indices for where an argument appeared when parsing, via ArgMatches::indices_of
Deprecated, replaced with ArgMatches::get_many()
A possible value of an argument.
Deprecated, replaced with ArgMatches::get_many()

Enums

Application level settings, which affect how Command operates
Behavior of arguments when they are encountered while parsing
Various settings that apply to arguments and may be set, unset, and checked via getter/setter methods Arg::setting, Arg::unset_setting, and Arg::is_set. This is what the Arg methods which accept a bool use internally.
Represents the color preferences for program output
Command line argument parser kind of error
Provide shell with hint on how to complete an argument.
Origin of the argument’s value

Traits

Parse arguments into enums.
Parse a set of arguments into a user-defined container.
Create a Command relevant for a user-defined container.
Converts an instance of ArgMatches to a user-defined container.
Create a Command relevant for a user-defined container.
Parse command-line arguments into Self.
Parse a sub-command into a user-defined enum.
Parse arguments into enums.

Type Definitions

Build a command-line interface.

Derive Macros

Deprecated, replaced with ValueEnum Generates the ValueEnum impl.