cargo metadata
should be able to ignore dev-dependencies for better feature resolution
#10718
Labels
C-feature-request
Category: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted`
Command-metadata
S-needs-design
Status: Needs someone to work further on the design for the feature or fix. NOT YET accepted.
Problem
cargo metadata
includes both normal dependencies and dev-dependencies, distinguishing them with either"kind": null
or"kind": "dev"
in the dependency list for a package.The problem is when there is a package that is used as both a normal dependency and as a dev-dependency with different sets of features. For example, consider the following packages:
In this setup,
cargo metadata
will happily enable the "dev_only" feature ofpackage_d
, resulting insome_big_dep
and all of its dependencies being included in the output.This is undesirable because:
cargo metadata
need to do a lot of work to track which features are used when; this is somethingcargo metadata
should do automatically.Proposed Solution
Add the following flag to
cargo metadata
:--dep-kinds
: only include the selected dependency kinds. Options (multiple can be specified):all
(default)normal
build
dev
This is similar to the
--edges
flag incargo tree
. If desired, theno-normal
,no-build
, andno-dev
options could be included in order for more complete parity betweencargo metadata
andcargo tree
.If
cargo metadata --dep-kinds normal
were run on the example above, thensome_big_dep
should be fully dropped from the output, as if I deleted it from the Cargo.toml file.Notes
The
--no-default-features
and--features
flags oncargo metadata
have extremely limited use with the limitation of not being able to ignore dev-dependencies. Projects that are careful about their dependencies and feature sets are the ones that benefit most from those flags, but any dev-dependency anywhere in the tree may still enable an undesired feature.CC @Manishearth
The text was updated successfully, but these errors were encountered: