Only eat semicolons for statements that need them
When parsing a statement (e.g. inside a function body), we now consider `struct Foo {};` and `$stmt;` to each consist of two statements: `struct Foo {}` and `;`, and `$stmt` and `;`. As a result, an attribute macro invoke as `fn foo() { #[attr] struct Bar{}; }` will see `struct Bar{}` as its input. Additionally, the 'unused semicolon' lint now fires in more places.
This commit is contained in:
parent
de88bf148b
commit
758834d3e2
@ -473,8 +473,7 @@ impl<'a> Parser<'a> {
|
|||||||
// so capture it
|
// so capture it
|
||||||
add_semi_token(local.tokens.as_mut());
|
add_semi_token(local.tokens.as_mut());
|
||||||
}
|
}
|
||||||
StmtKind::Empty => eat_semi = false,
|
StmtKind::Empty | StmtKind::Item(_) | StmtKind::Semi(_) => eat_semi = false,
|
||||||
_ => {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if eat_semi && self.eat(&token::Semi) {
|
if eat_semi && self.eat(&token::Semi) {
|
||||||
|
@ -261,7 +261,7 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||||||
span: $DIR/allowed-attr-stmt-expr.rs:53:54: 53:56 (#0),
|
span: $DIR/allowed-attr-stmt-expr.rs:53:54: 53:56 (#0),
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
PRINT-ATTR INPUT (DISPLAY): #[rustc_dummy] struct Other { } ;
|
PRINT-ATTR INPUT (DISPLAY): #[rustc_dummy] struct Other { }
|
||||||
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
PRINT-ATTR INPUT (DEBUG): TokenStream [
|
||||||
Punct {
|
Punct {
|
||||||
ch: '#',
|
ch: '#',
|
||||||
@ -291,9 +291,4 @@ PRINT-ATTR INPUT (DEBUG): TokenStream [
|
|||||||
stream: TokenStream [],
|
stream: TokenStream [],
|
||||||
span: $DIR/allowed-attr-stmt-expr.rs:57:18: 57:20 (#0),
|
span: $DIR/allowed-attr-stmt-expr.rs:57:18: 57:20 (#0),
|
||||||
},
|
},
|
||||||
Punct {
|
|
||||||
ch: ';',
|
|
||||||
spacing: Alone,
|
|
||||||
span: $DIR/allowed-attr-stmt-expr.rs:57:20: 57:21 (#0),
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user