parser will not give wrong help message for 'public'
This commit is contained in:
parent
38528d4dc0
commit
351acc87f5
7 changed files with 65 additions and 10 deletions
|
@ -22,7 +22,7 @@ use rustc_errors::{
|
||||||
use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed};
|
use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed};
|
||||||
use rustc_macros::{SessionDiagnostic, SessionSubdiagnostic};
|
use rustc_macros::{SessionDiagnostic, SessionSubdiagnostic};
|
||||||
use rustc_span::source_map::Spanned;
|
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 rustc_span::{Span, SpanSnippetError, DUMMY_SP};
|
||||||
use std::ops::{Deref, DerefMut};
|
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);
|
let mut err = self.struct_span_err(self.token.span, &msg_exp);
|
||||||
|
|
||||||
if let TokenKind::Ident(symbol, _) = &self.prev_token.kind {
|
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()) {
|
if ["def", "fun", "func", "function"].contains(&symbol.as_str()) {
|
||||||
err.span_suggestion_short(
|
err.span_suggestion_short(
|
||||||
self.prev_token.span,
|
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
|
// Add suggestion for a missing closing angle bracket if '>' is included in expected_tokens
|
||||||
// there are unclosed angle brackets
|
// there are unclosed angle brackets
|
||||||
if self.unmatched_angle_bracket_count > 0
|
if self.unmatched_angle_bracket_count > 0
|
||||||
|
|
|
@ -1118,6 +1118,7 @@ symbols! {
|
||||||
ptr_offset_from_unsigned,
|
ptr_offset_from_unsigned,
|
||||||
pub_macro_rules,
|
pub_macro_rules,
|
||||||
pub_restricted,
|
pub_restricted,
|
||||||
|
public,
|
||||||
pure,
|
pure,
|
||||||
pushpop_unsafe,
|
pushpop_unsafe,
|
||||||
qreg,
|
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…
Add table
Add a link
Reference in a new issue