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:
Dylan DPC 2022-03-17 22:55:04 +01:00 committed by GitHub
commit 5eb3433ed5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 163 additions and 36 deletions

View file

@ -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;
}
}