A tool that uses the credentials stored in 1password as an environment variable.

Overview

openv

A tool that uses the credentials stored in 1password as an environment variable.

Requirements

Getting Started

# Sign in to 1password. e.g. `op signin my`.
$ eval $(op signin <sign_in_address>)

# Create vault in 1password.
$ op create vault myenv


# openv can register credentials to 1password vault.
$ openv myenv create SECRET_TOKEN
myenv.SECRET_TOKEN> this-is-token

$ openv myenv create HIDDEN_TOKEN
myenv.HIDDEN_TOKEN > this-is-hidden

# List credentials for the specified vault.
$ openv myenv list
HIDDEN_TOKEN
SECRET_TOKEN

# All credentials in vault can be set as environment variables with the `get` command
$ env $(openv myenv get) sh -c 'env | grep TOKEN'
SECRET_TOKEN=this-is-token
HIDDEN_TOKEN=this-is-hidden

# With the `-n` option, specify the credentials in vault.
# Also by separating item name with a colon, specify environment variable name.
$ env $(openv myenv get -n SECRET_TOKEN:MY_ENV) sh -c 'echo $MY_ENV'
this-is-token

> env $(openv myenv get -n SECRET_TOKEN:MY_ENV -n HIDDEN_TOKEN) sh -c 'echo $MY_ENV $HIDDEN_TOKEN'
this-is-token this-is-hidden

Install

On macOS via Homebrew

$ brew tap mrtc0/openv
$ brew install openv

From binaries

Check out the release page for prebuilt versions of openv for many architectures.

From source

$ cargo install openv

Completion

If you are using fish, you can use https://github.com/mrtc0/fish-openv-completions .

Development

# Run tests
$ cargo test

# Build
$ cargo build --bins

# Install
$ cargo install --path . --locked
Comments
  • Update Rust crate base64-url to 1.4.10 - autoclosed

    Update Rust crate base64-url to 1.4.10 - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | base64-url | dependencies | patch | 1.4.8 -> 1.4.10 |


    Configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde to 1.0.125 - autoclosed

    Update Rust crate serde to 1.0.125 - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde | dependencies | patch | 1.0.123 -> 1.0.125 |


    Configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde_json to 1.0.64 - autoclosed

    Update Rust crate serde_json to 1.0.64 - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde_json | dependencies | patch | 1.0.62 -> 1.0.64 |


    Configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate mockall to 0.9.1

    Update Rust crate mockall to 0.9.1

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | mockall | dev-dependencies | patch | 0.9.0 -> 0.9.1 |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate serde_json to 1.0.62

    Update Rust crate serde_json to 1.0.62

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | serde_json | dependencies | patch | 1.0.61 -> 1.0.62 |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/upload-artifact action to v2

    Update actions/upload-artifact action to v2

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/upload-artifact | action | major | v1 -> v2 |


    Release Notes

    actions/upload-artifact

    v2

    Compare Source

    • Port entire action to typescript from a runner plugin so it is easier to collaborate and accept contributions
    • Upload artifacts using a wildcard pattern
    • Fix for artifact uploads sometimes not working with containers
    • Upload an artifact without providing a name

    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/download-artifact action to v2

    Update actions/download-artifact action to v2

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/download-artifact | action | major | v1 -> v2 |


    Release Notes

    actions/download-artifact

    v2

    Compare Source

    V2 Artifact Download

    • Ability to download all artifacts at once
    • Fix issues related to downloading artifacts in containers
    • Port over to typescript so it is easier to accept community contributions

    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/checkout action to v2

    Update actions/checkout action to v2

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/checkout | action | major | v1 -> v2 |


    Release Notes

    actions/checkout

    v2

    Compare Source


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/cache action to v2

    Update actions/cache action to v2

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/cache | action | major | v1 -> v2 |


    Release Notes

    actions/cache

    v2

    Compare Source


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/upload-release-asset action to v1.0.2

    Update actions/upload-release-asset action to v1.0.2

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/upload-release-asset | action | patch | v1.0.1 -> v1.0.2 |


    Release Notes

    actions/upload-release-asset

    v1.0.2

    Compare Source

    This is a minor update to make the current release have the latest code from master, and additionally allows for a new automation workflow to execute to automate the sliding of the major (v1, v2, v3, etc) version numbers for ease of referencing


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/create-release action to v1.1.4

    Update actions/create-release action to v1.1.4

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/create-release | action | minor | v1.0.0 -> v1.1.4 |


    Release Notes

    actions/create-release

    v1.1.4

    Compare Source

    This release adds the ability to specify an owner/repo in your inputs to have an action run create releases on a different repository.

    v1.1.3

    Compare Source

    This release includes vendored licenses for this action's npm dependencies.

    v1.1.2

    Compare Source

    Adds the ability to populate the release body from a file. #​50

    v1.1.1

    Compare Source

    • Release name is now an optional field to match the GitHub API - #​75
    • Add commitish param. Useful for targeting a commit or tag. #​32

    v1.1.0

    Compare Source

    • Add support to v2 to connect to GHES (#​70)
    • Bumped acorn (#​57) and handlebars (#​33) versions

    v1.0.1

    Compare Source

    This is a minor update to make the current release have the latest code from master, and additionally allows for a new automation workflow to execute to automate the sliding of the major (v1, v2, v3, etc) version numbers for ease of referencing


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/cache action to v3

    Update actions/cache action to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/cache | action | major | v2 -> v3 |


    Release Notes

    actions/cache

    v3

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/download-artifact action to v3

    Update actions/download-artifact action to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/download-artifact | action | major | v2 -> v3 |


    Release Notes

    actions/download-artifact

    v3

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update actions/checkout action to v3

    Update actions/checkout action to v3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/checkout | action | major | v2 -> v3 |


    Release Notes

    actions/checkout

    v3

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Rate-Limited

    These updates are currently rate-limited. Click on a checkbox below to force their creation now.

    • [ ] Update Rust crate base64 to 0.13.1
    • [ ] Update Rust crate clap to v4
    • [ ] Update actions/upload-artifact action to v3
    • [ ] 🔐 Create all rate-limited PRs at once 🔐

    Open

    These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

    Detected dependencies

    cargo
    Cargo.toml
    • anyhow 1.0.37
    • base64 0.13.0
    • base64-url 1.4.8
    • clap 3.0.0-beta.2
    • serde 1.0.123
    • serde_derive 1.0.118
    • serde_json 1.0.62
    • mockall 0.9.1
    github-actions
    .github/workflows/ci.yml
    • actions/checkout v2
    • actions-rs/toolchain v1
    • actions-rs/cargo v1.0.3
    • actions-rs/cargo v1.0.3
    • actions-rs/cargo v1.0.3
    .github/workflows/release.yml
    • actions/checkout v2
    • actions/cache v2
    • actions-rs/toolchain v1
    • actions-rs/cargo v1.0.3
    • actions/upload-artifact v2
    • actions/create-release v1.1.4
    • actions/upload-artifact v2
    • actions/download-artifact v2
    • actions/download-artifact v2
    • actions/upload-release-asset v1.0.2

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
  • Update Rust crate mockall to 0.11.3

    Update Rust crate mockall to 0.11.3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | mockall | dev-dependencies | minor | 0.9.1 -> 0.11.3 |


    Release Notes

    asomers/mockall

    v0.11.3

    Compare Source

    v0.11.2

    Compare Source

    Fixed
    • Suppress "dead code" warnings when automocking a struct's private method. It might be used only by other public methods in the same struct. (#​397)

    • Fixed using Mockall when a function named Ok is in scope. The anyhow crate, for example, creates a function by this name. (#​389)

    v0.11.1

    Compare Source

    Fixed
    • Fixed mocking methods that use Self in their arguments, but not as the receiver. For example, PartialEq::eq has a signature like fn eq(&self, other: &Self) -> bool (#​373)
    • Fixed mocking methods that return a reference to a dyn T trait object, when that trait is not already implemented for Box<dyn T>. (#​380)

    v0.11.0

    Compare Source

    Added
    • mock! and #[automock] now support unsafe traits. (#​313)
    Changed
    Fixed
    • Fixed nondeterministic code generation in methods with multiple lifetime parameters. (#​333)

    v0.10.2

    Compare Source

    Fixed
    • Fix mocking specializing methods of non-generic structs, a regression in v0.10.0. (#​309)

    • Fix mocking generic methods of generic structs returning nonstatic, a regression in v0.10.0. (#​312)

    v0.10.1

    Compare Source

    Fixed
    • Fix mocking trait methods whose return values have lifetime parameters, a regression in v0.10.0. (#​304)

    v0.10.0

    Compare Source

    Added
    • mock! will now allow both methods and trait impls to be gated with #[cfg()]] attributes. The attributes will be forwarded to all generated code. This allows for example only mocking certain traits on certain OSes. (#​297)

    • automock will now automatically generate Debug implementations for traits and structs. mock! will to, if you put #[derive(Debug)] above the struct's name. (#​289)

    • Added support for specific impls. A specific impl is an implementation of a trait on a generic struct with specified generic parameters. For example, impl Foo for Bar<i32> as opposed to impl<T> Foo for Bar<T>. Mockall does not yet support generic methods in such traits. (#​274)

    Changed
    • Mockall is pickier now about how you mock a trait on a generic struct. Previously you could usually omit the generics. Now, they're required. i.e.,
      mock!{
          MyStruct<T: Bounds> {...}
          impl Foo for MyStruct {...}
      }
      

      should now be written as

      mock!{
          MyStruct<T: Bounds> {...}
          impl<T: Bounds> Foo for MyStruct<T> {...}
      }
      

      (#​274)

    Fixed
    • Fixed setting simultaneous expectations with different generic types on generic methods whose generic parameters appear in neither the arguments nor the return type. (#​272)

    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Update Rust crate clap to 3.2.23

    Update Rust crate clap to 3.2.23

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | clap | dependencies | minor | 3.0.0-beta.2 -> 3.2.23 |


    Release Notes

    clap-rs/clap

    v3.2.23

    Compare Source

    [3.2.23] - 2022-10-24

    Fixes
    • Upgrade to textwrap 0.16

    v3.2.22

    Compare Source

    [3.2.22] - 2022-09-16

    Fixes
    • Unify dependencies on terminal_size to the 0.2 release

    v3.2.21

    Compare Source

    [3.2.21] - 2022-09-12

    Features
    • TypedValueParser::map to allow reusing existing value parsers for other purposes

    v3.2.20

    Compare Source

    [3.2.20] - 2022-09-02

    Features
    • ArgMatches::get_count help for ArgAction::Count
    • ArgMatches::get_flag help for ArgAction::SetTrue / ArgAction::SetFalse

    v3.2.19

    Compare Source

    [3.2.19] - 2022-08-30

    Fixes
    • (help) Ensure required arguments for parent commands aren't shown in their subcommands when using args_conflicts_with_subcommand

    v3.2.18

    Compare Source

    Fixes
    • (help) Command::print_help now respects Command::colored_help
    • (derive) Improved error messages

    v3.2.17

    Compare Source

    Fixes
    • (derive) Expose #[clap(id = ...)] attribute to match Arg's latest API

    v3.2.16

    Compare Source

    Fixes
    • Ensure required arguments appear in errors when they are also members of a group (#​4004)

    v3.2.15

    Compare Source

    Features
    • (derive) New default_values_t and default_values_os_t attributes

    v3.2.14

    Compare Source

    Fixes
    • A multiple_values positional followed by another positional now works with multiple flags

    v3.2.13

    Compare Source

    Documentation
    • Pulled in tutorials, cookbook, and derive reference into rustdoc

    v3.2.12

    Compare Source

    Fixes
    • Allow an arg to declare a conflict with a group

    v3.2.11

    Compare Source

    Features
    • Added Arg::get_all_short_aliaes and Arg::get_all_aliases

    v3.2.10

    Compare Source

    Fixes
    • Loosen lifetime on Command::mut_subcommand

    v3.2.8

    Compare Source

    Features
    • Added Command::mut_subcommand to mirror Command::mut_arg

    v3.2.7

    Compare Source

    Fixes
    • Global arguments should override env-sourced arguments

    v3.2.6

    Compare Source

    Fixes
    • Don't panic when parsing --=

    v3.2.5

    Compare Source

    Fixes
    • (derive) Fix regression with #[clap(default_value_os_t ...)] introduced in v3.2.3

    v3.2.4

    Compare Source

    Fixes
    • (derive) Provide more clearer deprecation messages for #[clap(parse)] attribute (#​3832)

    v3.2.3

    Compare Source

    Fixes
    • Moved deprecations to be behind the deprecated Cargo.toml feature (#​3830)
      • For now, it is disabled by default though we are considering enabling it by default as we release the next major version to help draw attention to the deprecation migration path

    v3.2.2

    Compare Source

    Fixes
    • (derive) Improve the highlighted code for deprecation warnings

    gated behind unstable-v4

    • (derive) Default to #[clap(value_parser, action)] instead of #[clap(parse)] (#​3827)

    v3.2.1

    Compare Source

    Fixes
    • (help) Command::print_help now respects Command::colored_help
    • (derive) Improved error messages

    v3.2.0

    Compare Source

    Compatibility

    MSRV is now 1.56.0 (#​3732)

    Behavior

    • Defaults no longer satisfy required and its variants (#​3793)
    • When misusing ArgMatches::value_of and friends, debug asserts were turned into panics

    Moving (old location deprecated)

    • clap::{PossibleValue, ValueHint} to clap::builder::{PossibleValue, ValueHint}
    • clap::{Indices, OsValues, ValueSource, Values} to clap::parser::{Indices, OsValues, ValueSource, Values}
    • clap::ArgEnum to clap::ValueEnum (#​3799)

    Replaced

    • Arg::allow_invalid_utf8 with Arg::value_parser(value_parser!(PathBuf)) (#​3753)
    • Arg::validator / Arg::validator_os with Arg::value_parser (#​3753)
    • Arg::validator_regex with users providing their own builder::TypedValueParser (#​3756)
    • Arg::forbid_empty_values with builder::NonEmptyStringValueParser / builder::PathBufValueParser (#​3753)
    • Arg::possible_values with Arg::value_parser([...]), builder::PossibleValuesParser, or builder::EnumValueParser (#​3753)
    • Arg::max_occurrences with arg.action(ArgAction::Count).value_parser(value_parser!(u8).range(..N)) for flags (#​3797)
    • Arg::multiple_occurrences with ArgAction::Append or ArgAction::Count though positionals will need Arg::multiple_values (#​3772, #​3797)
    • Command::args_override_self with ArgAction::Set (#​2627, #​3797)
    • AppSettings::NoAutoVersion with ArgAction or Command::disable_version_flag (#​3800)
    • AppSettings::NoHelpVersion with ArgAction or Command::disable_help_flag / Command::disable_help_subcommand (#​3800)
    • ArgMatches::{value_of, value_of_os, value_of_os_lossy, value_of_t} with ArgMatches::{get_one,remove_one} (#​3753)
    • ArgMatches::{values_of, values_of_os, values_of_os_lossy, values_of_t} with ArgMatches::{get_many,remove_many} (#​3753)
    • ArgMatches::is_valid_arg with ArgMatches::{try_get_one,try_get_many} (#​3753)
    • ArgMatches::occurrences_of with ArgMatches::value_source or ArgAction::Count (#​3797)
    • ArgMatches::is_present with ArgMatches::contains_id or ArgAction::SetTrue (#​3797)
    • ArgAction::StoreValue with ArgAction::Set or ArgAction::Append (#​3797)
    • ArgAction::IncOccurrences with ArgAction::SetTrue or ArgAction::Count (#​3797)
    • (derive) #[clap(parse(...))] replaced with: (#​3589, #​3794)
      • For default parsers (no parse attribute), deprecation warnings can be silenced by opting into the new behavior by adding either #[clap(action)] or #[clap(value_parser)] (ie requesting the default behavior for these attributes). Alternatively, the unstable-v4 feature changes the default away from parse to action/value_parser.
      • For #[clap(parse(from_flag))] replaced with #[clap(action = ArgAction::SetTrue)] (#​3794)
      • For #[clap(parse(from_occurrences))] replaced with #[clap(action = ArgAction::Count)] though the field's type must be u8 (#​3794)
      • For #[clap(parse(from_os_str)] for PathBuf, replace it with #[clap(value_parser)] (as mentioned earlier this will call value_parser!(PathBuf) which will auto-select the right ValueParser automatically).
      • For #[clap(parse(try_from_str = ...)], replace it with #[clap(value_parser = ...)]
      • For most other cases, a type implementing TypedValueParser will be needed and specify it with #[clap(value_parser = ...)]
    Features
    • Parsed, typed arguments via Arg::value_parser / ArgMatches::{get_one,get_many} (#​2683, #​3732)
      • Several built-in TypedValueParsers available with an API open for expansion
      • value_parser!(T) macro for selecting a parser for a given type (#​3732) and open to expansion via the ValueParserFactory trait (#​3755)
      • [&str] is implicitly a value parser for possible values
      • All ArgMatches getters do not assume required arguments (#​2505)
      • Add ArgMatches::remove_* variants to transfer ownership
      • Add ArgMatches::try_* variants to avoid panics for developer errors (#​3621)
      • Add a get_raw to access the underlying OsStrs
      • PathBuf value parsers imply ValueHint::AnyPath for completions (#​3732)
    • Explicit control over parsing via Arg::action (#​3774)
      • ArgAction::StoreValue: existing takes_value(true) behavior
      • ArgAction::IncOccurrences: existing takes_value(false) behavior
      • ArgAction::Help: existing --help behavior
      • ArgAction::Version: existing --version behavior
      • ArgAction::Set: Overwrite existing values (like Arg::multiple_occurrences mixed with Command::args_override_self) (#​3777)
      • ArgAction::Append: like Arg::multiple_occurrences (#​3777)
      • ArgAction::SetTrue: Treat --flag as --flag=true (#​3775)
        • Implies Arg::default_value("false") (#​3786)
        • Parses Arg::env via Arg::value_parser
      • ArgAction::SetFalse: Treat --flag as --flag=false (#​3775)
        • Implies Arg::default_value("true") (#​3786)
        • Parses Arg::env via Arg::value_parser
      • ArgAction::Count: Treat --flag --flag --flag as --flag=1 --flag=2 --flag=3 (#​3775)
        • Implies Arg::default_value("0") (#​3786)
        • Parses Arg::env via Arg::value_parser
    • (derive) Opt-in to new Arg::value_parser / Arg::action with either #[clap(value_parser)] (#​3589, #​3742) / #[clap(action)] attributes (#​3794)
      • Default ValueParser is determined by value_parser! (#​3199, #​3496)
      • Default ArgAction is determine by a hard-coded lookup on the type (#​3794)
    • Command::multicall is now stable for busybox-like programs and REPLs (#​2861, #​3684)
    • ArgMatches::{try_,}contains_id for checking if there are values for an argument that mirrors the new get_{one,many} API
    Fixes
    • Don't correct argument id in default_value_ifs_os(#​3815)

    parser

    • Set ArgMatches::value_source and ArgMatches::occurrences_of for external subcommands (#​3732)
    • Use value delimiter for Arg::default_missing_values (#​3761, #​3765)
    • SplitArg::default_value / Arg::env on value delimiters independent of whether -- was used (#​3765)
    • Allow applying defaults to flags (#​3294, 3775)
    • Defaults no longer satisfy required and its variants (#​3793)

    v3.1.18

    Compare Source

    Fixes
    • Fix deprecated arg_enum! for users migrating to clap3 (#​3717)
    • Verify all required_unless_present_all arguments exist
    • Verify group members exist before processing group members (#​3711)
    • (help) Use ... when not enough value_names are supplied

    gated behind unstable-v4

    • Verify required is not used with conditional required settings (#​3660)
    • Disallow more value_names than number_of_values (#​2695)
    • (parser) Assert on unknown args when using external subcommands (#​3703)
    • (parser) Always fill in "" argument for external subcommands (#​3263)
    • (derive) Detect escaped external subcommands that look like built-in subcommands (#​3703)
    • (derive) Leave Arg::id as verbatim casing (#​3282)

    v3.1.17

    Compare Source

    Fixes
    • Allow value names for arg! macro to have dashes when quoted, like longs

    v3.1.16

    Compare Source

    Fixes
    • (parser) Arg::exclusive overrides Arg::required, like other conflicts
    • (error) Don't duplicate arguments in usage
    • (error) Don't show hidden arguments in conflict error usage
    • (help) New help_template variable {name} to fix problems with {bin}
    • (help) Don't wrap URLs

    gated behind unstable-v4

    • Leading dashes in Arg::long are no longer allowed
    • (help) Use Command::display_name in the help title rather than Command::bin_name

    v3.1.15

    Compare Source

    Fixes
    • (error) Render actual usage for unrecognized subcommands
    • (multicall) Improve bad command error
    • (multicall) Always require a multicall command
    • (multicall) Disallow arguments on multicall parent command
    • (multicall) More consistent with rest of clap errors

    v3.1.14

    Compare Source

    Fixes
    • Panic when calling Command::build with a required positional argument nested several layers in subcommands

    v3.1.13

    Compare Source

    Fixes
    • Help subcommand and Command::write_help now report required arguments in usage in more circumstances
    • Unknown subcommand for help subcommand flag now reports an error with more context
    • More details reported when using debug feature
    • Allow disabling color feature with debug feature enabled

    v3.1.12

    Compare Source

    Fixes
    • Regression in 3.1.11 where the (output) streams were crossed

    v3.1.11

    Compare Source

    Fixes
    • Implied conflicts override Arg::required, making the behavior consistent with how we calculate conflicts for error reporting
    • Members of a mutually exclusive ArgGroup override Arg::required, making the behavior consistent with how we calculate conflicts for error reporting
    • Arg::overrides_with always override Arg::required, not just when the parser processes an override

    v3.1.10

    Compare Source

    Features
    • Expose Command::build for custom help generation or other command introspection needs

    v3.1.9

    Compare Source

    Fixes
    • Pin the clap_derive version so a compatible version is always used with clap

    v3.1.8

    Compare Source

    Fixes
    • Add Debug impls to more types

    v3.1.7

    Compare Source

    Fixes
    • (derive) Abort, rather than ignore, when deriving ArgEnum with non-unit unskipped variants

    v3.1.6

    Compare Source

    Fixes
    • Don't panic when validating delimited defaults (#​3541)
    • Make it clearer that cargo feature is needed
    • Documentation improvements

    v3.1.5

    Compare Source

    Fixes
    • Dependency upgrade

    v3.1.4

    Compare Source

    Features
    • (help) Show PossibleValue::help in long help (--help) (gated behind unstable-v4) (#​3312)

    v3.1.3

    Compare Source

    Fixes
    • Don't panic when validating delimited defaults (#​3514)

    v3.1.2

    Compare Source

    Fixes
    • (derive) Allow other attribute with a subcommand that has subcommands
    Documentation
    • (examples) List example topics
    • (derive) Clarify syntax and relation to builder API

    v3.1.1

    Compare Source

    Fixes
    • Fix deprecated arg_enum! for users migrating to clap3 (#​3717)
    • Verify all required_unless_present_all arguments exist
    • Verify group members exist before processing group members (#​3711)
    • (help) Use ... when not enough value_names are supplied

    gated behind unstable-v4

    • Verify required is not used with conditional required settings (#​3660)
    • Disallow more value_names than number_of_values (#​2695)
    • (parser) Assert on unknown args when using external subcommands (#​3703)
    • (parser) Always fill in "" argument for external subcommands (#​3263)
    • (derive) Detect escaped external subcommands that look like built-in subcommands (#​3703)
    • (derive) Leave Arg::id as verbatim casing (#​3282)

    v3.1.0

    Compare Source

    Compatibility

    Changes in behavior of note that are not guaranteed to be compatible across releases:

    • (help) help subcommand shows long help like --help, rather than short help (-h), deprecated clap::AppSettings::UseLongFormatForHelpSubcommand (#​3440)
    • (help) Pacman-style subcommands are now ordered the same as usage errors (#​3470)
    • (help) Pacman-style subcommands use standard alternate syntax in usage (#​3470)
    Deprecations
    • clap::Command is now preferred over clap::App (#​3089 in #​3472)
      • clap::command! is now preferred over clap::app_from_crate (#​3089 in #​3474)
      • clap::CommandFactory::command is now preferred over clap::IntoApp::into_app (#​3089 in #​3473)
    • (help) help subcommand shows long help like --help, rather than short help (-h), deprecated clap::AppSettings::UseLongFormatForHelpSubcommand (#​3440)
    • (error) Deprecate clap::AppSettings::WaitOnError, leaving it to the user to implement
    • (validation) clap::Command::subcommand_required(true).arg_required_else_help(true) is now preferred over clap::AppSettings::SubcommandRequiredElseHelp (#​3280)
    • (builder) clap::AppSettings are nearly all deprecated and replaced with builder methods and getters (#​2717)
    • (builder) clap::ArgSettings is deprecated and replaced with builder methods and getters (#​2717)
    • (builder) clap::Arg::id and clap::ArgGroup::id are now preferred over clap::Arg::name and clap::ArgGroup::name (#​3335)
    • (help) clap::Command::next_help_heading is now preferred over clap::Command::help_heading (#​1807, #​1553)
    • (error) clap::error::ErrorKind is now preferred over clap::ErrorKind (#​3395)
    • (error) clap::Error::kind() is now preferred over clap::Error::kind
    • (error) clap::Error::context() is now preferred over clap::Error::info (#​2628)

    Note: All items deprecated in 3.0.0 are now hidden in the documentation. (#​3458)

    Features
    • (matches) Add clap::ArgMatches::value_source to determine what insert the value (#​1345)
    • (help) Override derived display order with clap::Command::next_display_order (#​1807)
    • (error) Show possible values when an argument doesn't have a value (#​3320)
    • (error) New clap::Error::context API to open the door for fully-custom error messages (#​2628)
      • (error) clap::error::ErrorKind now implements Display
    Fixes
    • (builder) Some functions were renamed for consistency and fixing spelling issues
    • (builder) Allow clap::Command::color to override previous calls (#​3449)
    • (parse) Propagate globals with multiple subcommands (#​3428)
    • (validation) Give ArgRequiredElseHelp precedence over SubcommandRequired (#​3456)
    • (validation) Default values no longer count as "present" for conflicts, requires, clap::Command::arg_required_else_help, etc (#​3076, #​1264)
    • (assert) Report invalid defaults (#​3202)
    • (help) Clarify how to handle -h conflicts (#​3403)
    • (help) Make it easier to debug the addition of help flags (#​3425)
    • (help) Pacman-style subcommands are now separated with spaces (#​3470)
    • (help) Pacman-style subcommands are now ordered the same as usage errors (#​3470)
    • (help) Pacman-style subcommands use standard alternate syntax in usage (#​3470)
    • (error) Be consistent in showing of required attributes between errors / usage (#​3390)
    • (error) Show user's order of possible values, like in --help (#​1549)
    • (error) Allow customizing error type in clap::error::Result (#​3395)
    Performance
    • (error) Reduced stack size of clap::Error (#​3395)
    Documentation
    • (builder) Correct data take accepted for clap::Arg::validator
    • (derive) Clarify parse attribute
    • (tutorial) Demonstrate custom parsing
    • (example) Consistently list out required feature flags (#​3448)

    v3.0.14

    Compare Source

    Features
    • Added ArgMatches::args_present() to check if any args are present
    • Added Error::kind() as we work to deprecate direct member access for Error
    • Added App::get_version
    • Added App::get_long_version
    • Added App::get_author
    • Added App::get_subcommand_help_heading
    • Added App::get_subcommand_value_name
    • Added App::get_after_help
    • Added App::get_after_long_help
    Performance
    • Misc binary size reductions

    v3.0.13

    Compare Source

    Fixes
    • Show optional flag values wrapped in []

    v3.0.12

    Compare Source

    Features
    • (derive) Support for default_value_os_t

    v3.0.11

    Compare Source

    Fixes
    • Ensure conflicts work when they target a group with a default value

    v3.0.10

    Compare Source

    Fixes
    • Resolve panic! from v3.0.8 when using global_setting(PropagateVersion).

    v3.0.9

    Compare Source

    Features
    • Added App::find_subcommand_mut

    v3.0.8

    Compare Source

    Fixes
    • Respected DisableColoredHelp on cmd help help
    • Provide a little more context when completing arguments for cmd help
    • Provide more context for some asserts
    • Small documentation improvements

    v3.0.7

    Compare Source

    Fixes
    • Shift more asserts from parsing to App building (ie will now run in App::debug_assert)

    derive

    • Documentation fixes

    v3.0.6

    Compare Source

    Fixes

    derive

    • Don't assume user does use clap::ArgEnum (#​3277)
    • Documentation fixes

    v3.0.5

    Compare Source

    Fixes

    docs:

    • Cleaned up code blocks in tutorials (#​3261)
    • Clean up quotes in ArgMatches asserts
    • List correct replacement for deprecated Parser::from_clap (#​3257)

    v3.0.4

    Compare Source

    Features
    • For very limited cases, like cargo, expose ArgMatches::is_valid_arg to avoid panicing on undefined arguments

    v3.0.3

    Compare Source

    Fixes
    • Specify cause of debug assert failure

    v3.0.2

    Compare Source

    Fixes
    • Ignore Last when checking hyphen values (see #​3249 for details)
    • Help catch bugs with #[must_use]

    v3.0.1

    Compare Source

    Features
    • Added ArgMatches::args_present() to check if any args are present
    • Added Error::kind() as we work to deprecate direct member access for Error
    • Added App::get_version
    • Added App::get_long_version
    • Added App::get_author
    • Added App::get_subcommand_help_heading
    • Added App::get_subcommand_value_name
    • Added App::get_after_help
    • Added App::get_after_long_help
    Performance
    • Misc binary size reductions

    v3.0.0

    Compare Source

    Note: clap v3 has been in development for several years and has changed hands multiple times. Unfortunately, our changelog might be incomplete, whether in changes or their motivation.

    Highlights

    A special thanks to the maintainers, contributors, beta users, and sponsors who have helped along this journey, especially kbknapp.

    StructOpt Integration

    StructOpt provides a serde-like declarative approach to defining your parser. The main benefits we've seen so far from integrating are:

    • Tighter feedback between the design of clap and the derives
    • More universal traits. Crates exist for common CLI patterns (example) and we've re-designed the StructOpt traits so crates built on clap3 can be reused not just with other derives but also people using the builder API. People can even hand implement these so people using the builder API won't have the pay the cost for derives.

    Custom Help Headings

    Previously, clap automatically grouped arguments in the help as either ARGS, FLAGS, OPTIONS, and SUBCOMMANDS.

    You can now override the default group with Arg::help_heading and App::subcommand_help_heading. To apply a heading to a series of arguments, you can set App::help_heading.

    Deprecations

    While a lot of deprecations have been added to clean up the API (overloaded meaning of Arg::multiple) or make things more consistent, some particular highlights are:

    Migrating

    From clap v2

    1. Add CLI tests, -h and --help output at a minimum (recommendation: trycmd for snapshot testing)
    2. Update your dependency
      1. If you use no-default-features: add the std feature
    3. Resolve compiler errors
    4. Resolve behavior changes
      1. Refactor your App creation to a function and add a test similar to the one below, resolving any of its assertions
      2. Look over the "subtle changes" under BREAKING CHANGES
      3. If using builder: test your application under various circumstances to see if ArgMatches asserts regarding AllowInvalidUtf8.
    5. At your leisure: resolve deprecation notices

    Example test:

    fn app() -> clap::App<'static> {
        ...
    }
    
    #[test]
    fn verify_app() {
        app().debug_assert();
    }
    

    From structopt 0.3.25

    1. Add CLI tests, -h and --help output at a minimum (recommendation: trycmd for snapshot testing)
    2. Replace your dependency from structopt = "..." to clap = { version = "3.0", features = ["derive"] }
      1. If you use no-default-features: add the std feature
    3. Resolve compiler errors, including
      1. Update your use statements from structopt and structopt::clap to clap
    4. Resolve behavior changes
      1. Add a test similar to the one below, resolving any of its assertions
      2. Look over the "subtle changes" under BREAKING CHANGES
    5. At your leisure: resolve deprecation notices

    Example test:

    
    #[derive(clap::StructOpt)]
    struct Args {
        ...
    }
    
    #[test]
    fn verify_app() {
        use clap::IntoApp;
        Args::into_app().debug_assert()
    }
    

    From clap v3.0.0-beta.5

    1. Add CLI tests, -h and --help output at a minimum (recommendation: trycmd for snapshot testing)
    2. Update your dependency
      1. Add in derive, env, cargo, or unicode feature flags as needed
    3. Resolve compiler errors
      1. If you use yaml, clap_app!, or usage parser: revert any changes you made for clap3
      2. Change Arg::about Arg::long_about back to help and long_help and change PossibleValue::about to help (clap-rs/clap#​3075)
      3. Change AppSettings::HelpRequired to AppSettings::HelpExpected
      4. Change PossibleValue::hidden to PossibleValue::hide
      5. Change App::subcommand_placeholder to App::subcommand_value_name / App::subcommand_help_heading
    4. Resolve behavior changes
      1. Add the above listed test appropriate for your application and resolve any problems it reports
      2. If using derive: see the structopt breaking changes section for Vec changes
      3. If using builder: test your application under various circumstances to see if ArgMatches asserts regarding AllowInvalidUtf8.
    5. At your leisure: resolve deprecation notices
    BREAKING CHANGES

    From clap 2

    Subtle changes (i.e. compiler won't catch):

    • AppSettings::UnifiedHelpMessage is now default behaviour
    • AppSettings::EnableColoredHelp is now the default behavior but can be opted-out with AppSettings::DisableColoredHelp (clap-rs/clap#​2806)
    • App::override_usage no longer implies a leading \t, allowing multi lined usages
    • Arg::require_equals no longer implies ArgSettings::ForbidEmptyValues (#​2233)
    • Arg::require_delimiter no longer implies ArgSettings::TakesValue and ArgSettings::UseValueDelimiter (#​2233)
    • Arg::env, Arg::env_os, Arg::last, Arg::require_equals, Arg::allow_hyphen_values, Arg::hide_possible_values, Arg::hide_default_value, Arg::hide_env_values, Arg::case_insensitive and Arg::multiple_values no longer imply ArgSettings::TakesValue (#​2233)
    • ArgMatches::is_present no longer checks subcommand names
    • Some env variable values are now considered false for flags, not just "not-present" (clap-rs/clap#​2539)
    • Changed ...s meaning in usage parser. Before, it always meant multiple which is still true for --option [val].... Now [name]... --option [val] results in ArgSettings::MultipleOccurrences.
    • Usage exit code changed from 1 to 2 (clap-rs/clap#​1327)
    • Reject --foo=bar when takes_value(false) (clap-rs/clap#​1543)
    • No longer accept an arbitrary number of - for long arguments (-----long)

    Easier to catch changes:

    • When using no-default-features, you now have to specify the std feature (reserved for future work)
    • Gated env support behind env feature flag
      • Impacts Arg::env, Arg::env_os, Arg::hide_env_values, ArgSettings::HideEnvValues
      • See clap-rs/clap#​2694
    • Gated crate information behind cargo feature flag
      • Impacts crate_name!, crate_version!, crate_authors!, crate_description!, app_from_crate!
    • AppSettings::StrictUtf8 is now default behaviour and asserts if AppSettings::AllowInvalidUtf8ForExternalSubcommands and ArgSettings::AllowInvalidUtf8 and ArgMatches::value_of_os aren't used together
    • Arg::short and Arg::value_delimiter now take a char instead of a &str
    • ArgMatches panics on unknown arguments
    • Removed VersionlessSubcommands, making it the default (see clap-rs/clap#​2812)
    • Completion generation has been split out into clap_complete.
    • Removed ArgSettings::EmptyValues in favor of ArgSettings::ForbidEmptyValues
    • Validator signatures have been loosed:
      • Arg::validator now takes first argument as Fn(&str) -> Result<O, E: ToString> instead of Fn(String) -> Result<(), String>
      • Arg::validator_os now takes first argument as Fn(&OsStr) -> Result<O, OsString> instead of Fn(&OsStr) -> Result<(), OsString>
    • Arg::value_name now sets, rather than appends (see clap-rs/clap#​2634)
    • Upgrade yaml-rust from 0.3 to 0.4
    • Replaced ArgGroup::from(BTreeMap) to ArgGroup::from(yaml)
    • Replaced ArgMatches::usage with App::generate_usage
    • Replaced Arg::settings with Arg::setting(Setting1 | Setting2)
    • App and Arg now need only one lifetime
    • Removed deprecated App::with_defaults, replaced with app_from_crate
    • Removed deprecated AppSettings::PropagateGlobalValuesDown (now the default)
    • Some App functions, like App::write_help now take &mut self instead of &self
    • Error::message is now private, use Error::to_string
    • Arg::default_value_if, Arg::default_value_if_os, Arg::default_value_ifs, Arg::default_value_ifs_os now takes the default value parameter as an option (clap-rs/clap#​1406)
    • Changed App::print_help & App::print_long_help to now return std::io::Result
    • Changed App::write_help & App::write_long_help to now return std::io::Result
    • Changed Arg::index, Arg::number_of_values, Arg::min_values, Arg::max_values to taking usize instead of u64
    • Changed Error::info to type Vec<String> instead of Option<Vec<String>>
    • Changed ArgMatches::subcommand to now return Option<(&str, &ArgMatches)>
    • Renamed ErrorKind::MissingArgumentOrSubcommand to ErrorKind::DisplayHelpOnMissingArgumentOrSubcommand
    • Renamed ErrorKind::HelpDisplayed to ErrorKind::DisplayHelp
    • Renamed ErrorKind::VersionDisplayed to ErrorKind::DisplayVersion
    • Added #[non_exhaustive] to clap::{ValueHint, ErrorKind, AppSettings, ArgSettings} (clap-rs/clap#​3167)

    From structopt 0.3.25

    • By default, the App isn't initialized with crate information anymore. Now opt-in via #[clap(author)], #[clap(about)], #[clap(version)] (clap-rs/clap#​3034)
    • #[clap(default_value)] is replaced with #[clap(default_value_t)] (clap-rs/clap#​1694)
    • Subcommands nested under subcommands now needs a #[clap(subcommand)] attribute (clap-rs/clap#​2587)
    • Vec<_> and Option<Vec<_>> have changed from multiple to multiple_occurrences

    On top of the clap 2 changes

    Performance

    From clap 2

    • Split out non-default unicode feature flag for faster builds and smaller binaries for ASCII-only CLIs.
    • Split out non-default env feature flag for faster builds and smaller binaries.
    Features

    From clap 2

    • Integration of structopt::StructOpt via clap::Parser (requires derive feature flag)

    • Custom help headings

      • App::help_heading (apply to all future args)
      • Arg::help_heading (apply to current arg)
      • App::subcommand_help_heading along with App::subcommand_value_name (apply to subcommands)
      • See clap-rs/clap#​805
      • AppSettings::UnifiedHelpMessage is now default behaviour (clap-rs/clap#​2807)
    • Deriving of ArgEnum for generating Arg::possible_values (requires derive feature flag)

    • Disable built-in help/version behavior with AppSettings::NoAutoHelp and AppSettings::NoAutoVersion

    • Change an existing arg with new builder method mut_arg (particularly helpful for --help and --version)

    • Provide extra context in long help messages (--help) with before_long_help and after_long_help (clap-rs/clap#​1903)

    • Detect missing help descriptions via debug asserts by enabling AppSettings::HelpExpected

    • Aliases for short flags (clap-rs/clap#​1896)

    • Validate UTF-8 values, rather than panicing during ArgMatches::value_of thanks to AppSettings::AllowInvalidUtf8ForExternalSubcommands and ArgSettings::AllowInvalidUtf8

      • Debug builds will assert when the ArgMatches calls do not match the UTF-8 setting.
      • See clap-rs/clap#​751
    • clap::PossibleValue to allow

    • Allow arguments to conflict with all others via Arg::exclusive (clap-rs/clap#​1583)

    • Validate arguments with a regex (required regex feature flag)

    • Arg::default_missing_value for cases like --color[=<WHEN>] (clap-rs/clap#​1587)

    • clap::App::color / clap::ColorChoice to specify color setting for the app

    • Custom error reporting with App::error

    • App::debug_assert test helper

    • Replace Arg::multiple(bool) with Arg::multiple_values / Arg::multiple_occurrences

      • Positionals can be either
    • Added support for flag subcommands like pacman (clap-rs/clap#​1361)

    • Partial parsing via AppSettings::IgnoreErrors (clap-rs/clap#​1880)

    • Enable cmd help to print long help (--help instead of -h) with AppSettings::UseLongFormatForHelpSubcommand (clap-rs/clap#​2435)

    • Allow long arg abbreviations like we do with subcommands via AppSettings::InferLongArgs (clap-rs/clap#​2435)

    • Detect subcommands among positional arguments with AppSettings::SubcommandPrecedenceOverArg

    • Give completion scripts hints with Arg::value_hint (clap-rs/clap#​1793)

    • Allow unsetting defaults with

    • Arg::default_value_if, Arg::default_value_if_os, Arg::default_value_ifs, Arg::default_value_ifs_os (clap-rs/clap#​1406)

    • Interpret some env variable values as false for flags, in addition to "not-present" (clap-rs/clap#​2539)

      • n, no, f, false, off, 0
    • Added arg! macro for creating an Arg from a compile-time usage parser

    • (Experimental) Busybox-like multi-call support

    • (Experimental) Alias an argument to anything group of arguments

      • See App::replace behind unstable-replace feature flag
      • See clap-rs#​1603
    • (Experimental) Grouping of multiple values within multiple occurrences

    From structopt 0.3.25

    • Allow defaulting with native types via new default_value_t [= <expr>] attribute (clap-rs/clap#​1694)
    • New update API
    • New arg_enum attribute for integrating with ArgEnum trait

    On top of the clap 2 changes

    Fixes

    From clap 2

    • Correctly handle colored output on Windows
    • Only generate version flags when App::version, App::long_version are set (see clap-rs/clap#​2812)
    • General completion script improvements
    • Limited default help text wrapping to 100 when wrap_help feature is not enabled
    • Be more specific than Arg::multiple with Arg::multiple_values and Arg::multiple_occurrences
    • app_from_crate! defaults to separating multiple authors with ", "
    • Ensure all examples work
    • IgnoreCase is now unicode aware (requires unicode feature flag)
    • Always respect ColorChoice::Never, even if that means we skip colors in some cases
    • ArgMatches panics on unknown arguments
    • Gracefully handle empty authors field in Cargo.toml with app_from_crate
    • Do not show --help in cmd help with DisableHelpFlag (clap-rs/clap#​3169)
    • Do not show --help in cmd help help that doesn't work (clap-rs/clap#​3169)

    From structopt 0.3.25

    • Support SubcommandsNegateReqs by allowing required Option<_>s (clap-rs/clap#​2255)
    • Infer AllowInvalidUtf8 based on parser (clap-rs/clap#​751)
    • Gracefully handle empty authors field in Cargo.toml
    • Don't panic with default_value_os but treat it like default_value (clap-rs/clap#​3031)
    • When using flatten and subcommand, ensure our doc comment always overrides the nested container's doc comment, whether it has only about or about and long_about (clap-rs/clap#​3175)

    On top of the clap 2 changes

    Minimum Required Rust
    • As of this release, clap requires rustc 1.54.0 or greater.

    v3.0.0-rc.13

    Compare Source

    v3.0.0-rc.12

    Compare Source

    v3.0.0-rc.11

    Compare Source

    v3.0.0-rc.10

    Compare Source

    v3.0.0-rc.9

    Compare Source

    v3.0.0-rc.8

    Compare Source

    v3.0.0-rc.7

    Compare Source

    v3.0.0-rc.6

    Compare Source

    v3.0.0-rc.5

    Compare Source

    v3.0.0-rc.4

    Compare Source

    v3.0.0-rc.3

    Compare Source

    v3.0.0-rc.2

    Compare Source

    v3.0.0-rc.1

    Compare Source

    v3.0.0-rc.0

    Compare Source

    v3.0.0-beta.5

    Compare Source


    Configuration

    📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
Owner
mrtc0
mrtc0
gstats — command line tool to print a developer handy summary of all git repositories below current directory

gstats Simple Rust tool to get quick summary info on git repos showing latest tag, branch, state. I implemented this to help me work with a the not to

Boon at Shift 12 Jun 10, 2021
The open source design documentation tool for everybody

Heads up: reimagining artifact 3.0, check it out at artifact_py Artifact: design documentation for everybody Note: this project, and the python re-wri

Rett Berg 564 Nov 15, 2022
A cargo subcommand to fetch the $OUT_DIR environment variable from build scripts

cargo-outdir A cargo subcommand to fetch the $OUT_DIR variable from build scripts. This is extremely useful to inspect the output of automatically gen

null 2 Sep 29, 2022
A command-line tool to export FoundationDB stored protocol buffers to ClickhouseDB

fdb-ch-proto-export A command-line tool to export FoundationDB stored Protocol buffers to ClickhouseDB. Installation N/A Usage fdb-ch [command] fdb-c

Enlay 7 May 26, 2022
A mini CLI tool to detect secrets & credentials in source code

Fencer Fencer is a mini-CLI tool that can used to scan various kind of secrets/credentials that are hardcoded into a project source code files Feature

Naresh Balaji 17 Aug 23, 2022
Merge together and efficiently time-sort compressed .pcap files stored in AWS S3 object storage (or locally) to stdout for pipelined processing.

Merge together and efficiently time-sort compressed .pcap files stored in AWS S3 object storage (or locally) to stdout for pipelined processing. High performance and parallel implementation for > 10 Gbps playback throughput with large numbers of files (~4k).

null 4 Aug 19, 2022
Nym provides strong network-level privacy against sophisticated end-to-end attackers, and anonymous transactions using blinded, re-randomizable, decentralized credentials.

The Nym Privacy Platform The platform is composed of multiple Rust crates. Top-level executable binary crates include: nym-mixnode - shuffles Sphinx p

Nym 653 Dec 26, 2022
A multiprotocol credentials bruteforcer / password sprayer and enumerator.

Legba is a multiprotocol credentials bruteforcer / password sprayer and enumerator built with Rust and the Tokio asynchronous runtime in order to achi

Simone Margaritelli 45 Oct 24, 2023
Thread-safe cell based on atomic pointers to externally stored data

Simple thread-safe cell PtrCell is an atomic cell type that allows safe, concurrent access to shared data. No std, no data races, no nasal demons (UB)

Nikolay Levkovsky 3 Mar 23, 2024
Tool to convert variable and function names in C/C++ source code to snake_case

FixNameCase Tool to convert variable and function names in C/C++ source code to snake_case. Hidden files and files listed in .gitignore are untouched.

AgriConnect 4 May 25, 2023
Variable-length signed and unsigned integer encoding that is byte-orderable for Rust

ordered-varint Provides variable-length signed and unsigned integer encoding that is byte-orderable. This crate provides the Variable trait which enco

Khonsu Labs 7 Dec 6, 2022
A "cursed" container with opaque keys, usable as a static variable

cursedcontainer Please, for the love of all things good in the world, do not use this crate unless you've read the code thoroughly and understand the

the iris system 4 Mar 17, 2022
Port Finance Variable Rate Lending & Liquidity Mining Program

Port Variable Rate Lending Forked from Solana Token Lending Bug Bounty We have partnered with Immunefi to offer bug bounty up to 500K: https://immunef

Port Finance 12 Sep 11, 2022
Safe Unix shell-like parameter expansion/variable substitution via cross-platform CLI or Rust API

Safe Unix shell-like parameter expansion/variable substitution for those who need a more powerful alternative to envsubst but don't want to resort to

Isak Wertwein 4 Oct 4, 2022
An efficient async condition variable for lock-free algorithms

async-event An efficient async condition variable for lock-free algorithms, a.k.a. "eventcount". Overview Eventcount-like primitives are useful to mak

Asynchronics 3 Jul 10, 2023
Macro to print variable(s) with values nicely (stripped from release builds)

log_macro Macro to print variable(s) with values nicely (stripped from release builds) Install cargo add log_macro Use Add this to top of file: #[mac

Nikita 3 Aug 22, 2023
Rust library of custom number malarkey, including variable-bit-width integers

Numberwang The Numberwang crate is a library of custom number types and functionality, including variable-bit-width integers. It is named after the fi

Dan Williams 3 Nov 12, 2024
Envful is a CLI tool that verifies the presence of environment variables

Envful is a CLI tool that verifies the presence of environment variables. It looks inside your .env file and the host system. You can use it to run any process while ensuring all the variables are set.

Alex Vilchis 65 Sep 8, 2022
A Yocto setup and management tool that helps you keep your environment up-to-date and in-sync with your team

yb (Yocto Buddy) yb is designed to make it easy to setup and (perhaps more importantly) keep Yocto environments up-to-date and in-sync with your team.

null 13 Oct 31, 2022
A Modern And Secure CLI Tool For Managing Environment Variables

Envio is a command-line tool that simplifies the management of environment variables across multiple profiles. It allows users to easily switch between different configurations and apply them to their current environment

Humble Penguin 536 Apr 16, 2023