Rollup merge of #94731 - TaKO8Ki:const-generic-expr-recovery, r=davidtwco,oli-obk
Suggest adding `{ .. }` around a const function call with arguments closes #91020
This commit is contained in:
commit
5eb3433ed5
6 changed files with 163 additions and 36 deletions
|
@ -703,7 +703,7 @@ impl<'a> Parser<'a> {
|
|||
ExprKind::Path(None, ast::Path { segments, .. }),
|
||||
TokenKind::Ident(kw::For | kw::Loop | kw::While, false),
|
||||
) if segments.len() == 1 => {
|
||||
let snapshot = self.clone();
|
||||
let snapshot = self.create_snapshot_for_diagnostic();
|
||||
let label = Label {
|
||||
ident: Ident::from_str_and_span(
|
||||
&format!("'{}", segments[0].ident),
|
||||
|
@ -725,7 +725,7 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
Err(err) => {
|
||||
err.cancel();
|
||||
*self = snapshot;
|
||||
self.restore_snapshot(snapshot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1885,7 +1885,7 @@ impl<'a> Parser<'a> {
|
|||
lo: Span,
|
||||
attrs: AttrVec,
|
||||
) -> Option<P<Expr>> {
|
||||
let mut snapshot = self.clone();
|
||||
let mut snapshot = self.create_snapshot_for_diagnostic();
|
||||
match snapshot.parse_array_or_repeat_expr(attrs, token::Brace) {
|
||||
Ok(arr) => {
|
||||
let hi = snapshot.prev_token.span;
|
||||
|
@ -1901,7 +1901,7 @@ impl<'a> Parser<'a> {
|
|||
.note("to define an array, one would use square brackets instead of curly braces")
|
||||
.emit();
|
||||
|
||||
*self = snapshot;
|
||||
self.restore_snapshot(snapshot);
|
||||
Some(self.mk_expr_err(arr.span))
|
||||
}
|
||||
Err(e) => {
|
||||
|
@ -2369,7 +2369,7 @@ impl<'a> Parser<'a> {
|
|||
if self.token.kind != token::Semi {
|
||||
return None;
|
||||
}
|
||||
let start_snapshot = self.clone();
|
||||
let start_snapshot = self.create_snapshot_for_diagnostic();
|
||||
let semi_sp = self.token.span;
|
||||
self.bump(); // `;`
|
||||
let mut stmts =
|
||||
|
@ -2417,15 +2417,15 @@ impl<'a> Parser<'a> {
|
|||
return Some(err(self, stmts));
|
||||
}
|
||||
if self.token.kind == token::Comma {
|
||||
*self = start_snapshot;
|
||||
self.restore_snapshot(start_snapshot);
|
||||
return None;
|
||||
}
|
||||
let pre_pat_snapshot = self.clone();
|
||||
let pre_pat_snapshot = self.create_snapshot_for_diagnostic();
|
||||
match self.parse_pat_no_top_alt(None) {
|
||||
Ok(_pat) => {
|
||||
if self.token.kind == token::FatArrow {
|
||||
// Reached arm end.
|
||||
*self = pre_pat_snapshot;
|
||||
self.restore_snapshot(pre_pat_snapshot);
|
||||
return Some(err(self, stmts));
|
||||
}
|
||||
}
|
||||
|
@ -2434,21 +2434,21 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
*self = pre_pat_snapshot;
|
||||
self.restore_snapshot(pre_pat_snapshot);
|
||||
match self.parse_stmt_without_recovery(true, ForceCollect::No) {
|
||||
// Consume statements for as long as possible.
|
||||
Ok(Some(stmt)) => {
|
||||
stmts.push(stmt);
|
||||
}
|
||||
Ok(None) => {
|
||||
*self = start_snapshot;
|
||||
self.restore_snapshot(start_snapshot);
|
||||
break;
|
||||
}
|
||||
// We couldn't parse either yet another statement missing it's
|
||||
// enclosing block nor the next arm's pattern or closing brace.
|
||||
Err(stmt_err) => {
|
||||
stmt_err.cancel();
|
||||
*self = start_snapshot;
|
||||
self.restore_snapshot(start_snapshot);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue