use cargo_test_support::prelude::*; use cargo_test_support::project; use cargo_test_support::registry::Package; use cargo_test_support::str; #[cargo_test] fn default() { Package::new("bar", "0.1.0").publish(); let p = project() .file( "Cargo.toml", r#" [package] name = "foo" version = "0.1.0" edition = "2021" [dependencies] bar = { version = "0.1.0", optional = true } "#, ) .file("src/lib.rs", "") .build(); p.cargo("check -Zcargo-lints") .masquerade_as_nightly_cargo(&["cargo-lints"]) .with_stderr_data(str![[r#" [UPDATING] `dummy-registry` index [LOCKING] 2 packages to latest compatible versions [CHECKING] foo v0.1.0 ([ROOT]/foo) [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s "#]]) .run(); } #[cargo_test] fn warn() { Package::new("bar", "0.1.0").publish(); Package::new("baz", "0.1.0").publish(); Package::new("target-dep", "0.1.0").publish(); let p = project() .file( "Cargo.toml", r#" [package] name = "foo" version = "0.1.0" edition = "2021" [dependencies] bar = { version = "0.1.0", optional = true } [build-dependencies] baz = { version = "0.1.0", optional = true } [target.'cfg(target_os = "linux")'.dependencies] target-dep = { version = "0.1.0", optional = true } [lints.cargo] implicit_features = "warn" "#, ) .file("src/lib.rs", "") .build(); p.cargo("check -Zcargo-lints") .masquerade_as_nightly_cargo(&["cargo-lints"]) .with_stderr_data(str![[r#" [WARNING] implicit features for optional dependencies is deprecated and will be unavailable in the 2024 edition --> Cargo.toml:8:1 | 8 | bar = { version = "0.1.0", optional = true } | --- | = [NOTE] `cargo::implicit_features` is set to `warn` in `[lints]` [WARNING] implicit features for optional dependencies is deprecated and will be unavailable in the 2024 edition --> Cargo.toml:11:1 | 11 | baz = { version = "0.1.0", optional = true } | --- | [WARNING] implicit features for optional dependencies is deprecated and will be unavailable in the 2024 edition --> Cargo.toml:14:1 | 14 | target-dep = { version = "0.1.0", optional = true } | ---------- | [UPDATING] `dummy-registry` index [LOCKING] 4 packages to latest compatible versions [CHECKING] foo v0.1.0 ([ROOT]/foo) [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s "#]]) .run(); } #[cargo_test(nightly, reason = "edition2024 is not stable")] fn implicit_features_edition_2024() { Package::new("bar", "0.1.0").publish(); Package::new("baz", "0.1.0").publish(); let p = project() .file( "Cargo.toml", r#" cargo-features = ["edition2024"] [package] name = "foo" version = "0.1.0" edition = "2024" [dependencies] bar = { version = "0.1.0", optional = true } baz = { version = "0.1.0", optional = true } [features] baz = ["dep:baz"] [lints.cargo] unused_optional_dependency = "allow" "#, ) .file("src/lib.rs", "") .build(); p.cargo("check -Zcargo-lints") .masquerade_as_nightly_cargo(&["cargo-lints", "edition2024"]) .with_stderr_data(str![[r#" [UPDATING] `dummy-registry` index [LOCKING] 2 packages to latest Rust [..] compatible versions [CHECKING] foo v0.1.0 ([ROOT]/foo) [FINISHED] `dev` profile [unoptimized + debuginfo] target(s) in [ELAPSED]s "#]]) .run(); }