Create 2024 edition
This commit is contained in:
parent
79f178b76e
commit
6b75406f5a
14 changed files with 83 additions and 12 deletions
|
@ -722,7 +722,7 @@ impl NonterminalKind {
|
||||||
Edition::Edition2015 | Edition::Edition2018 => {
|
Edition::Edition2015 | Edition::Edition2018 => {
|
||||||
NonterminalKind::PatParam { inferred: true }
|
NonterminalKind::PatParam { inferred: true }
|
||||||
}
|
}
|
||||||
Edition::Edition2021 => NonterminalKind::PatWithOr,
|
Edition::Edition2021 | Edition::Edition2024 => NonterminalKind::PatWithOr,
|
||||||
},
|
},
|
||||||
sym::pat_param => NonterminalKind::PatParam { inferred: false },
|
sym::pat_param => NonterminalKind::PatParam { inferred: false },
|
||||||
sym::expr => NonterminalKind::Expr,
|
sym::expr => NonterminalKind::Expr,
|
||||||
|
|
|
@ -70,6 +70,7 @@ pub fn inject(
|
||||||
Edition2015 => sym::rust_2015,
|
Edition2015 => sym::rust_2015,
|
||||||
Edition2018 => sym::rust_2018,
|
Edition2018 => sym::rust_2018,
|
||||||
Edition2021 => sym::rust_2021,
|
Edition2021 => sym::rust_2021,
|
||||||
|
Edition2024 => sym::rust_2024,
|
||||||
}])
|
}])
|
||||||
.map(|&symbol| Ident::new(symbol, span))
|
.map(|&symbol| Ident::new(symbol, span))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
|
@ -1033,7 +1033,7 @@ fn check_matcher_core(
|
||||||
err.span_label(sp, format!("not allowed after `{}` fragments", kind));
|
err.span_label(sp, format!("not allowed after `{}` fragments", kind));
|
||||||
|
|
||||||
if kind == NonterminalKind::PatWithOr
|
if kind == NonterminalKind::PatWithOr
|
||||||
&& sess.edition == Edition::Edition2021
|
&& sess.edition.rust_2021()
|
||||||
&& next_token.is_token(&BinOp(token::BinOpToken::Or))
|
&& next_token.is_token(&BinOp(token::BinOpToken::Or))
|
||||||
{
|
{
|
||||||
let suggestion = quoted_tt_to_string(&TokenTree::MetaVarDecl(
|
let suggestion = quoted_tt_to_string(&TokenTree::MetaVarDecl(
|
||||||
|
|
|
@ -945,6 +945,11 @@ impl Session {
|
||||||
self.opts.edition >= Edition::Edition2021
|
self.opts.edition >= Edition::Edition2021
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Are we allowed to use features from the Rust 2024 edition?
|
||||||
|
pub fn rust_2024(&self) -> bool {
|
||||||
|
self.opts.edition >= Edition::Edition2024
|
||||||
|
}
|
||||||
|
|
||||||
pub fn edition(&self) -> Edition {
|
pub fn edition(&self) -> Edition {
|
||||||
self.opts.edition
|
self.opts.edition
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,13 +22,15 @@ pub enum Edition {
|
||||||
Edition2018,
|
Edition2018,
|
||||||
/// The 2021 edition
|
/// The 2021 edition
|
||||||
Edition2021,
|
Edition2021,
|
||||||
|
/// The 2024 edition
|
||||||
|
Edition2024,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be in order from oldest to newest.
|
// Must be in order from oldest to newest.
|
||||||
pub const ALL_EDITIONS: &[Edition] =
|
pub const ALL_EDITIONS: &[Edition] =
|
||||||
&[Edition::Edition2015, Edition::Edition2018, Edition::Edition2021];
|
&[Edition::Edition2015, Edition::Edition2018, Edition::Edition2021, Edition::Edition2024];
|
||||||
|
|
||||||
pub const EDITION_NAME_LIST: &str = "2015|2018|2021";
|
pub const EDITION_NAME_LIST: &str = "2015|2018|2021|2024";
|
||||||
|
|
||||||
pub const DEFAULT_EDITION: Edition = Edition::Edition2015;
|
pub const DEFAULT_EDITION: Edition = Edition::Edition2015;
|
||||||
|
|
||||||
|
@ -40,6 +42,7 @@ impl fmt::Display for Edition {
|
||||||
Edition::Edition2015 => "2015",
|
Edition::Edition2015 => "2015",
|
||||||
Edition::Edition2018 => "2018",
|
Edition::Edition2018 => "2018",
|
||||||
Edition::Edition2021 => "2021",
|
Edition::Edition2021 => "2021",
|
||||||
|
Edition::Edition2024 => "2024",
|
||||||
};
|
};
|
||||||
write!(f, "{}", s)
|
write!(f, "{}", s)
|
||||||
}
|
}
|
||||||
|
@ -51,6 +54,7 @@ impl Edition {
|
||||||
Edition::Edition2015 => "rust_2015_compatibility",
|
Edition::Edition2015 => "rust_2015_compatibility",
|
||||||
Edition::Edition2018 => "rust_2018_compatibility",
|
Edition::Edition2018 => "rust_2018_compatibility",
|
||||||
Edition::Edition2021 => "rust_2021_compatibility",
|
Edition::Edition2021 => "rust_2021_compatibility",
|
||||||
|
Edition::Edition2024 => "rust_2024_compatibility",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,6 +63,7 @@ impl Edition {
|
||||||
Edition::Edition2015 => sym::rust_2015_preview,
|
Edition::Edition2015 => sym::rust_2015_preview,
|
||||||
Edition::Edition2018 => sym::rust_2018_preview,
|
Edition::Edition2018 => sym::rust_2018_preview,
|
||||||
Edition::Edition2021 => sym::rust_2021_preview,
|
Edition::Edition2021 => sym::rust_2021_preview,
|
||||||
|
Edition::Edition2024 => sym::rust_2024_preview,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,8 +72,28 @@ impl Edition {
|
||||||
Edition::Edition2015 => true,
|
Edition::Edition2015 => true,
|
||||||
Edition::Edition2018 => true,
|
Edition::Edition2018 => true,
|
||||||
Edition::Edition2021 => true,
|
Edition::Edition2021 => true,
|
||||||
|
Edition::Edition2024 => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn rust_2015(&self) -> bool {
|
||||||
|
*self == Edition::Edition2015
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Are we allowed to use features from the Rust 2018 edition?
|
||||||
|
pub fn rust_2018(&self) -> bool {
|
||||||
|
*self >= Edition::Edition2018
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Are we allowed to use features from the Rust 2021 edition?
|
||||||
|
pub fn rust_2021(&self) -> bool {
|
||||||
|
*self >= Edition::Edition2021
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Are we allowed to use features from the Rust 2024 edition?
|
||||||
|
pub fn rust_2024(&self) -> bool {
|
||||||
|
*self >= Edition::Edition2024
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for Edition {
|
impl FromStr for Edition {
|
||||||
|
@ -78,6 +103,7 @@ impl FromStr for Edition {
|
||||||
"2015" => Ok(Edition::Edition2015),
|
"2015" => Ok(Edition::Edition2015),
|
||||||
"2018" => Ok(Edition::Edition2018),
|
"2018" => Ok(Edition::Edition2018),
|
||||||
"2021" => Ok(Edition::Edition2021),
|
"2021" => Ok(Edition::Edition2021),
|
||||||
|
"2024" => Ok(Edition::Edition2024),
|
||||||
_ => Err(()),
|
_ => Err(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -698,6 +698,11 @@ impl Span {
|
||||||
self.edition() >= edition::Edition::Edition2021
|
self.edition() >= edition::Edition::Edition2021
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn rust_2024(self) -> bool {
|
||||||
|
self.edition() >= edition::Edition::Edition2024
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the source callee.
|
/// Returns the source callee.
|
||||||
///
|
///
|
||||||
/// Returns `None` if the supplied span has no expansion trace,
|
/// Returns `None` if the supplied span has no expansion trace,
|
||||||
|
|
|
@ -1145,6 +1145,8 @@ symbols! {
|
||||||
rust_2018_preview,
|
rust_2018_preview,
|
||||||
rust_2021,
|
rust_2021,
|
||||||
rust_2021_preview,
|
rust_2021_preview,
|
||||||
|
rust_2024,
|
||||||
|
rust_2024_preview,
|
||||||
rust_begin_unwind,
|
rust_begin_unwind,
|
||||||
rust_eh_catch_typeinfo,
|
rust_eh_catch_typeinfo,
|
||||||
rust_eh_personality,
|
rust_eh_personality,
|
||||||
|
|
|
@ -45,3 +45,13 @@ pub mod rust_2021 {
|
||||||
#[doc(no_inline)]
|
#[doc(no_inline)]
|
||||||
pub use crate::convert::{TryFrom, TryInto};
|
pub use crate::convert::{TryFrom, TryInto};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The 2024 edition of the core prelude.
|
||||||
|
///
|
||||||
|
/// See the [module-level documentation](self) for more.
|
||||||
|
#[unstable(feature = "prelude_2024", issue = "none")]
|
||||||
|
pub mod rust_2024 {
|
||||||
|
#[unstable(feature = "prelude_2024", issue = "none")]
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use super::rust_2021::*;
|
||||||
|
}
|
||||||
|
|
|
@ -279,6 +279,7 @@
|
||||||
#![feature(panic_info_message)]
|
#![feature(panic_info_message)]
|
||||||
#![feature(panic_internals)]
|
#![feature(panic_internals)]
|
||||||
#![feature(portable_simd)]
|
#![feature(portable_simd)]
|
||||||
|
#![feature(prelude_2024)]
|
||||||
#![feature(ptr_as_uninit)]
|
#![feature(ptr_as_uninit)]
|
||||||
#![feature(raw_os_nonzero)]
|
#![feature(raw_os_nonzero)]
|
||||||
#![feature(slice_internals)]
|
#![feature(slice_internals)]
|
||||||
|
|
|
@ -132,3 +132,17 @@ pub mod rust_2021 {
|
||||||
#[doc(no_inline)]
|
#[doc(no_inline)]
|
||||||
pub use core::prelude::rust_2021::*;
|
pub use core::prelude::rust_2021::*;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The 2024 version of the prelude of The Rust Standard Library.
|
||||||
|
///
|
||||||
|
/// See the [module-level documentation](self) for more.
|
||||||
|
#[unstable(feature = "prelude_2024", issue = "none")]
|
||||||
|
pub mod rust_2024 {
|
||||||
|
#[unstable(feature = "prelude_2024", issue = "none")]
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use super::v1::*;
|
||||||
|
|
||||||
|
#[unstable(feature = "prelude_2024", issue = "none")]
|
||||||
|
#[doc(no_inline)]
|
||||||
|
pub use core::prelude::rust_2024::*;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,12 @@
|
||||||
// run-pass
|
// run-pass
|
||||||
|
// revisions: e2015 e2018 e2021 e2024
|
||||||
|
|
||||||
pub fn main() {
|
//[e2018] edition:2018
|
||||||
println!("hello, world");
|
//[e2021] edition:2021
|
||||||
|
//[e2024] edition:2024
|
||||||
|
|
||||||
|
//[e2024] compile-flags: -Zunstable-options
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("hello");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
// run-pass
|
|
||||||
// edition:2021
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
println!("hello, 2021");
|
|
||||||
}
|
|
|
@ -693,6 +693,7 @@ fn edition_from_edition_str(edition_str: &str) -> Result<Edition> {
|
||||||
"2015" => Ok(Edition::Edition2015),
|
"2015" => Ok(Edition::Edition2015),
|
||||||
"2018" => Ok(Edition::Edition2018),
|
"2018" => Ok(Edition::Edition2018),
|
||||||
"2021" => Ok(Edition::Edition2021),
|
"2021" => Ok(Edition::Edition2021),
|
||||||
|
"2024" => Ok(Edition::Edition2024),
|
||||||
_ => Err(format_err!("Invalid value for `--edition`")),
|
_ => Err(format_err!("Invalid value for `--edition`")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -423,6 +423,10 @@ pub enum Edition {
|
||||||
#[doc_hint = "2021"]
|
#[doc_hint = "2021"]
|
||||||
/// Edition 2021.
|
/// Edition 2021.
|
||||||
Edition2021,
|
Edition2021,
|
||||||
|
#[value = "2024"]
|
||||||
|
#[doc_hint = "2024"]
|
||||||
|
/// Edition 2024.
|
||||||
|
Edition2024,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for Edition {
|
impl Default for Edition {
|
||||||
|
@ -437,6 +441,7 @@ impl From<Edition> for rustc_span::edition::Edition {
|
||||||
Edition::Edition2015 => Self::Edition2015,
|
Edition::Edition2015 => Self::Edition2015,
|
||||||
Edition::Edition2018 => Self::Edition2018,
|
Edition::Edition2018 => Self::Edition2018,
|
||||||
Edition::Edition2021 => Self::Edition2021,
|
Edition::Edition2021 => Self::Edition2021,
|
||||||
|
Edition::Edition2024 => Self::Edition2024,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue