Skip to content

Commit 18369ce

Browse files
committed
impl workspace hint for boolean dependencies
1 parent 990de21 commit 18369ce

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -776,12 +776,22 @@ 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 err = format!(
787+
"invalid type: boolean `{value}`, expected {expected}\n\
788+
note: if you meant to use a workspace member, you can write\n \
789+
dep = {{ workspace = {value} }}\n\
790+
or\n \
791+
dep.workspace = {value}",
792+
);
793+
Err(serde_untagged::de::Error::custom(err))
794+
})
785795
.map(|value| value.deserialize().map(TomlDependency::Detailed))
786796
.deserialize(deserializer)
787797
}

tests/testsuite/bad_config.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2670,6 +2670,10 @@ 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 }
2675+
or
2676+
dep.workspace = true
26732677
--> Cargo.toml:9:23
26742678
|
26752679
9 | bar = true

0 commit comments

Comments
 (0)