Rollup merge of #89221 - aDotInTheVoid:macro-error-1, r=estebank

Give better error for `macro_rules! name!`

r? ``@estebank``

``@rustbot`` modify labels: +A-diagnostics +A-parser
This commit is contained in:
Jubilee 2021-09-24 11:40:17 -07:00 committed by GitHub
commit 6f31fa58fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 0 deletions

View File

@ -1547,6 +1547,20 @@ impl<'a> Parser<'a> {
self.expect(&token::Not)?; // `!`
let ident = self.parse_ident()?;
if self.eat(&token::Not) {
// Handle macro_rules! foo!
let span = self.prev_token.span;
self.struct_span_err(span, "macro names aren't followed by a `!`")
.span_suggestion(
span,
"remove the `!`",
"".to_owned(),
Applicability::MachineApplicable,
)
.emit();
}
let body = self.parse_mac_args()?;
self.eat_semi_for_macro_if_needed(&body);
self.complain_if_pub_macro(vis, true);

View File

@ -0,0 +1,8 @@
// run-rustfix
#[allow(unused_macros)]
macro_rules! foo { //~ ERROR macro names aren't followed by a `!`
() => {};
}
fn main() {}

View File

@ -0,0 +1,8 @@
// run-rustfix
#[allow(unused_macros)]
macro_rules! foo! { //~ ERROR macro names aren't followed by a `!`
() => {};
}
fn main() {}

View File

@ -0,0 +1,8 @@
error: macro names aren't followed by a `!`
--> $DIR/bang-after-name.rs:4:17
|
LL | macro_rules! foo! {
| ^ help: remove the `!`
error: aborting due to previous error