diff options
| author | Mara Bos <m-ou.se@m-ou.se> | 2021-06-14 20:38:57 +0000 |
|---|---|---|
| committer | lrh2000 <lrh2000@pku.edu.cn> | 2021-06-26 23:11:14 +0800 |
| commit | 7490305e13bd90b4c4697d465ceea8df2625a7ad (patch) | |
| tree | 4b4fa193439aa36fe71980bc5e52b2983a2375f3 | |
| parent | c7f7c2efe02170850428e435b5a616f0bbc4ac37 (diff) | |
| download | rust-7490305e13bd90b4c4697d465ceea8df2625a7ad.tar.gz rust-7490305e13bd90b4c4697d465ceea8df2625a7ad.zip | |
No reserved_prefix suggestion in proc macro call_site.
| -rw-r--r-- | compiler/rustc_parse/src/lexer/mod.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/compiler/rustc_parse/src/lexer/mod.rs b/compiler/rustc_parse/src/lexer/mod.rs index 0f6b9a2f122..87e60a48e44 100644 --- a/compiler/rustc_parse/src/lexer/mod.rs +++ b/compiler/rustc_parse/src/lexer/mod.rs @@ -8,7 +8,7 @@ use rustc_session::lint::builtin::RESERVED_PREFIX; use rustc_session::lint::BuiltinLintDiagnostics; use rustc_session::parse::ParseSess; use rustc_span::symbol::{sym, Symbol}; -use rustc_span::{BytePos, Pos, Span}; +use rustc_span::{edition::Edition, BytePos, Pos, Span}; use tracing::debug; @@ -507,20 +507,22 @@ impl<'a> StringReader<'a> { let prefix_span = self.mk_sp(start, self.pos); let msg = format!("prefix `{}` is unknown", self.str_from_to(start, self.pos)); - if prefix_span.rust_2021() { + let expn_data = prefix_span.ctxt().outer_expn_data(); + + if expn_data.edition >= Edition::Edition2021 { // In Rust 2021, this is a hard error. - self.sess - .span_diagnostic - .struct_span_err(prefix_span, &msg) - .span_label(prefix_span, "unknown prefix") - .span_suggestion_verbose( - self.mk_sp(self.pos, self.pos), + let mut err = self.sess.span_diagnostic.struct_span_err(prefix_span, &msg); + err.span_label(prefix_span, "unknown prefix"); + if expn_data.is_root() { + err.span_suggestion_verbose( + prefix_span.shrink_to_hi(), "consider inserting whitespace here", " ".into(), Applicability::MachineApplicable, - ) - .note("prefixed identifiers and literals are reserved since Rust 2021") - .emit(); + ); + } + err.note("prefixed identifiers and literals are reserved since Rust 2021"); + err.emit(); } else { // Before Rust 2021, only emit a lint for migration. self.sess.buffer_lint_with_diagnostic( |
