Skip to content

unused_crate_dependencies false positive for dev-dependencies on main crate #129637

Open
@joshtriplett

Description

@joshtriplett

Steps to reproduce:

cargo new mycrate
cd mycrate
cargo add --dev termtree
printf '[lints.rust]\nunused_crate_dependencies = "deny"\n' >> Cargo.toml
cargo build --all-targets

Result:

error: external crate `termtree` unused in `mycrate`: remove the dependency or add `use termtree as _;`
  |
  = note: requested on the command line with `-D unused-crate-dependencies`

error: could not compile `mycrate` (bin "mycrate" test) due to 1 previous error

dev-dependencies have a variety of uses, and should not be considered as potentially unused. I'd love to see unused dev-dependencies detected as well, but right now they produce false positives.

The reverse is also true: rustc will warn about unused non-dev dependencies when compiling tests.

Short-term, perhaps we could provide a way to easily disable this warning entirely for dev-dependencies, and for non-dev dependencies in targets such as tests.

Longer-term, perhaps rustc could feed information about potentially unused dependencies back to Cargo in its output, and Cargo could then aggregate the intersection of those dependencies that are completely unused.

Meanwhile, however, these false positives make it difficult to use unused_crate_dependencies in any project that has dev-dependencies or tests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-diagnosticsArea: Messages for errors, warnings, and lintsA-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.L-false-positiveLint: False positive (should not have fired).L-unused_crate_dependenciesLint: unused_crate_dependenciesT-cargoRelevant to the cargo team, which will review and decide on the PR/issue.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions