Skip to content

Commit aeded7a

Browse files
committed
feat(resolver): Add default Edition2024 to resolver v3
1 parent 14b46ec commit aeded7a

File tree

3 files changed

+115
-1
lines changed

3 files changed

+115
-1
lines changed

src/cargo/core/features.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,9 @@ impl Edition {
300300
}
301301

302302
pub(crate) fn default_resolve_behavior(&self) -> ResolveBehavior {
303-
if *self >= Edition::Edition2021 {
303+
if *self >= Edition::Edition2024 {
304+
ResolveBehavior::V3
305+
} else if *self >= Edition::Edition2021 {
304306
ResolveBehavior::V2
305307
} else {
306308
ResolveBehavior::V1

src/doc/src/reference/unstable.md

+1
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,7 @@ This was stabilized in 1.79 in [#13608](https://github.com/rust-lang/cargo/pull/
339339
`-Zmsrv-policy` allows access to an MSRV-aware resolver which can be enabled with:
340340
- `resolver.something-like-precedence` config field
341341
- `workspace.resolver = "3"` / `package.resolver = "3"`
342+
- `package.edition = "2024"` (only in workspace root)
342343

343344
The resolver will prefer dependencies with a `package.rust-version` that is the same or older than your project's MSRV.
344345
Your project's MSRV is determined by taking the lowest `package.rust-version` set among your workspace members.

tests/testsuite/rust_version.rs

+111
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,117 @@ foo v0.0.1 ([CWD])
613613
.run();
614614
}
615615

616+
#[cargo_test(nightly, reason = "edition2024 in rustc is unstable")]
617+
fn resolve_edition2024() {
618+
Package::new("only-newer", "1.6.0")
619+
.rust_version("1.65.0")
620+
.file("src/lib.rs", "fn other_stuff() {}")
621+
.publish();
622+
Package::new("newer-and-older", "1.5.0")
623+
.rust_version("1.55.0")
624+
.file("src/lib.rs", "fn other_stuff() {}")
625+
.publish();
626+
Package::new("newer-and-older", "1.6.0")
627+
.rust_version("1.65.0")
628+
.file("src/lib.rs", "fn other_stuff() {}")
629+
.publish();
630+
631+
let p = project()
632+
.file(
633+
"Cargo.toml",
634+
r#"
635+
cargo-features = ["edition2024"]
636+
637+
[package]
638+
name = "foo"
639+
version = "0.0.1"
640+
edition = "2024"
641+
authors = []
642+
rust-version = "1.60.0"
643+
644+
[dependencies]
645+
only-newer = "1.0.0"
646+
newer-and-older = "1.0.0"
647+
"#,
648+
)
649+
.file("src/main.rs", "fn main(){}")
650+
.build();
651+
652+
// Edition2024 should resolve for MSRV
653+
p.cargo("generate-lockfile")
654+
.arg("-Zmsrv-policy")
655+
.masquerade_as_nightly_cargo(&["edition2024", "msrv-policy"])
656+
.with_stderr(
657+
"\
658+
[UPDATING] `dummy-registry` index
659+
[LOCKING] 3 packages to latest Rust 1.60.0 compatible versions
660+
[ADDING] newer-and-older v1.5.0 (latest: v1.6.0)
661+
",
662+
)
663+
.run();
664+
p.cargo("tree")
665+
.arg("-Zmsrv-policy")
666+
.masquerade_as_nightly_cargo(&["edition2024", "msrv-policy"])
667+
.with_stdout(
668+
"\
669+
foo v0.0.1 ([CWD])
670+
├── newer-and-older v1.5.0
671+
└── only-newer v1.6.0
672+
",
673+
)
674+
.run();
675+
676+
// `--ignore-rust-version` has precedence over Edition2024
677+
p.cargo("generate-lockfile --ignore-rust-version")
678+
.with_stderr(
679+
"\
680+
[UPDATING] `dummy-registry` index
681+
[LOCKING] 3 packages to latest compatible versions
682+
",
683+
)
684+
.arg("-Zmsrv-policy")
685+
.masquerade_as_nightly_cargo(&["msrv-policy"])
686+
.run();
687+
p.cargo("tree")
688+
.arg("-Zmsrv-policy")
689+
.masquerade_as_nightly_cargo(&["edition2024", "msrv-policy"])
690+
.with_stdout(
691+
"\
692+
foo v0.0.1 ([CWD])
693+
├── newer-and-older v1.6.0
694+
└── only-newer v1.6.0
695+
",
696+
)
697+
.run();
698+
699+
// config has precedence over Edition2024
700+
p.cargo("generate-lockfile")
701+
.env(
702+
"CARGO_RESOLVER_SOMETHING_LIKE_PRECEDENCE",
703+
"something-like-maximum",
704+
)
705+
.with_stderr(
706+
"\
707+
[UPDATING] `dummy-registry` index
708+
[LOCKING] 3 packages to latest compatible versions
709+
",
710+
)
711+
.arg("-Zmsrv-policy")
712+
.masquerade_as_nightly_cargo(&["msrv-policy"])
713+
.run();
714+
p.cargo("tree")
715+
.arg("-Zmsrv-policy")
716+
.masquerade_as_nightly_cargo(&["edition2024", "msrv-policy"])
717+
.with_stdout(
718+
"\
719+
foo v0.0.1 ([CWD])
720+
├── newer-and-older v1.6.0
721+
└── only-newer v1.6.0
722+
",
723+
)
724+
.run();
725+
}
726+
616727
#[cargo_test(nightly, reason = "edition2024 in rustc is unstable")]
617728
fn resolve_v3() {
618729
Package::new("only-newer", "1.6.0")

0 commit comments

Comments
 (0)