Add edition 2021.
This commit is contained in:
parent
44e3daf5ee
commit
f16ef7d7ce
12 changed files with 57 additions and 28 deletions
|
@ -15,6 +15,7 @@ use rustc_ast::{AnonConst, BinOp, BinOpKind, FnDecl, FnRetTy, MacCall, Param, Ty
|
||||||
use rustc_ast::{Arm, Async, BlockCheckMode, Expr, ExprKind, Label, Movability, RangeLimits};
|
use rustc_ast::{Arm, Async, BlockCheckMode, Expr, ExprKind, Label, Movability, RangeLimits};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_errors::{Applicability, DiagnosticBuilder, PResult};
|
use rustc_errors::{Applicability, DiagnosticBuilder, PResult};
|
||||||
|
use rustc_span::edition::LATEST_STABLE_EDITION;
|
||||||
use rustc_span::source_map::{self, Span, Spanned};
|
use rustc_span::source_map::{self, Span, Spanned};
|
||||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||||
use rustc_span::{BytePos, Pos};
|
use rustc_span::{BytePos, Pos};
|
||||||
|
@ -2108,8 +2109,8 @@ impl<'a> Parser<'a> {
|
||||||
|
|
||||||
let mut async_block_err = |e: &mut DiagnosticBuilder<'_>, span: Span| {
|
let mut async_block_err = |e: &mut DiagnosticBuilder<'_>, span: Span| {
|
||||||
recover_async = true;
|
recover_async = true;
|
||||||
e.span_label(span, "`async` blocks are only allowed in the 2018 edition");
|
e.span_label(span, "`async` blocks are only allowed in edition 2018 or later");
|
||||||
e.help("set `edition = \"2018\"` in `Cargo.toml`");
|
e.help(&format!("set `edition = \"{}\"` in `Cargo.toml`", LATEST_STABLE_EDITION));
|
||||||
e.note("for more on editions, read https://doc.rust-lang.org/edition-guide");
|
e.note("for more on editions, read https://doc.rust-lang.org/edition-guide");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ use rustc_ast::{FnHeader, ForeignItem, Path, PathSegment, Visibility, Visibility
|
||||||
use rustc_ast::{MacArgs, MacCall, MacDelimiter};
|
use rustc_ast::{MacArgs, MacCall, MacDelimiter};
|
||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_errors::{struct_span_err, Applicability, PResult, StashKey};
|
use rustc_errors::{struct_span_err, Applicability, PResult, StashKey};
|
||||||
use rustc_span::edition::Edition;
|
use rustc_span::edition::{Edition, LATEST_STABLE_EDITION};
|
||||||
use rustc_span::source_map::{self, Span};
|
use rustc_span::source_map::{self, Span};
|
||||||
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
use rustc_span::symbol::{kw, sym, Ident, Symbol};
|
||||||
|
|
||||||
|
@ -1668,8 +1668,8 @@ impl<'a> Parser<'a> {
|
||||||
if span.rust_2015() {
|
if span.rust_2015() {
|
||||||
let diag = self.diagnostic();
|
let diag = self.diagnostic();
|
||||||
struct_span_err!(diag, span, E0670, "`async fn` is not permitted in the 2015 edition")
|
struct_span_err!(diag, span, E0670, "`async fn` is not permitted in the 2015 edition")
|
||||||
.span_label(span, "to use `async fn`, switch to Rust 2018")
|
.span_label(span, "to use `async fn`, switch to Rust 2018 or later")
|
||||||
.help("set `edition = \"2018\"` in `Cargo.toml`")
|
.help(&format!("set `edition = \"{}\"` in `Cargo.toml`", LATEST_STABLE_EDITION))
|
||||||
.note("for more on editions, read https://doc.rust-lang.org/edition-guide")
|
.note("for more on editions, read https://doc.rust-lang.org/edition-guide")
|
||||||
.emit();
|
.emit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1076,6 +1076,11 @@ impl Session {
|
||||||
self.opts.edition >= Edition::Edition2018
|
self.opts.edition >= Edition::Edition2018
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Are we allowed to use features from the Rust 2021 edition?
|
||||||
|
pub fn rust_2021(&self) -> bool {
|
||||||
|
self.opts.edition >= Edition::Edition2021
|
||||||
|
}
|
||||||
|
|
||||||
pub fn edition(&self) -> Edition {
|
pub fn edition(&self) -> Edition {
|
||||||
self.opts.edition
|
self.opts.edition
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,20 +20,26 @@ pub enum Edition {
|
||||||
Edition2015,
|
Edition2015,
|
||||||
/// The 2018 edition
|
/// The 2018 edition
|
||||||
Edition2018,
|
Edition2018,
|
||||||
|
/// The 2021 ediiton
|
||||||
|
Edition2021,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be in order from oldest to newest.
|
// Must be in order from oldest to newest.
|
||||||
pub const ALL_EDITIONS: &[Edition] = &[Edition::Edition2015, Edition::Edition2018];
|
pub const ALL_EDITIONS: &[Edition] =
|
||||||
|
&[Edition::Edition2015, Edition::Edition2018, Edition::Edition2021];
|
||||||
|
|
||||||
pub const EDITION_NAME_LIST: &str = "2015|2018";
|
pub const EDITION_NAME_LIST: &str = "2015|2018|2021";
|
||||||
|
|
||||||
pub const DEFAULT_EDITION: Edition = Edition::Edition2015;
|
pub const DEFAULT_EDITION: Edition = Edition::Edition2015;
|
||||||
|
|
||||||
|
pub const LATEST_STABLE_EDITION: Edition = Edition::Edition2018;
|
||||||
|
|
||||||
impl fmt::Display for Edition {
|
impl fmt::Display for Edition {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
let s = match *self {
|
let s = match *self {
|
||||||
Edition::Edition2015 => "2015",
|
Edition::Edition2015 => "2015",
|
||||||
Edition::Edition2018 => "2018",
|
Edition::Edition2018 => "2018",
|
||||||
|
Edition::Edition2021 => "2021",
|
||||||
};
|
};
|
||||||
write!(f, "{}", s)
|
write!(f, "{}", s)
|
||||||
}
|
}
|
||||||
|
@ -44,6 +50,7 @@ impl Edition {
|
||||||
match *self {
|
match *self {
|
||||||
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",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +58,7 @@ impl Edition {
|
||||||
match *self {
|
match *self {
|
||||||
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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +66,7 @@ impl Edition {
|
||||||
match *self {
|
match *self {
|
||||||
Edition::Edition2015 => true,
|
Edition::Edition2015 => true,
|
||||||
Edition::Edition2018 => true,
|
Edition::Edition2018 => true,
|
||||||
|
Edition::Edition2021 => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,6 +77,7 @@ impl FromStr for Edition {
|
||||||
match s {
|
match s {
|
||||||
"2015" => Ok(Edition::Edition2015),
|
"2015" => Ok(Edition::Edition2015),
|
||||||
"2018" => Ok(Edition::Edition2018),
|
"2018" => Ok(Edition::Edition2018),
|
||||||
|
"2021" => Ok(Edition::Edition2021),
|
||||||
_ => Err(()),
|
_ => Err(()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -481,6 +481,11 @@ impl Span {
|
||||||
self.edition() >= edition::Edition::Edition2018
|
self.edition() >= edition::Edition::Edition2018
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn rust_2021(&self) -> bool {
|
||||||
|
self.edition() >= edition::Edition::Edition2021
|
||||||
|
}
|
||||||
|
|
||||||
/// 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,
|
||||||
|
|
|
@ -923,6 +923,7 @@ symbols! {
|
||||||
rust,
|
rust,
|
||||||
rust_2015_preview,
|
rust_2015_preview,
|
||||||
rust_2018_preview,
|
rust_2018_preview,
|
||||||
|
rust_2021_preview,
|
||||||
rust_begin_unwind,
|
rust_begin_unwind,
|
||||||
rust_eh_catch_typeinfo,
|
rust_eh_catch_typeinfo,
|
||||||
rust_eh_personality,
|
rust_eh_personality,
|
||||||
|
|
|
@ -38,6 +38,7 @@ use rustc_middle::ty::adjustment::{Adjust, Adjustment, AllowTwoPhase};
|
||||||
use rustc_middle::ty::Ty;
|
use rustc_middle::ty::Ty;
|
||||||
use rustc_middle::ty::TypeFoldable;
|
use rustc_middle::ty::TypeFoldable;
|
||||||
use rustc_middle::ty::{AdtKind, Visibility};
|
use rustc_middle::ty::{AdtKind, Visibility};
|
||||||
|
use rustc_span::edition::LATEST_STABLE_EDITION;
|
||||||
use rustc_span::hygiene::DesugaringKind;
|
use rustc_span::hygiene::DesugaringKind;
|
||||||
use rustc_span::lev_distance::find_best_match_for_name;
|
use rustc_span::lev_distance::find_best_match_for_name;
|
||||||
use rustc_span::source_map::Span;
|
use rustc_span::source_map::Span;
|
||||||
|
@ -1637,8 +1638,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
if field.name == kw::Await {
|
if field.name == kw::Await {
|
||||||
// We know by construction that `<expr>.await` is either on Rust 2015
|
// We know by construction that `<expr>.await` is either on Rust 2015
|
||||||
// or results in `ExprKind::Await`. Suggest switching the edition to 2018.
|
// or results in `ExprKind::Await`. Suggest switching the edition to 2018.
|
||||||
err.note("to `.await` a `Future`, switch to Rust 2018");
|
err.note("to `.await` a `Future`, switch to Rust 2018 or later");
|
||||||
err.help("set `edition = \"2018\"` in `Cargo.toml`");
|
err.help(&format!("set `edition = \"{}\"` in `Cargo.toml`", LATEST_STABLE_EDITION));
|
||||||
err.note("for more on editions, read https://doc.rust-lang.org/edition-guide");
|
err.note("for more on editions, read https://doc.rust-lang.org/edition-guide");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:3:1
|
--> $DIR/edition-deny-async-fns-2015.rs:3:1
|
||||||
|
|
|
|
||||||
LL | async fn foo() {}
|
LL | async fn foo() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -11,7 +11,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:5:12
|
--> $DIR/edition-deny-async-fns-2015.rs:5:12
|
||||||
|
|
|
|
||||||
LL | fn baz() { async fn foo() {} }
|
LL | fn baz() { async fn foo() {} }
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -20,7 +20,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:7:1
|
--> $DIR/edition-deny-async-fns-2015.rs:7:1
|
||||||
|
|
|
|
||||||
LL | async fn async_baz() {
|
LL | async fn async_baz() {
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -29,7 +29,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:8:5
|
--> $DIR/edition-deny-async-fns-2015.rs:8:5
|
||||||
|
|
|
|
||||||
LL | async fn bar() {}
|
LL | async fn bar() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -38,7 +38,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:14:5
|
--> $DIR/edition-deny-async-fns-2015.rs:14:5
|
||||||
|
|
|
|
||||||
LL | async fn foo() {}
|
LL | async fn foo() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -47,7 +47,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:18:5
|
--> $DIR/edition-deny-async-fns-2015.rs:18:5
|
||||||
|
|
|
|
||||||
LL | async fn foo() {}
|
LL | async fn foo() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -56,7 +56,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:36:9
|
--> $DIR/edition-deny-async-fns-2015.rs:36:9
|
||||||
|
|
|
|
||||||
LL | async fn bar() {}
|
LL | async fn bar() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -65,7 +65,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:26:9
|
--> $DIR/edition-deny-async-fns-2015.rs:26:9
|
||||||
|
|
|
|
||||||
LL | async fn foo() {}
|
LL | async fn foo() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -74,7 +74,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/edition-deny-async-fns-2015.rs:31:13
|
--> $DIR/edition-deny-async-fns-2015.rs:31:13
|
||||||
|
|
|
|
||||||
LL | async fn bar() {}
|
LL | async fn bar() {}
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
|
|
@ -4,7 +4,7 @@ error[E0609]: no field `await` on type `await_on_struct_missing::S`
|
||||||
LL | x.await;
|
LL | x.await;
|
||||||
| ^^^^^ unknown field
|
| ^^^^^ unknown field
|
||||||
|
|
|
|
||||||
= note: to `.await` a `Future`, switch to Rust 2018
|
= note: to `.await` a `Future`, switch to Rust 2018 or later
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ error[E0609]: no field `await` on type `await_on_struct_similar::S`
|
||||||
LL | x.await;
|
LL | x.await;
|
||||||
| ^^^^^ help: a field with a similar name exists: `awai`
|
| ^^^^^ help: a field with a similar name exists: `awai`
|
||||||
|
|
|
|
||||||
= note: to `.await` a `Future`, switch to Rust 2018
|
= note: to `.await` a `Future`, switch to Rust 2018 or later
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ error[E0609]: no field `await` on type `Pin<&mut dyn Future<Output = ()>>`
|
||||||
LL | x.await;
|
LL | x.await;
|
||||||
| ^^^^^ unknown field
|
| ^^^^^ unknown field
|
||||||
|
|
|
|
||||||
= note: to `.await` a `Future`, switch to Rust 2018
|
= note: to `.await` a `Future`, switch to Rust 2018 or later
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ error[E0609]: no field `await` on type `impl Future<Output = ()>`
|
||||||
LL | x.await;
|
LL | x.await;
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
|
|
||||||
= note: to `.await` a `Future`, switch to Rust 2018
|
= note: to `.await` a `Future`, switch to Rust 2018 or later
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
async fn foo() {
|
async fn foo() {
|
||||||
//~^ ERROR `async fn` is not permitted in the 2015 edition
|
//~^ ERROR `async fn` is not permitted in the 2015 edition
|
||||||
//~| NOTE to use `async fn`, switch to Rust 2018
|
//~| NOTE to use `async fn`, switch to Rust 2018 or later
|
||||||
//~| HELP set `edition = "2018"` in `Cargo.toml`
|
//~| HELP set `edition = "2018"` in `Cargo.toml`
|
||||||
//~| NOTE for more on editions, read https://doc.rust-lang.org/edition-guide
|
//~| NOTE for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
|
||||||
let x = async {};
|
let x = async {};
|
||||||
//~^ ERROR cannot find struct, variant or union type `async` in this scope
|
//~^ ERROR cannot find struct, variant or union type `async` in this scope
|
||||||
//~| NOTE `async` blocks are only allowed in the 2018 edition
|
//~| NOTE `async` blocks are only allowed in the 2018 edition
|
||||||
let y = async { //~ NOTE `async` blocks are only allowed in the 2018 edition
|
let y = async { //~ NOTE `async` blocks are only allowed in edition 2018 or later
|
||||||
let x = 42;
|
let x = 42;
|
||||||
//~^ ERROR expected identifier, found keyword `let`
|
//~^ ERROR expected identifier, found keyword `let`
|
||||||
//~| NOTE expected identifier, found keyword
|
//~| NOTE expected identifier, found keyword
|
||||||
|
@ -15,7 +15,7 @@ async fn foo() {
|
||||||
//~| NOTE for more on editions, read https://doc.rust-lang.org/edition-guide
|
//~| NOTE for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
42
|
42
|
||||||
};
|
};
|
||||||
let z = async { //~ NOTE `async` blocks are only allowed in the 2018 edition
|
let z = async { //~ NOTE `async` blocks are only allowed in edition 2018 or later
|
||||||
42
|
42
|
||||||
//~^ ERROR expected identifier, found `42`
|
//~^ ERROR expected identifier, found `42`
|
||||||
//~| NOTE expected identifier
|
//~| NOTE expected identifier
|
||||||
|
|
|
@ -2,7 +2,7 @@ error[E0670]: `async fn` is not permitted in the 2015 edition
|
||||||
--> $DIR/async-block-2015.rs:1:1
|
--> $DIR/async-block-2015.rs:1:1
|
||||||
|
|
|
|
||||||
LL | async fn foo() {
|
LL | async fn foo() {
|
||||||
| ^^^^^ to use `async fn`, switch to Rust 2018
|
| ^^^^^ to use `async fn`, switch to Rust 2018 or later
|
||||||
|
|
|
|
||||||
= help: set `edition = "2018"` in `Cargo.toml`
|
= help: set `edition = "2018"` in `Cargo.toml`
|
||||||
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
= note: for more on editions, read https://doc.rust-lang.org/edition-guide
|
||||||
|
@ -11,7 +11,7 @@ error: expected identifier, found keyword `let`
|
||||||
--> $DIR/async-block-2015.rs:11:9
|
--> $DIR/async-block-2015.rs:11:9
|
||||||
|
|
|
|
||||||
LL | let y = async {
|
LL | let y = async {
|
||||||
| ----- `async` blocks are only allowed in the 2018 edition
|
| ----- `async` blocks are only allowed in edition 2018 or later
|
||||||
LL | let x = 42;
|
LL | let x = 42;
|
||||||
| ^^^ expected identifier, found keyword
|
| ^^^ expected identifier, found keyword
|
||||||
|
|
|
|
||||||
|
@ -22,7 +22,7 @@ error: expected identifier, found `42`
|
||||||
--> $DIR/async-block-2015.rs:19:9
|
--> $DIR/async-block-2015.rs:19:9
|
||||||
|
|
|
|
||||||
LL | let z = async {
|
LL | let z = async {
|
||||||
| ----- `async` blocks are only allowed in the 2018 edition
|
| ----- `async` blocks are only allowed in edition 2018 or later
|
||||||
LL | 42
|
LL | 42
|
||||||
| ^^ expected identifier
|
| ^^ expected identifier
|
||||||
|
|
|
|
||||||
|
|
6
src/test/ui/hello2021.rs
Normal file
6
src/test/ui/hello2021.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
// run-pass
|
||||||
|
// edition:2021
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("hello, 2021");
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue