about summary refs log tree commit diff
path: root/compiler/rustc_parse/src
diff options
context:
space:
mode:
authorMara Bos <m-ou.se@m-ou.se>2021-06-14 12:56:49 +0000
committerlrh2000 <lrh2000@pku.edu.cn>2021-06-26 23:11:04 +0800
commitd837c00d1008c2ab13bf80117b81f5e482fc9edb (patch)
treef17ee6f36f349b76ad8b54e360812a392604b01d /compiler/rustc_parse/src
parent40fb2e97053e2655016688264ff19160741c1dbb (diff)
downloadrust-d837c00d1008c2ab13bf80117b81f5e482fc9edb.tar.gz
rust-d837c00d1008c2ab13bf80117b81f5e482fc9edb.zip
Add migration lint for reserved prefixes.
Diffstat (limited to 'compiler/rustc_parse/src')
-rw-r--r--compiler/rustc_parse/src/lexer/mod.rs23
1 files changed, 16 insertions, 7 deletions
diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs
index f5eba5056ea..f50e8a8db01 100644
--- a/compiler/rustc_parse/src/lexer/mod.rs
+++ b/compiler/rustc_parse/src/lexer/mod.rs
@@ -1,9 +1,11 @@
-use rustc_ast::ast::AttrStyle;
+use rustc_ast::ast::{self, AttrStyle};
 use rustc_ast::token::{self, CommentKind, Token, TokenKind};
 use rustc_ast::tokenstream::{Spacing, TokenStream};
 use rustc_errors::{error_code, Applicability, DiagnosticBuilder, FatalError, PResult};
 use rustc_lexer::unescape::{self, Mode};
 use rustc_lexer::{Base, DocStyle, RawStrError};
+use rustc_session::lint::builtin::RESERVED_PREFIX;
+use rustc_session::lint::BuiltinLintDiagnostics;
 use rustc_session::parse::ParseSess;
 use rustc_span::edition::Edition;
 use rustc_span::symbol::{sym, Symbol};
@@ -498,17 +500,24 @@ impl<'a> StringReader<'a> {
         FatalError.raise()
     }
 
+    // See RFC 3101.
     fn report_reserved_prefix(&self, start: BytePos) {
-        // See RFC 3101.
+        let prefix_span = self.mk_sp(start, self.pos);
+        let msg = format!("prefix `{}` is unknown", self.str_from_to(start, self.pos));
+
         if self.sess.edition < Edition::Edition2021 {
+            self.sess.buffer_lint_with_diagnostic(
+                &RESERVED_PREFIX,
+                prefix_span,
+                ast::CRATE_NODE_ID,
+                &msg,
+                BuiltinLintDiagnostics::ReservedPrefix(prefix_span),
+            );
             return;
         }
 
-        let mut err = self.sess.span_diagnostic.struct_span_err(
-            self.mk_sp(start, self.pos),
-            &format!("prefix `{}` is unknown", self.str_from_to(start, self.pos)),
-        );
-        err.span_label(self.mk_sp(start, self.pos), "unknown prefix");
+        let mut err = self.sess.span_diagnostic.struct_span_err(prefix_span, &msg);
+        err.span_label(prefix_span, "unknown prefix");
         err.span_suggestion_verbose(
             self.mk_sp(self.pos, self.pos),
             "consider inserting whitespace here",