Skip to content

Commit 9248578

Browse files
committed
Add 2027 unstable edition
1 parent b44e14f commit 9248578

File tree

9 files changed

+65
-3
lines changed

9 files changed

+65
-3
lines changed

Diff for: compiler/rustc_builtin_macros/src/standard_library_imports.rs

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ pub fn inject(
8484
Edition2018 => sym::rust_2018,
8585
Edition2021 => sym::rust_2021,
8686
Edition2024 => sym::rust_2024,
87+
Edition2027 => sym::rust_2027,
8788
}])
8889
.map(|&symbol| Ident::new(symbol, span))
8990
.collect();

Diff for: compiler/rustc_span/src/edition.rs

+19-3
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,20 @@ pub enum Edition {
2323
Edition2021,
2424
/// The 2024 edition
2525
Edition2024,
26+
/// The 2027 edition
27+
Edition2027,
2628
}
2729

2830
// Must be in order from oldest to newest.
29-
pub const ALL_EDITIONS: &[Edition] =
30-
&[Edition::Edition2015, Edition::Edition2018, Edition::Edition2021, Edition::Edition2024];
31+
pub const ALL_EDITIONS: &[Edition] = &[
32+
Edition::Edition2015,
33+
Edition::Edition2018,
34+
Edition::Edition2021,
35+
Edition::Edition2024,
36+
Edition::Edition2027,
37+
];
3138

32-
pub const EDITION_NAME_LIST: &str = "2015|2018|2021|2024";
39+
pub const EDITION_NAME_LIST: &str = "2015|2018|2021|2024|2027";
3340

3441
pub const DEFAULT_EDITION: Edition = Edition::Edition2015;
3542

@@ -42,6 +49,7 @@ impl fmt::Display for Edition {
4249
Edition::Edition2018 => "2018",
4350
Edition::Edition2021 => "2021",
4451
Edition::Edition2024 => "2024",
52+
Edition::Edition2027 => "2027",
4553
};
4654
write!(f, "{s}")
4755
}
@@ -54,6 +62,7 @@ impl Edition {
5462
Edition::Edition2018 => "rust_2018_compatibility",
5563
Edition::Edition2021 => "rust_2021_compatibility",
5664
Edition::Edition2024 => "rust_2024_compatibility",
65+
Edition::Edition2027 => "rust_2027_compatibility",
5766
}
5867
}
5968

@@ -63,6 +72,7 @@ impl Edition {
6372
Edition::Edition2018 => true,
6473
Edition::Edition2021 => true,
6574
Edition::Edition2024 => true,
75+
Edition::Edition2027 => false,
6676
}
6777
}
6878

@@ -85,6 +95,11 @@ impl Edition {
8595
pub fn at_least_rust_2024(self) -> bool {
8696
self >= Edition::Edition2024
8797
}
98+
99+
/// Are we allowed to use features from the Rust 2027 edition?
100+
pub fn at_least_rust_2027(self) -> bool {
101+
self >= Edition::Edition2027
102+
}
88103
}
89104

90105
impl FromStr for Edition {
@@ -95,6 +110,7 @@ impl FromStr for Edition {
95110
"2018" => Ok(Edition::Edition2018),
96111
"2021" => Ok(Edition::Edition2021),
97112
"2024" => Ok(Edition::Edition2024),
113+
"2027" => Ok(Edition::Edition2027),
98114
_ => Err(()),
99115
}
100116
}

Diff for: compiler/rustc_span/src/lib.rs

+6
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,12 @@ impl Span {
785785
self.edition().at_least_rust_2024()
786786
}
787787

788+
/// Are we allowed to use features from the Rust 2027 edition?
789+
#[inline]
790+
pub fn at_least_rust_2027(self) -> bool {
791+
self.edition().at_least_rust_2027()
792+
}
793+
788794
/// Returns the source callee.
789795
///
790796
/// Returns `None` if the supplied span has no expansion trace,

Diff for: compiler/rustc_span/src/symbol.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1681,6 +1681,7 @@ symbols! {
16811681
rust_2018_preview,
16821682
rust_2021,
16831683
rust_2024,
1684+
rust_2027,
16841685
rust_analyzer,
16851686
rust_begin_unwind,
16861687
rust_cold_cc,

Diff for: library/core/src/prelude/mod.rs

+10
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,13 @@ pub mod rust_2024 {
8888
#[doc(no_inline)]
8989
pub use crate::future::{Future, IntoFuture};
9090
}
91+
92+
/// The 2027 edition of the core prelude.
93+
///
94+
/// See the [module-level documentation](self) for more.
95+
#[unstable(feature = "prelude_2027", issue = "none")]
96+
pub mod rust_2027 {
97+
#[unstable(feature = "prelude_2027", issue = "none")]
98+
#[doc(no_inline)]
99+
pub use super::rust_2024::*;
100+
}

Diff for: library/std/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@
347347
#![feature(pin_coerce_unsized_trait)]
348348
#![feature(pointer_is_aligned_to)]
349349
#![feature(portable_simd)]
350+
#![feature(prelude_2027)]
350351
#![feature(ptr_as_uninit)]
351352
#![feature(ptr_mask)]
352353
#![feature(random)]

Diff for: library/std/src/prelude/mod.rs

+14
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,17 @@ pub mod rust_2024 {
178178
#[doc(no_inline)]
179179
pub use core::prelude::rust_2024::*;
180180
}
181+
182+
/// The 2027 version of the prelude of The Rust Standard Library.
183+
///
184+
/// See the [module-level documentation](self) for more.
185+
#[unstable(feature = "prelude_2027", issue = "none")]
186+
pub mod rust_2027 {
187+
#[unstable(feature = "prelude_2027", issue = "none")]
188+
#[doc(no_inline)]
189+
pub use super::v1::*;
190+
191+
#[unstable(feature = "prelude_2027", issue = "none")]
192+
#[doc(no_inline)]
193+
pub use core::prelude::rust_2027::*;
194+
}

Diff for: src/tools/rustfmt/src/config/options.rs

+12
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,10 @@ pub enum Edition {
443443
#[doc_hint = "2024"]
444444
/// Edition 2024.
445445
Edition2024,
446+
#[value = "2027"]
447+
#[doc_hint = "2027"]
448+
/// Edition 2027.
449+
Edition2027,
446450
}
447451

448452
impl Default for Edition {
@@ -458,6 +462,7 @@ impl From<Edition> for rustc_span::edition::Edition {
458462
Edition::Edition2018 => Self::Edition2018,
459463
Edition::Edition2021 => Self::Edition2021,
460464
Edition::Edition2024 => Self::Edition2024,
465+
Edition::Edition2027 => Self::Edition2027,
461466
}
462467
}
463468
}
@@ -469,6 +474,7 @@ impl From<Edition> for StyleEdition {
469474
Edition::Edition2018 => StyleEdition::Edition2018,
470475
Edition::Edition2021 => StyleEdition::Edition2021,
471476
Edition::Edition2024 => StyleEdition::Edition2024,
477+
Edition::Edition2027 => StyleEdition::Edition2027,
472478
}
473479
}
474480
}
@@ -513,6 +519,11 @@ pub enum StyleEdition {
513519
#[doc_hint = "2024"]
514520
/// [Edition 2024]().
515521
Edition2024,
522+
#[value = "2027"]
523+
#[doc_hint = "2027"]
524+
#[unstable_variant]
525+
/// [Edition 2027]().
526+
Edition2027,
516527
}
517528

518529
impl From<StyleEdition> for rustc_span::edition::Edition {
@@ -522,6 +533,7 @@ impl From<StyleEdition> for rustc_span::edition::Edition {
522533
StyleEdition::Edition2018 => Self::Edition2018,
523534
StyleEdition::Edition2021 => Self::Edition2021,
524535
StyleEdition::Edition2024 => Self::Edition2024,
536+
StyleEdition::Edition2027 => Self::Edition2027,
525537
}
526538
}
527539
}

Diff for: src/tools/rustfmt/src/config/style_edition.rs

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ macro_rules! style_edition_default {
3131
| $crate::config::StyleEdition::Edition2018
3232
| $crate::config::StyleEdition::Edition2021 => $default_2015,
3333
$crate::config::StyleEdition::Edition2024 => $default_2024,
34+
$crate::config::StyleEdition::Edition2027 => $default_2027,
3435
}
3536
}
3637
}

0 commit comments

Comments
 (0)