---
source: tests/test-cli.rs
expression: format_outputs(&output)
---
stdout:
cargo-vet 0.6.1
Supply-chain security for Rust

When run without a subcommand, `cargo vet` will invoke the `check` subcommand. See `cargo vet help
check` for more details.

USAGE:
    cargo vet [OPTIONS]
    cargo vet <SUBCOMMAND>

OPTIONS:
    -h, --help
            Print help information

    -V, --version
            Print version information

GLOBAL OPTIONS:
        --manifest-path <PATH>
            Path to Cargo.toml

        --no-all-features
            Don't use --all-features
            
            We default to passing --all-features to `cargo metadata` because we want to analyze your
            full dependency tree

        --no-default-features
            Do not activate the `default` feature

        --features <FEATURES>
            Space-separated list of features to activate

        --locked
            Do not fetch new imported audits

        --frozen
            Avoid the network entirely, requiring either that the cargo cache is populated or the
            dependencies are vendored. Requires --locked

        --no-minimize-exemptions
            Prevent commands such as `check` and `certify` from automatically cleaning up unused
            exemptions

        --no-registry-suggestions
            Prevent commands such as `check` and `suggest` from suggesting registry imports

        --verbose <VERBOSE>
            How verbose logging should be (log level)
            
            [default: warn]
            [possible values: off, error, warn, info, debug, trace]

        --output-file <OUTPUT_FILE>
            Instead of stdout, write output to this file

        --log-file <LOG_FILE>
            Instead of stderr, write logs to this file (only used after successful CLI parsing)

        --output-format <OUTPUT_FORMAT>
            The format of the output
            
            [default: human]
            [possible values: human, json]

        --cache-dir <CACHE_DIR>
            Use the following path instead of the global cache directory
            
            The cache stores information such as the summary results used by vet's suggestion
            machinery, cached results from crates.io APIs, and checkouts of crates from crates.io in
            some cases. This is generally automatically managed in the system cache directory.
            
            This mostly exists for testing vet itself.

        --filter-graph <FILTER_GRAPH>
            Filter out different parts of the build graph and pretend that's the true graph
            
            Example: `--filter-graph="exclude(any(eq(is_dev_only(true)),eq(name(serde_derive))))"`
            
            This mostly exists to debug or reduce projects that cargo-vet is mishandling.
            Combining this with `cargo vet --output-format=json dump-graph` can produce an
            input that can be added to vet's test suite.
            
            
            The resulting graph is computed as follows:
            
            1. First compute the original graph
            2. Then apply the filters to find the new set of nodes
            3. Create a new empty graph
            4. For each workspace member that still exists, recursively add it and its dependencies
            
            This means that any non-workspace package that becomes "orphaned" by the filters will
            be implicitly discarded even if it passes the filters.
            
            Possible filters:
            
            * `include($query)`: only include packages that match this filter
            * `exclude($query)`: exclude packages that match this filter
            
            
            Possible queries:
            
            * `any($query1, $query2, ...)`: true if any of the listed queries are true
            * `all($query1, $query2, ...)`: true if all of the listed queries are true
            * `not($query)`: true if the query is false
            * `$property`: true if the package has this property
            
            
            Possible properties:
            
            * `name($string)`: the package's name (i.e. `serde`)
            * `version($version)`: the package's version (i.e. `1.2.0`)
            * `is_root($bool)`: whether it's a root in the original graph (ignoring dev-deps)
            * `is_workspace_member($bool)`: whether the package is a workspace-member (can be
            tested)
            * `is_third_party($bool)`: whether the package is considered third-party by vet
            * `is_dev_only($bool)`: whether it's only used by dev (test) builds in the original
            graph

SUBCOMMANDS:
    check
            \[default\] Check that the current project has been vetted
    suggest
            Suggest some low-hanging fruit to review
    init
            Initialize cargo-vet for your project
    inspect
            Fetch the source of a package
    diff
            Yield a diff against the last reviewed version
    certify
            Mark a package as audited
    import
            Import a new peer's imports
    regenerate
            Explicitly regenerate various pieces of information
    add-exemption
            Mark a package as exempted from review
    record-violation
            Declare that some versions of a package violate certain audit criteria
    fmt
            Reformat all of vet's files (in case you hand-edited them)
    prune
            Prune unnecessary imports and exemptions
    aggregate
            Fetch and merge audits from multiple sources into a single `audits.toml` file
    dump-graph
            Print the cargo build graph as understood by `cargo vet`
    gc
            Clean up old packages from the vet cache
    help
            Print this message or the help of the given subcommand(s)

stderr:

