Remove a second DiagnosticBuilder::emit_without_consuming call.

Instead of taking `seq` as a mutable reference,
`maybe_recover_struct_lit_bad_delims` now consumes `seq` on the recovery
path, and returns `seq` unchanged on the non-recovery path. The commit
also combines an `if` and a `match` to merge two identical paths.

Also change `recover_seq_parse_error` so it receives a `PErr` instead of
a `PResult`, because all the call sites now handle the `Ok`/`Err`
distinction themselves.
This commit is contained in:
Nicholas Nethercote 2024-01-05 10:42:31 +11:00
parent 1881055000
commit 3ce34f42e1
2 changed files with 30 additions and 39 deletions

View file

@ -35,7 +35,7 @@ use rustc_ast_pretty::pprust;
use rustc_data_structures::fx::FxHashSet;
use rustc_errors::{
pluralize, AddToDiagnostic, Applicability, DiagCtxt, Diagnostic, DiagnosticBuilder, FatalError,
PResult,
PErr, PResult,
};
use rustc_session::errors::ExprParenthesesNeeded;
use rustc_span::source_map::Spanned;
@ -2044,17 +2044,12 @@ impl<'a> Parser<'a> {
&mut self,
delim: Delimiter,
lo: Span,
result: PResult<'a, P<Expr>>,
err: PErr<'a>,
) -> P<Expr> {
match result {
Ok(x) => x,
Err(err) => {
err.emit();
// Recover from parse error, callers expect the closing delim to be consumed.
self.consume_block(delim, ConsumeClosingDelim::Yes);
self.mk_expr(lo.to(self.prev_token.span), ExprKind::Err)
}
}
err.emit();
// Recover from parse error, callers expect the closing delim to be consumed.
self.consume_block(delim, ConsumeClosingDelim::Yes);
self.mk_expr(lo.to(self.prev_token.span), ExprKind::Err)
}
/// Eats tokens until we can be relatively sure we reached the end of the