Better account for else if
macro conditions mising an if
If a macro statement has been parsed after `else`, suggest a missing `if`: ``` error: expected `{`, found `falsy` --> $DIR/else-no-if.rs:47:12 | LL | } else falsy! {} { | ---- ^^^^^ | | | expected an `if` or a block after this `else` | help: add an `if` if this is the condition of a chained `else if` statement | LL | } else if falsy! {} { | ++ ```
This commit is contained in:
parent
04fe839177
commit
629a69f3e2
2 changed files with 18 additions and 2 deletions
|
@ -2683,6 +2683,13 @@ impl<'a> Parser<'a> {
|
||||||
// ^^
|
// ^^
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
|
// We account for macro calls that were meant as conditions as well.
|
||||||
|
//
|
||||||
|
// if ... {
|
||||||
|
// } else if macro! { foo bar } {
|
||||||
|
// ^^
|
||||||
|
// }
|
||||||
|
//
|
||||||
// If $cond is "statement-like" such as ExprKind::While then we
|
// If $cond is "statement-like" such as ExprKind::While then we
|
||||||
// want to suggest wrapping in braces.
|
// want to suggest wrapping in braces.
|
||||||
//
|
//
|
||||||
|
@ -2693,7 +2700,9 @@ impl<'a> Parser<'a> {
|
||||||
// }
|
// }
|
||||||
// ^
|
// ^
|
||||||
if self.check(&TokenKind::OpenDelim(Delimiter::Brace))
|
if self.check(&TokenKind::OpenDelim(Delimiter::Brace))
|
||||||
&& classify::expr_requires_semi_to_be_stmt(&cond) =>
|
&& (classify::expr_requires_semi_to_be_stmt(&cond)
|
||||||
|
|| matches!(cond.kind, ExprKind::MacCall(..)))
|
||||||
|
=>
|
||||||
{
|
{
|
||||||
self.dcx().emit_err(errors::ExpectedElseBlock {
|
self.dcx().emit_err(errors::ExpectedElseBlock {
|
||||||
first_tok_span,
|
first_tok_span,
|
||||||
|
|
|
@ -74,7 +74,14 @@ error: expected `{`, found `falsy`
|
||||||
--> $DIR/else-no-if.rs:47:12
|
--> $DIR/else-no-if.rs:47:12
|
||||||
|
|
|
|
||||||
LL | } else falsy! {} {
|
LL | } else falsy! {} {
|
||||||
| ^^^^^ expected `{`
|
| ---- ^^^^^
|
||||||
|
| |
|
||||||
|
| expected an `if` or a block after this `else`
|
||||||
|
|
|
||||||
|
help: add an `if` if this is the condition of a chained `else if` statement
|
||||||
|
|
|
||||||
|
LL | } else if falsy! {} {
|
||||||
|
| ++
|
||||||
|
|
||||||
error: expected `{`, found `falsy`
|
error: expected `{`, found `falsy`
|
||||||
--> $DIR/else-no-if.rs:54:12
|
--> $DIR/else-no-if.rs:54:12
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue