Suggest using raw identifiers in 2018 edition when using keywords

This commit is contained in:
Esteban Küber 2018-12-29 17:19:22 -08:00
parent 433ef826f0
commit 833f12ebd7
6 changed files with 47 additions and 8 deletions

View File

@ -798,7 +798,18 @@ impl<'a> Parser<'a> {
let mut err = self.struct_span_err(self.span,
&format!("expected identifier, found {}",
self.this_token_descr()));
if let Some(token_descr) = self.token_descr() {
if let (true, token::Ident(ref s, false), true) = (
self.span.rust_2018(),
&self.token,
self.token.is_used_keyword() || self.token.is_unused_keyword(),
) {
err.span_suggestion_with_applicability(
self.span,
"you can escape reserved keywords to use them as identifiers",
format!("r#{}", s.to_string()),
Applicability::MaybeIncorrect,
);
} else if let Some(token_descr) = self.token_descr() {
err.span_label(self.span, format!("expected identifier, found {}", token_descr));
} else {
err.span_label(self.span, "expected identifier");

View File

@ -2,9 +2,13 @@ error: expected identifier, found reserved keyword `async`
--> $DIR/edition-keywords-2015-2018-expansion.rs:8:5
|
LL | produces_async! {} //~ ERROR expected identifier, found reserved keyword
| ^^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword
| ^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
help: you can escape reserved keywords to use them as identifiers
|
LL | ( ) => ( pub fn r#async ( ) { } )
| ^^^^^^^
error: aborting due to previous error

View File

@ -2,13 +2,21 @@ error: expected identifier, found reserved keyword `async`
--> $DIR/edition-keywords-2018-2015-parsing.rs:8:13
|
LL | let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
| ^^^^^
help: you can escape reserved keywords to use them as identifiers
|
LL | let mut r#async = 1; //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^^^
error: expected identifier, found reserved keyword `async`
--> $DIR/edition-keywords-2018-2015-parsing.rs:18:13
|
LL | module::async(); //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
| ^^^^^
help: you can escape reserved keywords to use them as identifiers
|
LL | module::r#async(); //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^^^
error: no rules expected the token `r#async`
--> $DIR/edition-keywords-2018-2015-parsing.rs:12:31

View File

@ -2,9 +2,13 @@ error: expected identifier, found reserved keyword `async`
--> $DIR/edition-keywords-2018-2018-expansion.rs:8:5
|
LL | produces_async! {} //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^^^^^^^^^^^^^^ expected identifier, found reserved keyword
| ^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
help: you can escape reserved keywords to use them as identifiers
|
LL | ( ) => ( pub fn r#async ( ) { } )
| ^^^^^^^
error: aborting due to previous error

View File

@ -2,13 +2,21 @@ error: expected identifier, found reserved keyword `async`
--> $DIR/edition-keywords-2018-2018-parsing.rs:8:13
|
LL | let mut async = 1; //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
| ^^^^^
help: you can escape reserved keywords to use them as identifiers
|
LL | let mut r#async = 1; //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^^^
error: expected identifier, found reserved keyword `async`
--> $DIR/edition-keywords-2018-2018-parsing.rs:18:13
|
LL | module::async(); //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^ expected identifier, found reserved keyword
| ^^^^^
help: you can escape reserved keywords to use them as identifiers
|
LL | module::r#async(); //~ ERROR expected identifier, found reserved keyword `async`
| ^^^^^^^
error: no rules expected the token `r#async`
--> $DIR/edition-keywords-2018-2018-parsing.rs:12:31

View File

@ -2,7 +2,11 @@ error: expected identifier, found keyword `dyn`
--> $DIR/dyn-trait-compatibility.rs:4:16
|
LL | type A1 = dyn::dyn; //~ERROR expected identifier, found keyword `dyn`
| ^^^ expected identifier, found keyword
| ^^^
help: you can escape reserved keywords to use them as identifiers
|
LL | type A1 = dyn::r#dyn; //~ERROR expected identifier, found keyword `dyn`
| ^^^^^
error: expected identifier, found `<`
--> $DIR/dyn-trait-compatibility.rs:5:14