From 460ea25377d797f1bf8a4e1d7679eb99b8175ec4 Mon Sep 17 00:00:00 2001 From: hi-rustin Date: Wed, 9 Feb 2022 22:15:29 +0800 Subject: [PATCH] Warning on conflicting default_features keys Signed-off-by: hi-rustin --- src/cargo/util/toml/mod.rs | 7 +++++++ tests/testsuite/features.rs | 39 +++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index 4685fb710..44fef2d67 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -1922,6 +1922,13 @@ impl DetailedTomlDependency

{ let version = self.version.as_deref(); let mut dep = Dependency::parse(pkg_name, version, new_source_id)?; + if self.default_features.is_some() && self.default_features2.is_some() { + cx.warnings.push(format!( + "found both `default-features` and `default_features` are set \ + in the `{}` dependency", + name_in_toml + )); + } dep.set_features(self.features.iter().flatten()) .set_default_features( self.default_features diff --git a/tests/testsuite/features.rs b/tests/testsuite/features.rs index 8a8ed78e5..01e06013a 100644 --- a/tests/testsuite/features.rs +++ b/tests/testsuite/features.rs @@ -2067,3 +2067,42 @@ Caused by: ) .run(); } + +#[cargo_test] +fn default_features_conflicting_warning() { + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.1.0" + authors = [] + + [dependencies] + a = { path = "a", features = ["f1"], default-features = false, default_features = false } + "#, + ) + .file("src/lib.rs", "") + .file( + "a/Cargo.toml", + r#" + [package] + name = "a" + version = "0.1.0" + authors = [] + + [features] + default = ["f1"] + f1 = [] + "#, + ) + .file("a/src/lib.rs", "") + .build(); + + p.cargo("build") + .with_stderr_contains( + "[WARNING] found both `default-features` and `default_features` are set in the `a` dependency", + ) + .run(); +} -- 2.39.5