mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-26 14:43:24 +00:00
parser will not give wrong help message for 'public'
This commit is contained in:
parent
38528d4dc0
commit
351acc87f5
@ -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
|
||||
|
@ -1118,6 +1118,7 @@ symbols! {
|
||||
ptr_offset_from_unsigned,
|
||||
pub_macro_rules,
|
||||
pub_restricted,
|
||||
public,
|
||||
pure,
|
||||
pushpop_unsafe,
|
||||
qreg,
|
||||
|
11
src/test/ui/parser/public-instead-of-pub-1.fixed
Normal file
11
src/test/ui/parser/public-instead-of-pub-1.fixed
Normal file
@ -0,0 +1,11 @@
|
||||
// Checks what happens when `public` is used instead of the correct, `pub`
|
||||
// run-rustfix
|
||||
|
||||
pub enum Test {
|
||||
//~^ ERROR expected one of `!` or `::`, found keyword `enum`
|
||||
//~^^ HELP write `pub` instead of `public` to make the item public
|
||||
A,
|
||||
B,
|
||||
}
|
||||
|
||||
fn main() { }
|
11
src/test/ui/parser/public-instead-of-pub-1.rs
Normal file
11
src/test/ui/parser/public-instead-of-pub-1.rs
Normal file
@ -0,0 +1,11 @@
|
||||
// Checks what happens when `public` is used instead of the correct, `pub`
|
||||
// run-rustfix
|
||||
|
||||
public enum Test {
|
||||
//~^ ERROR expected one of `!` or `::`, found keyword `enum`
|
||||
//~^^ HELP write `pub` instead of `public` to make the item public
|
||||
A,
|
||||
B,
|
||||
}
|
||||
|
||||
fn main() { }
|
13
src/test/ui/parser/public-instead-of-pub-1.stderr
Normal file
13
src/test/ui/parser/public-instead-of-pub-1.stderr
Normal file
@ -0,0 +1,13 @@
|
||||
error: expected one of `!` or `::`, found keyword `enum`
|
||||
--> $DIR/public-instead-of-pub-1.rs:4:8
|
||||
|
|
||||
LL | public enum Test {
|
||||
| ^^^^ expected one of `!` or `::`
|
||||
|
|
||||
help: write `pub` instead of `public` to make the item public
|
||||
|
|
||||
LL | pub enum Test {
|
||||
| ~~~
|
||||
|
||||
error: aborting due to previous error
|
||||
|
7
src/test/ui/parser/public-instead-of-pub-2.rs
Normal file
7
src/test/ui/parser/public-instead-of-pub-2.rs
Normal file
@ -0,0 +1,7 @@
|
||||
// Checks what happens when `public` is used instead of the correct, `pub`
|
||||
// Won't give help message for this case
|
||||
|
||||
public let x = 1;
|
||||
//~^ ERROR expected one of `!` or `::`, found keyword `let`
|
||||
|
||||
fn main() { }
|
8
src/test/ui/parser/public-instead-of-pub-2.stderr
Normal file
8
src/test/ui/parser/public-instead-of-pub-2.stderr
Normal file
@ -0,0 +1,8 @@
|
||||
error: expected one of `!` or `::`, found keyword `let`
|
||||
--> $DIR/public-instead-of-pub-2.rs:4:8
|
||||
|
|
||||
LL | public let x = 1;
|
||||
| ^^^ expected one of `!` or `::`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user