diff --git a/doc/book/src/reference/specifying-dependencies.md b/doc/book/src/reference/specifying-dependencies.md index 310c504825b..4be2f754e67 100644 --- a/doc/book/src/reference/specifying-dependencies.md +++ b/doc/book/src/reference/specifying-dependencies.md @@ -637,11 +637,16 @@ dependency in the workspace's [`[workspace.dependencies]`][workspace.dependencie After that, add it to the `[dependencies]` table with `workspace = true`. Along with the `workspace` key, dependencies can also include these keys: -- [`optional`][optional]: Note that the`[workspace.dependencies]` table is not allowed to specify `optional`. +- [`optional`][optional]: Note that the `[workspace.dependencies]` table is not allowed to specify `optional`. - [`features`][features]: These are additive with the features declared in the `[workspace.dependencies]` +- [`default-features`][default-features] (Edition 2024 packages, requires Rust 1.99+): + Overrides the value set in `[workspace.dependencies]`. + If neither the package nor the workspace specifies `default-features`, it defaults to `true`. + Before Rust 1.99, or in earlier editions, package-level `default-features = false` + may be ignored or rejected unless the workspace dependency also disables default features. -Other than `optional` and `features`, inherited dependencies cannot use any other -dependency key (such as `version` or `default-features`). +Other than `optional`, `features`, and `default-features`, inherited dependencies +cannot use any other dependency key (such as `version`). Dependencies in the `[dependencies]`, `[dev-dependencies]`, `[build-dependencies]`, and `[target."...".dependencies]` sections support the ability to reference the @@ -651,9 +656,11 @@ Dependencies in the `[dependencies]`, `[dev-dependencies]`, `[build-dependencies [package] name = "bar" version = "0.2.0" +edition = "2024" [dependencies] regex = { workspace = true, features = ["unicode"] } +serde = { workspace = true, default-features = false } [build-dependencies] cc.workspace = true @@ -669,3 +676,4 @@ rand = { workspace = true, optional = true } [workspace.dependencies]: workspaces.md#the-dependencies-table [optional]: features.md#optional-dependencies [features]: features.md +[default-features]: features.md#dependency-features diff --git a/doc/book/src/reference/workspaces.md b/doc/book/src/reference/workspaces.md index a923e3ebd18..a8dd028375a 100644 --- a/doc/book/src/reference/workspaces.md +++ b/doc/book/src/reference/workspaces.md @@ -199,6 +199,10 @@ inherited by members of a workspace. Specifying a workspace dependency is similar to [package dependencies][specifying-dependencies] except: - Dependencies from this table cannot be declared as `optional` - [`features`][features] declared in this table are additive with the `features` from `[dependencies]` +- `default-features` declared on a package dependency overrides the value set + here in Edition 2024 packages (requires Rust 1.99+). Before Rust 1.99, or in + earlier editions, package-level `default-features = false` may be ignored or + rejected unless the workspace dependency also disables default features. You can then [inherit the workspace dependency as a package dependency][inheriting-a-dependency-from-a-workspace] @@ -212,6 +216,7 @@ members = ["bar"] cc = "1.0.73" rand = "0.8.5" regex = { version = "1.6.0", default-features = false, features = ["std"] } +serde = { version = "1.0.190", default-features = true } ``` ```toml @@ -219,9 +224,11 @@ regex = { version = "1.6.0", default-features = false, features = ["std"] } [package] name = "bar" version = "0.2.0" +edition = "2024" [dependencies] regex = { workspace = true, features = ["unicode"] } +serde = { workspace = true, default-features = false } [build-dependencies] cc.workspace = true diff --git a/src/ops/cargo_add/mod.rs b/src/ops/cargo_add/mod.rs index b200c7bfa1b..42a6307ea54 100644 --- a/src/ops/cargo_add/mod.rs +++ b/src/ops/cargo_add/mod.rs @@ -28,6 +28,7 @@ use crate::util::OptVersionReq; use crate::util::cache_lock::CacheLockMode; use crate::util::edit_distance; use crate::util::style; +use crate::workspace::Edition; use crate::workspace::Feature; use crate::workspace::FeatureValue; use crate::workspace::Features; @@ -503,7 +504,20 @@ fn resolve_dependency( } if let Some(Source::Workspace(_)) = dependency.source() { - check_invalid_ws_keys(dependency.toml_key(), arg)?; + check_invalid_ws_keys(dependency.toml_key(), arg, spec.manifest().edition())?; + if spec.manifest().edition() >= Edition::Edition2024 && arg.default_features == Some(true) { + let ws_dep = find_workspace_dep( + dependency.toml_key(), + ws, + ws.root_manifest(), + ws.unstable_features(), + )?; + // Only write `default-features = true` when the workspace dependency + // explicitly disables default features. + if ws_dep.default_features() == Some(false) { + dependency.default_features = Some(true); + } + } } let version_required = dependency.source().and_then(|s| s.as_registry()).is_some(); @@ -703,14 +717,16 @@ fn fuzzy_lookup( /// When { workspace = true } you cannot define other keys that configure /// the source of the dependency such as `version`, `registry`, `registry-index`, -/// `path`, `git`, `branch`, `tag`, `rev`, or `package`. You can also not define -/// `default-features`. +/// `path`, `git`, `branch`, `tag`, `rev`, or `package`. +/// Prior to Edition 2024 (RFC 3945) `default-features` was also forbidden; +/// from Edition 2024 onwards a package-level `default-features` overrides the +/// workspace value, so it is allowed. /// /// Only `default-features`, `registry` and `rename` need to be checked /// for currently. This is because `git` and its associated keys, `path`, and /// `version` should all bee checked before this is called. `rename` is checked /// for as it turns into `package` -fn check_invalid_ws_keys(toml_key: &str, arg: &DepOp) -> CargoResult<()> { +fn check_invalid_ws_keys(toml_key: &str, arg: &DepOp, edition: Edition) -> CargoResult<()> { fn err_msg(toml_key: &str, flag: &str, field: &str) -> String { format!( "cannot override workspace dependency with `{flag}`, \ @@ -719,7 +735,7 @@ fn check_invalid_ws_keys(toml_key: &str, arg: &DepOp) -> CargoResult<()> { ) } - if arg.default_features.is_some() { + if arg.default_features.is_some() && edition < Edition::Edition2024 { anyhow::bail!( "{}", err_msg(toml_key, "--default-features", "default-features") diff --git a/src/workspace/editor/dependency.rs b/src/workspace/editor/dependency.rs index 048e8ae2461..b7d27bd387d 100644 --- a/src/workspace/editor/dependency.rs +++ b/src/workspace/editor/dependency.rs @@ -392,8 +392,8 @@ impl Dependency { /// /// Returns a tuple with the dependency's name and either the version as a /// `String` or the path/git repository as an `InlineTable`. - /// (If the dependency is set as `optional` or `default-features` is set to - /// `false`, an `InlineTable` is returned in any case.) + /// (If the dependency is set as `optional` or `default-features` is + /// explicitly set, an `InlineTable` is returned in any case.) /// /// # Panic /// @@ -414,7 +414,7 @@ impl Dependency { self.public.unwrap_or(false), self.optional.unwrap_or(false), self.features.as_ref(), - self.default_features.unwrap_or(true), + self.default_features, self.source.as_ref(), self.registry.as_ref(), self.rename.as_ref(), @@ -424,12 +424,12 @@ impl Dependency { false, false, None, - true, + None, Some(Source::Registry(RegistrySource { version: v })), None, None, ) => toml_edit::value(v), - (false, false, None, true, Some(Source::Workspace(WorkspaceSource {})), None, None) => { + (false, false, None, None, Some(Source::Workspace(WorkspaceSource {})), None, None) => { let mut table = toml_edit::InlineTable::default(); table.set_dotted(true); table.insert("workspace", true.into()); diff --git a/src/workspace/parser/mod.rs b/src/workspace/parser/mod.rs index 4098ef06dd0..72a310e302f 100644 --- a/src/workspace/parser/mod.rs +++ b/src/workspace/parser/mod.rs @@ -1216,25 +1216,31 @@ fn inner_dependency_inherit_with<'a>( } = &pkg_dep; let default_features = default_features.or(*default_features2); - match (default_features, merged_dep.default_features()) { - // member: default-features = true and - // workspace: default-features = false should turn on - // default-features - (Some(true), Some(false)) => { - merged_dep.default_features = Some(true); - } - // member: default-features = false and - // workspace: default-features = true should ignore member - // default-features - (Some(false), Some(true)) => { - deprecated_ws_default_features(name, Some(true), edition, warnings)?; - } - // member: default-features = false and - // workspace: dep = "1.0" should ignore member default-features - (Some(false), None) => { - deprecated_ws_default_features(name, None, edition, warnings)?; + // RFC 3945: Allow workspace members to override the workspace dependency's + // `default-features` setting. + if edition >= Edition::Edition2024 { + merged_dep.default_features = default_features.or(merged_dep.default_features); + } else { + match (default_features, merged_dep.default_features()) { + // member: default-features = true and + // workspace: default-features = false should turn on + // default-features + (Some(true), Some(false)) => { + merged_dep.default_features = Some(true); + } + // member: default-features = false and + // workspace: default-features = true should ignore member + // default-features + (Some(false), Some(true)) => { + deprecated_ws_default_features(name, Some(true), warnings); + } + // member: default-features = false and + // workspace: dep = "1.0" should ignore member default-features + (Some(false), None) => { + deprecated_ws_default_features(name, None, warnings); + } + _ => {} } - _ => {} } merged_dep.features = match (merged_dep.features.clone(), features.clone()) { (Some(dep_feat), Some(inherit_feat)) => Some( @@ -1255,24 +1261,19 @@ fn inner_dependency_inherit_with<'a>( fn deprecated_ws_default_features( label: &str, ws_def_feat: Option, - edition: Edition, warnings: &mut Vec, -) -> CargoResult<()> { +) { let ws_def_feat = match ws_def_feat { Some(true) => "true", Some(false) => "false", None => "not specified", }; - if Edition::Edition2024 <= edition { - anyhow::bail!("`default-features = false` cannot override workspace's `default-features`"); - } else { - warnings.push(format!( - "`default-features` is ignored for {label}, since `default-features` was \ - {ws_def_feat} for `workspace.dependencies.{label}`, \ - this could become a hard error in the future" - )); - } - Ok(()) + warnings.push(format!( + "`default-features` is ignored for {label}, since `default-features` was \ + {ws_def_feat} for `workspace.dependencies.{label}`; \ + overriding workspace `default-features` to false requires Rust 1.99+ \ + and the 2024 edition" + )); } #[tracing::instrument(skip_all)] diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/Cargo.toml b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/Cargo.toml new file mode 100644 index 00000000000..e407970d1e5 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = ["foo", "bar"] +resolver = "3" + +[workspace.dependencies] +foo = { version = "0.0.0", path = "./foo", default-features = false } diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/bar/Cargo.toml b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/bar/Cargo.toml new file mode 100644 index 00000000000..3bd66f7b4a1 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/bar/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "bar" +version = "0.0.0" +edition = "2024" + +[dependencies] diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/bar/src/lib.rs b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/bar/src/lib.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/bar/src/lib.rs @@ -0,0 +1 @@ + diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/foo/Cargo.toml b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/foo/Cargo.toml new file mode 100644 index 00000000000..c0a92ea13b9 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/foo/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "foo" +version = "0.0.0" +edition = "2024" diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/foo/src/lib.rs b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/foo/src/lib.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/in/foo/src/lib.rs @@ -0,0 +1 @@ + diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/mod.rs b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/mod.rs new file mode 100644 index 00000000000..390b209ef78 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/mod.rs @@ -0,0 +1,25 @@ +use crate::prelude::*; +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::str; + +#[cargo_test] +fn case() { + cargo_test_support::registry::init(); + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + snapbox::cmd::Command::cargo_ui() + .arg("add") + .args(["foo", "--default-features", "-p", "bar"]) + .current_dir(cwd) + .assert() + .success() + .stdout_eq(str![""]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/Cargo.toml b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/Cargo.toml new file mode 100644 index 00000000000..e407970d1e5 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = ["foo", "bar"] +resolver = "3" + +[workspace.dependencies] +foo = { version = "0.0.0", path = "./foo", default-features = false } diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/bar/Cargo.toml b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/bar/Cargo.toml new file mode 100644 index 00000000000..d2b90a2d211 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/bar/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "bar" +version = "0.0.0" +edition = "2024" + +[dependencies] +foo = { workspace = true, default-features = true } diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/bar/src/lib.rs b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/bar/src/lib.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/bar/src/lib.rs @@ -0,0 +1 @@ + diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/foo/Cargo.toml b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/foo/Cargo.toml new file mode 100644 index 00000000000..c0a92ea13b9 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/foo/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "foo" +version = "0.0.0" +edition = "2024" diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/foo/src/lib.rs b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/foo/src/lib.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/out/foo/src/lib.rs @@ -0,0 +1 @@ + diff --git a/tests/testsuite/cargo_add/inherit_default_features_2024_edition/stderr.term.svg b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/stderr.term.svg new file mode 100644 index 00000000000..6f612421cab --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_default_features_2024_edition/stderr.term.svg @@ -0,0 +1,27 @@ + + + + + + + Adding foo (workspace) to dependencies + + + + + + diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/Cargo.toml b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/Cargo.toml new file mode 100644 index 00000000000..84ae7d26601 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = ["foo", "bar"] +resolver = "3" + +[workspace.dependencies] +foo = { version = "0.0.0", path = "./foo", default-features = true } diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/bar/Cargo.toml b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/bar/Cargo.toml new file mode 100644 index 00000000000..3bd66f7b4a1 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/bar/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "bar" +version = "0.0.0" +edition = "2024" + +[dependencies] diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/bar/src/lib.rs b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/bar/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/foo/Cargo.toml b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/foo/Cargo.toml new file mode 100644 index 00000000000..c0a92ea13b9 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/foo/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "foo" +version = "0.0.0" +edition = "2024" diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/foo/src/lib.rs b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/in/foo/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/mod.rs b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/mod.rs new file mode 100644 index 00000000000..976fe41d8f5 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/mod.rs @@ -0,0 +1,25 @@ +use crate::prelude::*; +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::str; + +#[cargo_test] +fn case() { + cargo_test_support::registry::init(); + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + snapbox::cmd::Command::cargo_ui() + .arg("add") + .args(["foo", "--no-default-features", "-p", "bar"]) + .current_dir(cwd) + .assert() + .success() + .stdout_eq(str![""]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/Cargo.toml b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/Cargo.toml new file mode 100644 index 00000000000..84ae7d26601 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/Cargo.toml @@ -0,0 +1,6 @@ +[workspace] +members = ["foo", "bar"] +resolver = "3" + +[workspace.dependencies] +foo = { version = "0.0.0", path = "./foo", default-features = true } diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/bar/Cargo.toml b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/bar/Cargo.toml new file mode 100644 index 00000000000..04c5dac7ef9 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/bar/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "bar" +version = "0.0.0" +edition = "2024" + +[dependencies] +foo = { workspace = true, default-features = false } diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/bar/src/lib.rs b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/bar/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/foo/Cargo.toml b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/foo/Cargo.toml new file mode 100644 index 00000000000..c0a92ea13b9 --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/foo/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "foo" +version = "0.0.0" +edition = "2024" diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/foo/src/lib.rs b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/out/foo/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/stderr.term.svg b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/stderr.term.svg new file mode 100644 index 00000000000..6f612421cab --- /dev/null +++ b/tests/testsuite/cargo_add/inherit_no_default_features_2024_edition/stderr.term.svg @@ -0,0 +1,27 @@ + + + + + + + Adding foo (workspace) to dependencies + + + + + + diff --git a/tests/testsuite/cargo_add/mod.rs b/tests/testsuite/cargo_add/mod.rs index bd9024466ac..d097eaf870b 100644 --- a/tests/testsuite/cargo_add/mod.rs +++ b/tests/testsuite/cargo_add/mod.rs @@ -48,6 +48,8 @@ mod git_rev; mod git_tag; mod help; mod infer_prerelease; +mod inherit_default_features_2024_edition; +mod inherit_no_default_features_2024_edition; mod invalid_arg; mod invalid_git_name; mod invalid_inherited_dependency; diff --git a/tests/testsuite/inheritable_workspace_fields.rs b/tests/testsuite/inheritable_workspace_fields.rs index 4f0ce8b04b3..5bfcacb9052 100644 --- a/tests/testsuite/inheritable_workspace_fields.rs +++ b/tests/testsuite/inheritable_workspace_fields.rs @@ -1539,7 +1539,7 @@ fn warn_inherit_def_feat_true_member_def_feat_false() { .build(); p.cargo("check").with_stderr_data(str![[r#" -[WARNING] Cargo.toml: `default-features` is ignored for dep, since `default-features` was true for `workspace.dependencies.dep`, this could become a hard error in the future +[WARNING] Cargo.toml: `default-features` is ignored for dep, since `default-features` was true for `workspace.dependencies.dep`; overriding workspace `default-features` to false requires Rust 1.99+ and the 2024 edition [WARNING] `bar` (manifest) generated 1 warning [UPDATING] `dummy-registry` index [LOCKING] 2 packages to latest compatible versions @@ -1555,7 +1555,7 @@ fn warn_inherit_def_feat_true_member_def_feat_false() { } #[cargo_test] -fn warn_inherit_def_feat_true_member_def_feat_false_2024_edition() { +fn inherit_def_feat_true_member_def_feat_false_2024_edition() { Package::new("dep", "0.1.0") .feature("default", &["fancy_dep"]) .add_dep(Dependency::new("fancy_dep", "0.2").optional(true)) @@ -1586,15 +1586,14 @@ fn warn_inherit_def_feat_true_member_def_feat_false_2024_edition() { .build(); p.cargo("check") - .with_status(101) .with_stderr_data(str![[r#" -[ERROR] failed to parse manifest at `[ROOT]/foo/Cargo.toml` - -Caused by: - error inheriting `dep` from workspace root manifest's `workspace.dependencies.dep` - -Caused by: - `default-features = false` cannot override workspace's `default-features` +[UPDATING] `dummy-registry` index +[LOCKING] 1 package to latest Rust [..] compatible version +[DOWNLOADING] crates ... +[DOWNLOADED] dep v0.1.0 (registry `dummy-registry`) +[CHECKING] dep v0.1.0 +[CHECKING] bar v0.2.0 ([ROOT]/foo) +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s "#]]) .run(); @@ -1632,7 +1631,7 @@ fn warn_inherit_simple_member_def_feat_false() { .build(); p.cargo("check").with_stderr_data(str![[r#" -[WARNING] Cargo.toml: `default-features` is ignored for dep, since `default-features` was not specified for `workspace.dependencies.dep`, this could become a hard error in the future +[WARNING] Cargo.toml: `default-features` is ignored for dep, since `default-features` was not specified for `workspace.dependencies.dep`; overriding workspace `default-features` to false requires Rust 1.99+ and the 2024 edition [WARNING] `bar` (manifest) generated 1 warning [UPDATING] `dummy-registry` index [LOCKING] 2 packages to latest compatible versions @@ -1648,7 +1647,7 @@ fn warn_inherit_simple_member_def_feat_false() { } #[cargo_test] -fn warn_inherit_simple_member_def_feat_false_2024_edition() { +fn inherit_simple_member_def_feat_false_2024_edition() { Package::new("dep", "0.1.0") .feature("default", &["fancy_dep"]) .add_dep(Dependency::new("fancy_dep", "0.2").optional(true)) @@ -1679,15 +1678,14 @@ fn warn_inherit_simple_member_def_feat_false_2024_edition() { .build(); p.cargo("check") - .with_status(101) .with_stderr_data(str![[r#" -[ERROR] failed to parse manifest at `[ROOT]/foo/Cargo.toml` - -Caused by: - error inheriting `dep` from workspace root manifest's `workspace.dependencies.dep` - -Caused by: - `default-features = false` cannot override workspace's `default-features` +[UPDATING] `dummy-registry` index +[LOCKING] 1 package to latest Rust [..] compatible version +[DOWNLOADING] crates ... +[DOWNLOADED] dep v0.1.0 (registry `dummy-registry`) +[CHECKING] dep v0.1.0 +[CHECKING] bar v0.2.0 ([ROOT]/foo) +[FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s "#]]) .run();