diff options
| author | Yuki Okushi <jtitor@2k36.org> | 2022-08-25 08:50:56 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-25 08:50:56 +0900 |
| commit | ed8cfc86a2a6541f8f998ab45e889fd3f2371cbe (patch) | |
| tree | c4f06237465b59fa226b8163134cd4a80f032e9b /compiler/rustc_parse/src | |
| parent | b3f178350a44095e71306789da441ed785fae28c (diff) | |
| parent | 351acc87f57d05847e95b1863a9c5c7e953e162c (diff) | |
| download | rust-ed8cfc86a2a6541f8f998ab45e889fd3f2371cbe.tar.gz rust-ed8cfc86a2a6541f8f998ab45e889fd3f2371cbe.zip | |
Rollup merge of #100188 - chenyukang:fix-issue-100165, r=estebank
Parser will not suggest invalid expression when use public Fixes #100165
Diffstat (limited to 'compiler/rustc_parse/src')
| -rw-r--r-- | compiler/rustc_parse/src/parser/diagnostics.rs | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index b8884dd32d6..f2d79ce756c 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -22,7 +22,7 @@ use rustc_errors::{ use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed}; use rustc_macros::{SessionDiagnostic, SessionSubdiagnostic}; use rustc_span::source_map::Spanned; -use rustc_span::symbol::{kw, Ident}; +use rustc_span::symbol::{kw, sym, Ident}; use rustc_span::{Span, SpanSnippetError, DUMMY_SP}; use std::ops::{Deref, DerefMut}; @@ -977,15 +977,6 @@ impl<'a> Parser<'a> { let mut err = self.struct_span_err(self.token.span, &msg_exp); if let TokenKind::Ident(symbol, _) = &self.prev_token.kind { - if symbol.as_str() == "public" { - err.span_suggestion_short( - self.prev_token.span, - "write `pub` instead of `public` to make the item public", - "pub", - appl, - ); - } - if ["def", "fun", "func", "function"].contains(&symbol.as_str()) { err.span_suggestion_short( self.prev_token.span, @@ -996,6 +987,19 @@ impl<'a> Parser<'a> { } } + // `pub` may be used for an item or `pub(crate)` + if self.prev_token.is_ident_named(sym::public) + && (self.token.can_begin_item() + || self.token.kind == TokenKind::OpenDelim(Delimiter::Parenthesis)) + { + err.span_suggestion_short( + self.prev_token.span, + "write `pub` instead of `public` to make the item public", + "pub", + appl, + ); + } + // Add suggestion for a missing closing angle bracket if '>' is included in expected_tokens // there are unclosed angle brackets if self.unmatched_angle_bracket_count > 0 |
