aboutsummaryrefslogtreecommitdiff
path: root/clap/benches/06_rustup.rs
diff options
context:
space:
mode:
Diffstat (limited to 'clap/benches/06_rustup.rs')
-rw-r--r--clap/benches/06_rustup.rs458
1 files changed, 0 insertions, 458 deletions
diff --git a/clap/benches/06_rustup.rs b/clap/benches/06_rustup.rs
deleted file mode 100644
index f9ba477..0000000
--- a/clap/benches/06_rustup.rs
+++ /dev/null
@@ -1,458 +0,0 @@
-// Used to simulate a fairly large number of subcommands
-//
-// CLI used is from rustup 408ed84f0e50511ed44a405dd91365e5da588790
-
-#![feature(test)]
-
-extern crate clap;
-extern crate test;
-
-use clap::{App, AppSettings, Arg, Shell, SubCommand, ArgGroup};
-
-use test::Bencher;
-
-#[bench]
-fn build_app(b: &mut Bencher) { b.iter(|| build_cli()); }
-
-#[bench]
-fn parse_clean(b: &mut Bencher) { b.iter(|| build_cli().get_matches_from(vec![""])); }
-
-#[bench]
-fn parse_subcommands(b: &mut Bencher) {
- b.iter(|| build_cli().get_matches_from(vec!["rustup override add stable"]));
-}
-
-pub fn build_cli() -> App<'static, 'static> {
- App::new("rustup")
- .version("0.9.0") // Simulating
- .about("The Rust toolchain installer")
- .after_help(RUSTUP_HELP)
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .arg(Arg::with_name("verbose")
- .help("Enable verbose output")
- .short("v")
- .long("verbose"))
- .subcommand(SubCommand::with_name("show")
- .about("Show the active and installed toolchains")
- .after_help(SHOW_HELP))
- .subcommand(SubCommand::with_name("install")
- .about("Update Rust toolchains")
- .after_help(TOOLCHAIN_INSTALL_HELP)
- .setting(AppSettings::Hidden) // synonym for 'toolchain install'
- .arg(Arg::with_name("toolchain")
- .required(true)))
- .subcommand(SubCommand::with_name("update")
- .about("Update Rust toolchains")
- .after_help(UPDATE_HELP)
- .arg(Arg::with_name("toolchain").required(false))
- .arg(Arg::with_name("no-self-update")
- .help("Don't perform self update when running the `rustup` command")
- .long("no-self-update")
- .takes_value(false)
- .hidden(true)))
- .subcommand(SubCommand::with_name("default")
- .about("Set the default toolchain")
- .after_help(DEFAULT_HELP)
- .arg(Arg::with_name("toolchain").required(true)))
- .subcommand(SubCommand::with_name("toolchain")
- .about("Modify or query the installed toolchains")
- .after_help(TOOLCHAIN_HELP)
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("list").about("List installed toolchains"))
- .subcommand(SubCommand::with_name("install")
- .about("Install or update a given toolchain")
- .arg(Arg::with_name("toolchain").required(true)))
- .subcommand(SubCommand::with_name("uninstall")
- .about("Uninstall a toolchain")
- .arg(Arg::with_name("toolchain").required(true)))
- .subcommand(SubCommand::with_name("link")
- .about("Create a custom toolchain by symlinking to a directory")
- .arg(Arg::with_name("toolchain").required(true))
- .arg(Arg::with_name("path").required(true)))
- .subcommand(SubCommand::with_name("update")
- .setting(AppSettings::Hidden) // synonym for 'install'
- .arg(Arg::with_name("toolchain")
- .required(true)))
- .subcommand(SubCommand::with_name("add")
- .setting(AppSettings::Hidden) // synonym for 'install'
- .arg(Arg::with_name("toolchain")
- .required(true)))
- .subcommand(SubCommand::with_name("remove")
- .setting(AppSettings::Hidden) // synonym for 'uninstall'
- .arg(Arg::with_name("toolchain")
- .required(true))))
- .subcommand(SubCommand::with_name("target")
- .about("Modify a toolchain's supported targets")
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("list")
- .about("List installed and available targets")
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("add")
- .about("Add a target to a Rust toolchain")
- .arg(Arg::with_name("target").required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("remove")
- .about("Remove a target from a Rust toolchain")
- .arg(Arg::with_name("target").required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("install")
- .setting(AppSettings::Hidden) // synonym for 'add'
- .arg(Arg::with_name("target")
- .required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("uninstall")
- .setting(AppSettings::Hidden) // synonym for 'remove'
- .arg(Arg::with_name("target")
- .required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true))))
- .subcommand(SubCommand::with_name("component")
- .about("Modify a toolchain's installed components")
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("list")
- .about("List installed and available components")
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("add")
- .about("Add a component to a Rust toolchain")
- .arg(Arg::with_name("component").required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true))
- .arg(Arg::with_name("target")
- .long("target")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("remove")
- .about("Remove a component from a Rust toolchain")
- .arg(Arg::with_name("component").required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true))
- .arg(Arg::with_name("target")
- .long("target")
- .takes_value(true))))
- .subcommand(SubCommand::with_name("override")
- .about("Modify directory toolchain overrides")
- .after_help(OVERRIDE_HELP)
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("list").about("List directory toolchain overrides"))
- .subcommand(SubCommand::with_name("set")
- .about("Set the override toolchain for a directory")
- .arg(Arg::with_name("toolchain").required(true)))
- .subcommand(SubCommand::with_name("unset")
- .about("Remove the override toolchain for a directory")
- .after_help(OVERRIDE_UNSET_HELP)
- .arg(Arg::with_name("path")
- .long("path")
- .takes_value(true)
- .help("Path to the directory"))
- .arg(Arg::with_name("nonexistent")
- .long("nonexistent")
- .takes_value(false)
- .help("Remove override toolchain for all nonexistent directories")))
- .subcommand(SubCommand::with_name("add")
- .setting(AppSettings::Hidden) // synonym for 'set'
- .arg(Arg::with_name("toolchain")
- .required(true)))
- .subcommand(SubCommand::with_name("remove")
- .setting(AppSettings::Hidden) // synonym for 'unset'
- .about("Remove the override toolchain for a directory")
- .arg(Arg::with_name("path")
- .long("path")
- .takes_value(true))
- .arg(Arg::with_name("nonexistent")
- .long("nonexistent")
- .takes_value(false)
- .help("Remove override toolchain for all nonexistent directories"))))
- .subcommand(SubCommand::with_name("run")
- .about("Run a command with an environment configured for a given toolchain")
- .after_help(RUN_HELP)
- .setting(AppSettings::TrailingVarArg)
- .arg(Arg::with_name("toolchain").required(true))
- .arg(Arg::with_name("command")
- .required(true)
- .multiple(true)
- .use_delimiter(false)))
- .subcommand(SubCommand::with_name("which")
- .about("Display which binary will be run for a given command")
- .arg(Arg::with_name("command").required(true)))
- .subcommand(SubCommand::with_name("doc")
- .about("Open the documentation for the current toolchain")
- .after_help(DOC_HELP)
- .arg(Arg::with_name("book")
- .long("book")
- .help("The Rust Programming Language book"))
- .arg(Arg::with_name("std")
- .long("std")
- .help("Standard library API documentation"))
- .group(ArgGroup::with_name("page").args(&["book", "std"])))
- .subcommand(SubCommand::with_name("man")
- .about("View the man page for a given command")
- .arg(Arg::with_name("command").required(true))
- .arg(Arg::with_name("toolchain")
- .long("toolchain")
- .takes_value(true)))
- .subcommand(SubCommand::with_name("self")
- .about("Modify the rustup installation")
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("update")
- .about("Download and install updates to rustup"))
- .subcommand(SubCommand::with_name("uninstall")
- .about("Uninstall rustup.")
- .arg(Arg::with_name("no-prompt").short("y")))
- .subcommand(SubCommand::with_name("upgrade-data")
- .about("Upgrade the internal data format.")))
- .subcommand(SubCommand::with_name("telemetry")
- .about("rustup telemetry commands")
- .setting(AppSettings::Hidden)
- .setting(AppSettings::VersionlessSubcommands)
- .setting(AppSettings::DeriveDisplayOrder)
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("enable").about("Enable rustup telemetry"))
- .subcommand(SubCommand::with_name("disable").about("Disable rustup telemetry"))
- .subcommand(SubCommand::with_name("analyze").about("Analyze stored telemetry")))
- .subcommand(SubCommand::with_name("set")
- .about("Alter rustup settings")
- // .setting(AppSettings::SubcommandRequiredElseHelp)
- .subcommand(SubCommand::with_name("default-host")
- .about("The triple used to identify toolchains when not specified")
- .arg(Arg::with_name("host_triple").required(true))))
- .subcommand(SubCommand::with_name("completions")
- .about("Generate completion scripts for your shell")
- .after_help(COMPLETIONS_HELP)
- .setting(AppSettings::ArgRequiredElseHelp)
- .arg(Arg::with_name("shell").possible_values(&Shell::variants())))
-}
-
-static RUSTUP_HELP: &'static str = r"
-rustup installs The Rust Programming Language from the official
-release channels, enabling you to easily switch between stable, beta,
-and nightly compilers and keep them updated. It makes cross-compiling
-simpler with binary builds of the standard library for common platforms.
-
-If you are new to Rust consider running `rustup doc --book`
-to learn Rust.";
-
-static SHOW_HELP: &'static str = r"
-Shows the name of the active toolchain and the version of `rustc`.
-
-If the active toolchain has installed support for additional
-compilation targets, then they are listed as well.
-
-If there are multiple toolchains installed then all installed
-toolchains are listed as well.";
-
-static UPDATE_HELP: &'static str = r"
-With no toolchain specified, the `update` command updates each of the
-installed toolchains from the official release channels, then updates
-rustup itself.
-
-If given a toolchain argument then `update` updates that toolchain,
-the same as `rustup toolchain install`.
-
-'toolchain' specifies a toolchain name, such as 'stable', 'nightly',
-or '1.8.0'. For more information see `rustup help toolchain`.";
-
-static TOOLCHAIN_INSTALL_HELP: &'static str = r"
-Installs a specific rust toolchain.
-
-The 'install' command is an alias for 'rustup update <toolchain>'.
-
-'toolchain' specifies a toolchain name, such as 'stable', 'nightly',
-or '1.8.0'. For more information see `rustup help toolchain`.";
-
-static DEFAULT_HELP: &'static str = r"
-Sets the default toolchain to the one specified. If the toolchain is
-not already installed then it is installed first.";
-
-static TOOLCHAIN_HELP: &'static str = r"
-Many `rustup` commands deal with *toolchains*, a single installation
-of the Rust compiler. `rustup` supports multiple types of
-toolchains. The most basic track the official release channels:
-'stable', 'beta' and 'nightly'; but `rustup` can also install
-toolchains from the official archives, for alternate host platforms,
-and from local builds.
-
-Standard release channel toolchain names have the following form:
-
- <channel>[-<date>][-<host>]
-
- <channel> = stable|beta|nightly|<version>
- <date> = YYYY-MM-DD
- <host> = <target-triple>
-
-'channel' is either a named release channel or an explicit version
-number, such as '1.8.0'. Channel names can be optionally appended with
-an archive date, as in 'nightly-2014-12-18', in which case the
-toolchain is downloaded from the archive for that date.
-
-Finally, the host may be specified as a target triple. This is most
-useful for installing a 32-bit compiler on a 64-bit platform, or for
-installing the [MSVC-based toolchain] on Windows. For example:
-
- rustup toolchain install stable-x86_64-pc-windows-msvc
-
-For convenience, elements of the target triple that are omitted will be
-inferred, so the above could be written:
-
- $ rustup default stable-msvc
-
-Toolchain names that don't name a channel instead can be used to name
-custom toolchains with the `rustup toolchain link` command.";
-
-static OVERRIDE_HELP: &'static str = r"
-Overrides configure rustup to use a specific toolchain when
-running in a specific directory.
-
-Directories can be assigned their own Rust toolchain with
-`rustup override`. When a directory has an override then
-any time `rustc` or `cargo` is run inside that directory,
-or one of its child directories, the override toolchain
-will be invoked.
-
-To pin to a specific nightly:
-
- rustup override set nightly-2014-12-18
-
-Or a specific stable release:
-
- rustup override set 1.0.0
-
-To see the active toolchain use `rustup show`. To remove the override
-and use the default toolchain again, `rustup override unset`.";
-
-static OVERRIDE_UNSET_HELP: &'static str = r"
-If `--path` argument is present, removes the override toolchain for
-the specified directory. If `--nonexistent` argument is present, removes
-the override toolchain for all nonexistent directories. Otherwise,
-removes the override toolchain for the current directory.";
-
-static RUN_HELP: &'static str = r"
-Configures an environment to use the given toolchain and then runs
-the specified program. The command may be any program, not just
-rustc or cargo. This can be used for testing arbitrary toolchains
-without setting an override.
-
-Commands explicitly proxied by `rustup` (such as `rustc` and `cargo`)
-also have a shorthand for this available. The toolchain can be set by
-using `+toolchain` as the first argument. These are equivalent:
-
- cargo +nightly build
-
- rustup run nightly cargo build";
-
-static DOC_HELP: &'static str = r"
-Opens the documentation for the currently active toolchain with the
-default browser.
-
-By default, it opens the documentation index. Use the various flags to
-open specific pieces of documentation.";
-
-static COMPLETIONS_HELP: &'static str = r"
-One can generate a completion script for `rustup` that is compatible with
-a given shell. The script is output on `stdout` allowing one to re-direct
-the output to the file of their choosing. Where you place the file will
-depend on which shell, and which operating system you are using. Your
-particular configuration may also determine where these scripts need
-to be placed.
-
-Here are some common set ups for the three supported shells under
-Unix and similar operating systems (such as GNU/Linux).
-
-BASH:
-
-Completion files are commonly stored in `/usr/share/bash-completion/completions`
-
-Run the command:
-
-`rustup completions bash > /usr/share/bash-completion/completions/rustup.bash`
-
-This installs the completion script. You may have to log out and log
-back in to your shell session for the changes to take affect.
-
-FISH:
-
-Fish completion files are commonly stored in
-`$HOME/.config/fish/completions`
-
-Run the command:
-`rustup completions fish > ~/.config/fish/completions/rustup.fish`
-
-This installs the completion script. You may have to log out and log
-back in to your shell session for the changes to take affect.
-
-ZSH:
-
-ZSH completions are commonly stored in any directory listed in your
-`$fpath` variable. To use these completions, you must either add the
-generated script to one of those directories, or add your own
-to this list.
-
-Adding a custom directory is often the safest best if you're unsure
-of which directory to use. First create the directory, for this
-example we'll create a hidden directory inside our `$HOME` directory
-
-`mkdir ~/.zfunc`
-
-Then add the following lines to your `.zshrc` just before `compinit`
-
-`fpath+=~/.zfunc`
-
-Now you can install the completions script using the following command
-
-`rustup completions zsh > ~/.zfunc/_rustup`
-
-You must then either log out and log back in, or simply run
-
-`exec zsh`
-
-For the new completions to take affect.
-
-CUSTOM LOCATIONS:
-
-Alternatively, you could save these files to the place of your choosing,
-such as a custom directory inside your $HOME. Doing so will require you
-to add the proper directives, such as `source`ing inside your login
-script. Consult your shells documentation for how to add such directives.
-
-POWERSHELL:
-
-The powershell completion scripts require PowerShell v5.0+ (which comes
-Windows 10, but can be downloaded separately for windows 7 or 8.1).
-
-First, check if a profile has already been set
-
-`PS C:\> Test-Path $profile`
-
-If the above command returns `False` run the following
-
-`PS C:\> New-Item -path $profile -type file --force`
-
-Now open the file provided by `$profile` (if you used the `New-Item` command
-it will be `%USERPROFILE%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1`
-
-Next, we either save the completions file into our profile, or into a separate file
-and source it inside our profile. To save the completions into our profile simply
-use";