summary refs log tree commit diff
path: root/src/libsyntax/parse
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-12-29 17:19:22 -0800
committerEsteban Küber <esteban@kuber.com.ar>2018-12-31 08:24:00 -0800
commit833f12ebd71259c21b03d8327107acab2309d064 (patch)
tree13c2322b812a988800bda6fedc83e8a6eeb2c957 /src/libsyntax/parse
parent433ef826f001652f13ecff3697c2233fbe1ce4e2 (diff)
downloadrust-833f12ebd71259c21b03d8327107acab2309d064.tar.gz
rust-833f12ebd71259c21b03d8327107acab2309d064.zip
Suggest using raw identifiers in 2018 edition when using keywords
Diffstat (limited to 'src/libsyntax/parse')
-rw-r--r--src/libsyntax/parse/parser.rs13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 52da8a072c7..1a0366932db 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -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");