Skip to content

Commit 5dd597b

Browse files
committed
impl workspace hint for boolean dependencies
hint for only bad dependency true literal and rename unit test to match
1 parent 7e78c54 commit 5dd597b

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

crates/cargo-util-schemas/src/manifest/mod.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -787,12 +787,26 @@ impl<'de, P: Deserialize<'de> + Clone> de::Deserialize<'de> for TomlDependency<P
787787
where
788788
D: de::Deserializer<'de>,
789789
{
790+
use serde::de::Error as _;
791+
let expected = "a version string like \"0.9.8\" or a \
792+
detailed dependency like { version = \"0.9.8\" }";
790793
UntaggedEnumVisitor::new()
791-
.expecting(
792-
"a version string like \"0.9.8\" or a \
793-
detailed dependency like { version = \"0.9.8\" }",
794-
)
794+
.expecting(expected)
795795
.string(|value| Ok(TomlDependency::Simple(value.to_owned())))
796+
.bool(|value| {
797+
let expected = format!("invalid type: boolean `{value}`, expected {expected}");
798+
let err = if value {
799+
format!(
800+
"{expected}\n\
801+
note: if you meant to use a workspace member, you can write\n \
802+
dep.workspace = {value}"
803+
)
804+
} else {
805+
expected
806+
};
807+
808+
Err(serde_untagged::de::Error::custom(err))
809+
})
796810
.map(|value| value.deserialize().map(TomlDependency::Detailed))
797811
.deserialize(deserializer)
798812
}

tests/testsuite/bad_config.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2642,7 +2642,7 @@ fn bad_dependency() {
26422642
}
26432643

26442644
#[cargo_test]
2645-
fn bad_boolean_dependency() {
2645+
fn bad_dependency_true_literal() {
26462646
let p = project()
26472647
.file(
26482648
"Cargo.toml",
@@ -2664,6 +2664,8 @@ fn bad_boolean_dependency() {
26642664
.with_status(101)
26652665
.with_stderr_data(str![[r#"
26662666
[ERROR] invalid type: boolean `true`, expected a version string like "0.9.8" or a detailed dependency like { version = "0.9.8" }
2667+
[NOTE] if you meant to use a workspace member, you can write
2668+
dep.workspace = true
26672669
--> Cargo.toml:9:23
26682670
|
26692671
9 | bar = true

0 commit comments

Comments
 (0)