A summarized table about the new `dep:` and `?` Cargo feature syntax

I notice the new syntax for Cargo features in 1.60,
and test the following features structure to get a summarized table.

Any suggestion is welcomed.

# in root `Cargo.toml`
[dependencies]
a = { path = "./a", optional = true, default-features = false}
b = { path = "./b", optional = true, features = ["bar"]}

[workspace]
members = ["./a", "./b"]

# in the `Cargo.toml` of crate `a`
[features]
foo = []
baz = []

# in the `Cargo.toml` of crate `b`
[features]
bar = []
features in root Cargo.toml a b a/foo a/baz b/bar
use-a-with-its-name-disabled = ["dep:a"] all-features unusable unusable all-features
maybe-foo = ["a?/foo"] all-features all-features all-features all-features all-features
foo-a = ["a/foo"] all-features all-features all-features
bar = ["dep:b", "a?/baz"] all-features all-features all-features
bar-and-maybe-baz = ["b", "a?/baz"] all-features all-features all-features
bar-and-baz = ["b", "a/baz"] all-features

Note:

symbol whether the column feature
is enabled via the row feature
whether the column feature is usable
via --features xx or --all-features flag
all-features no yes
yes yes
yes no
unusable no no
That is to say
  • all-features means the column feature is not enabled via the row feature and is usable via --features xx or --all-features flag
  • means the column feature is implicitly enabled via the row feature and also usable
  • means the column feature is implicitly enabled via the row feature but in no way to be explicitly enabled via flags mentioned above
  • unusable means the column feature is no way to be enabled via the row feature and no way to be explicitly enabled via flags mentioned above

And once there is dep:a, for example, features in root Cargo.toml cannot include features with the name a :
i.e.

# in root `Cargo.toml`
[features]
no-a-any-more = ["dep:a"]
this-line-cause-error = ["a/foo"]
Error Package `...` does not have feature `a`. It has an optional dependency with that name, but that dependency uses the "dep:" syntax in the features table, so it does not have an implicit feature with that name.
5 Likes

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.