Skip to content

Commit 9d87062

Browse files
committed
More helpful error for invalid cargo-features = []
1 parent 4899913 commit 9d87062

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

src/cargo/core/features.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,32 @@ impl Features {
620620
) -> CargoResult<()> {
621621
let nightly_features_allowed = self.nightly_features_allowed;
622622
let Some((slot, feature)) = self.status(feature_name) else {
623-
bail!("unknown cargo feature `{}`", feature_name)
623+
let mut msg = format!("unknown Cargo.toml feature `{feature_name}`\n\n");
624+
let mut append_see_docs = true;
625+
626+
if feature_name.contains('_') {
627+
let _ = writeln!(msg, "Feature names must use '-' instead of '_'.");
628+
append_see_docs = false;
629+
} else {
630+
let underscore_name = feature_name.replace('-', "_");
631+
if CliUnstable::help()
632+
.iter()
633+
.any(|(option, _)| *option == underscore_name)
634+
{
635+
let _ = writeln!(
636+
msg,
637+
"This feature can be enabled via -Z{feature_name} or the `[unstable]` section in config.toml."
638+
);
639+
}
640+
}
641+
642+
if append_see_docs {
643+
let _ = writeln!(
644+
msg,
645+
"See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html for more information."
646+
);
647+
}
648+
bail!(msg)
624649
};
625650

626651
if *slot {

tests/testsuite/cargo_features.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,10 @@ fn wrong_kind_of_feature() {
204204
[ERROR] failed to parse manifest at `[ROOT]/foo/Cargo.toml`
205205
206206
Caused by:
207-
unknown cargo feature `build-dir`
207+
unknown Cargo.toml feature `build-dir`
208+
209+
This feature can be enabled via -Zbuild-dir or the `[unstable]` section in config.toml.
210+
See https://doc.rust-lang.org/nightly/cargo/reference/unstable.html for more information.
208211
209212
"#]])
210213
.run();
@@ -233,7 +236,9 @@ fn feature_syntax() {
233236
[ERROR] failed to parse manifest at `[ROOT]/foo/Cargo.toml`
234237
235238
Caused by:
236-
unknown cargo feature `bad_feature`
239+
unknown Cargo.toml feature `bad_feature`
240+
241+
Feature names must use '-' instead of '_'.
237242
238243
"#]])
239244
.run();

0 commit comments

Comments
 (0)