Use .into_diagnostic() less.
This commit replaces this pattern: ``` err.into_diagnostic(dcx) ``` with this pattern: ``` dcx.create_err(err) ``` in a lot of places. It's a little shorter, makes the error level explicit, avoids some `IntoDiagnostic` imports, and is a necessary prerequisite for the next commit which will add a `level` arg to `into_diagnostic`. This requires adding `track_caller` on `create_err` to avoid mucking up the output of `tests/ui/track-diagnostics/track4.rs`. It probably should have been there already.
This commit is contained in:
@@ -26,8 +26,8 @@ use rustc_ast::{ClosureBinder, MetaItemLit, StmtKind};
|
||||
use rustc_ast_pretty::pprust;
|
||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||
use rustc_errors::{
|
||||
AddToDiagnostic, Applicability, Diagnostic, DiagnosticBuilder, ErrorGuaranteed, IntoDiagnostic,
|
||||
PResult, StashKey,
|
||||
AddToDiagnostic, Applicability, Diagnostic, DiagnosticBuilder, ErrorGuaranteed, PResult,
|
||||
StashKey,
|
||||
};
|
||||
use rustc_macros::Subdiagnostic;
|
||||
use rustc_session::errors::{report_lit_error, ExprParenthesesNeeded};
|
||||
@@ -1255,21 +1255,21 @@ impl<'a> Parser<'a> {
|
||||
// that of the open delim in `TokenTreesReader::parse_token_tree`, even if they are different.
|
||||
self.span_to_snippet(close_paren).is_ok_and(|snippet| snippet == ")")
|
||||
{
|
||||
let mut replacement_err = errors::ParenthesesWithStructFields {
|
||||
span,
|
||||
r#type: path,
|
||||
braces_for_struct: errors::BracesForStructLiteral {
|
||||
first: open_paren,
|
||||
second: close_paren,
|
||||
},
|
||||
no_fields_for_fn: errors::NoFieldsForFnCall {
|
||||
fields: fields
|
||||
.into_iter()
|
||||
.map(|field| field.span.until(field.expr.span))
|
||||
.collect(),
|
||||
},
|
||||
}
|
||||
.into_diagnostic(self.dcx());
|
||||
let mut replacement_err =
|
||||
self.dcx().create_err(errors::ParenthesesWithStructFields {
|
||||
span,
|
||||
r#type: path,
|
||||
braces_for_struct: errors::BracesForStructLiteral {
|
||||
first: open_paren,
|
||||
second: close_paren,
|
||||
},
|
||||
no_fields_for_fn: errors::NoFieldsForFnCall {
|
||||
fields: fields
|
||||
.into_iter()
|
||||
.map(|field| field.span.until(field.expr.span))
|
||||
.collect(),
|
||||
},
|
||||
});
|
||||
replacement_err.emit();
|
||||
|
||||
let old_err = mem::replace(err, replacement_err);
|
||||
@@ -1883,8 +1883,7 @@ impl<'a> Parser<'a> {
|
||||
self.bump(); // `#`
|
||||
|
||||
let Some((ident, false)) = self.token.ident() else {
|
||||
let err =
|
||||
errors::ExpectedBuiltinIdent { span: self.token.span }.into_diagnostic(self.dcx());
|
||||
let err = self.dcx().create_err(errors::ExpectedBuiltinIdent { span: self.token.span });
|
||||
return Err(err);
|
||||
};
|
||||
self.sess.gated_spans.gate(sym::builtin_syntax, ident.span);
|
||||
@@ -1894,8 +1893,10 @@ impl<'a> Parser<'a> {
|
||||
let ret = if let Some(res) = parse(self, lo, ident)? {
|
||||
Ok(res)
|
||||
} else {
|
||||
let err = errors::UnknownBuiltinConstruct { span: lo.to(ident.span), name: ident.name }
|
||||
.into_diagnostic(self.dcx());
|
||||
let err = self.dcx().create_err(errors::UnknownBuiltinConstruct {
|
||||
span: lo.to(ident.span),
|
||||
name: ident.name,
|
||||
});
|
||||
return Err(err);
|
||||
};
|
||||
self.expect(&TokenKind::CloseDelim(Delimiter::Parenthesis))?;
|
||||
@@ -1958,8 +1959,9 @@ impl<'a> Parser<'a> {
|
||||
&& let token::NtExpr(e) | token::NtLiteral(e) = &nt.0
|
||||
&& matches!(e.kind, ExprKind::Err)
|
||||
{
|
||||
let mut err = errors::InvalidInterpolatedExpression { span: self.token.span }
|
||||
.into_diagnostic(self.dcx());
|
||||
let mut err = self
|
||||
.dcx()
|
||||
.create_err(errors::InvalidInterpolatedExpression { span: self.token.span });
|
||||
err.downgrade_to_delayed_bug();
|
||||
return Err(err);
|
||||
}
|
||||
@@ -2168,10 +2170,10 @@ impl<'a> Parser<'a> {
|
||||
.span_to_snippet(snapshot.token.span)
|
||||
.is_ok_and(|snippet| snippet == "]") =>
|
||||
{
|
||||
return Err(errors::MissingSemicolonBeforeArray {
|
||||
return Err(self.dcx().create_err(errors::MissingSemicolonBeforeArray {
|
||||
open_delim: open_delim_span,
|
||||
semicolon: prev_span.shrink_to_hi(),
|
||||
}.into_diagnostic(self.dcx()));
|
||||
}));
|
||||
}
|
||||
Ok(_) => (),
|
||||
Err(err) => err.cancel(),
|
||||
@@ -2318,8 +2320,9 @@ impl<'a> Parser<'a> {
|
||||
// Check for `move async` and recover
|
||||
if self.check_keyword(kw::Async) {
|
||||
let move_async_span = self.token.span.with_lo(self.prev_token.span.data().lo);
|
||||
Err(errors::AsyncMoveOrderIncorrect { span: move_async_span }
|
||||
.into_diagnostic(self.dcx()))
|
||||
Err(self
|
||||
.dcx()
|
||||
.create_err(errors::AsyncMoveOrderIncorrect { span: move_async_span }))
|
||||
} else {
|
||||
Ok(CaptureBy::Value { move_kw: move_kw_span })
|
||||
}
|
||||
@@ -2509,7 +2512,7 @@ impl<'a> Parser<'a> {
|
||||
};
|
||||
if self.prev_token.kind == token::BinOp(token::Or) {
|
||||
// This was part of a closure, the that part of the parser recover.
|
||||
return Err(err.into_diagnostic(self.dcx()));
|
||||
return Err(self.dcx().create_err(err));
|
||||
} else {
|
||||
Some(self.sess.emit_err(err))
|
||||
}
|
||||
@@ -3193,7 +3196,7 @@ impl<'a> Parser<'a> {
|
||||
fn parse_try_block(&mut self, span_lo: Span) -> PResult<'a, P<Expr>> {
|
||||
let (attrs, body) = self.parse_inner_attrs_and_block()?;
|
||||
if self.eat_keyword(kw::Catch) {
|
||||
Err(errors::CatchAfterTry { span: self.prev_token.span }.into_diagnostic(self.dcx()))
|
||||
Err(self.dcx().create_err(errors::CatchAfterTry { span: self.prev_token.span }))
|
||||
} else {
|
||||
let span = span_lo.to(body.span);
|
||||
self.sess.gated_spans.gate(sym::try_blocks, span);
|
||||
@@ -3530,12 +3533,11 @@ impl<'a> Parser<'a> {
|
||||
|| t == &token::CloseDelim(Delimiter::Parenthesis)
|
||||
});
|
||||
if is_wrong {
|
||||
return Err(errors::ExpectedStructField {
|
||||
return Err(this.dcx().create_err(errors::ExpectedStructField {
|
||||
span: this.look_ahead(1, |t| t.span),
|
||||
ident_span: this.token.span,
|
||||
token: this.look_ahead(1, |t| t.clone()),
|
||||
}
|
||||
.into_diagnostic(&self.sess.dcx));
|
||||
}));
|
||||
}
|
||||
let (ident, expr) = if is_shorthand {
|
||||
// Mimic `x: x` for the `x` field shorthand.
|
||||
|
||||
Reference in New Issue
Block a user