Skip to content

Commit b3ce3eb

Browse files
committed
impl workspace hint for boolean dependencies
hint for only bad dependency true literal and rename unit test to match
1 parent 990de21 commit b3ce3eb

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
@@ -776,12 +776,26 @@ impl<'de, P: Deserialize<'de> + Clone> de::Deserialize<'de> for TomlDependency<P
776776
where
777777
D: de::Deserializer<'de>,
778778
{
779+
use serde::de::Error as _;
780+
let expected = "a version string like \"0.9.8\" or a \
781+
detailed dependency like { version = \"0.9.8\" }";
779782
UntaggedEnumVisitor::new()
780-
.expecting(
781-
"a version string like \"0.9.8\" or a \
782-
detailed dependency like { version = \"0.9.8\" }",
783-
)
783+
.expecting(expected)
784784
.string(|value| Ok(TomlDependency::Simple(value.to_owned())))
785+
.bool(|value| {
786+
let expected = format!("invalid type: boolean `{value}`, expected {expected}");
787+
let err = if value {
788+
format!(
789+
"{expected}\n\
790+
note: if you meant to use a workspace member, you can write\n \
791+
dep.workspace = {value}"
792+
)
793+
} else {
794+
expected
795+
};
796+
797+
Err(serde_untagged::de::Error::custom(err))
798+
})
785799
.map(|value| value.deserialize().map(TomlDependency::Detailed))
786800
.deserialize(deserializer)
787801
}

tests/testsuite/bad_config.rs

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

26502650
#[cargo_test]
2651-
fn bad_boolean_dependency() {
2651+
fn bad_dependency_true_literal() {
26522652
let p = project()
26532653
.file(
26542654
"Cargo.toml",
@@ -2670,6 +2670,8 @@ fn bad_boolean_dependency() {
26702670
.with_status(101)
26712671
.with_stderr_data(str![[r#"
26722672
[ERROR] invalid type: boolean `true`, expected a version string like "0.9.8" or a detailed dependency like { version = "0.9.8" }
2673+
[NOTE] if you meant to use a workspace member, you can write
2674+
dep.workspace = true
26732675
--> Cargo.toml:9:23
26742676
|
26752677
9 | bar = true

0 commit comments

Comments
 (0)