Fix removed box_syntax
diagnostic if source isn't available
This commit is contained in:
parent
97ac52f579
commit
e157954cce
4 changed files with 28 additions and 17 deletions
|
@ -2725,15 +2725,24 @@ impl HelpUseLatestEdition {
|
|||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(parse_box_syntax_removed)]
|
||||
pub struct BoxSyntaxRemoved<'a> {
|
||||
pub struct BoxSyntaxRemoved {
|
||||
#[primary_span]
|
||||
#[suggestion(
|
||||
code = "Box::new({code})",
|
||||
applicability = "machine-applicable",
|
||||
style = "verbose"
|
||||
)]
|
||||
pub span: Span,
|
||||
pub code: &'a str,
|
||||
#[subdiagnostic]
|
||||
pub sugg: AddBoxNew,
|
||||
}
|
||||
|
||||
#[derive(Subdiagnostic)]
|
||||
#[multipart_suggestion(
|
||||
parse_box_syntax_removed_suggestion,
|
||||
applicability = "machine-applicable",
|
||||
style = "verbose"
|
||||
)]
|
||||
pub struct AddBoxNew {
|
||||
#[suggestion_part(code = "Box::new(")]
|
||||
pub box_kw_and_lo: Span,
|
||||
#[suggestion_part(code = ")")]
|
||||
pub hi: Span,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
|
|
@ -618,10 +618,12 @@ impl<'a> Parser<'a> {
|
|||
/// Parse `box expr` - this syntax has been removed, but we still parse this
|
||||
/// for now to provide a more useful error
|
||||
fn parse_expr_box(&mut self, box_kw: Span) -> PResult<'a, (Span, ExprKind)> {
|
||||
let (span, _) = self.parse_expr_prefix_common(box_kw)?;
|
||||
let inner_span = span.with_lo(box_kw.hi());
|
||||
let code = self.psess.source_map().span_to_snippet(inner_span).unwrap();
|
||||
let guar = self.dcx().emit_err(errors::BoxSyntaxRemoved { span: span, code: code.trim() });
|
||||
let (span, expr) = self.parse_expr_prefix_common(box_kw)?;
|
||||
// Make a multipart suggestion instead of `span_to_snippet` in case source isn't available
|
||||
let box_kw_and_lo = box_kw.until(self.interpolated_or_expr_span(&expr));
|
||||
let hi = span.shrink_to_hi();
|
||||
let sugg = errors::AddBoxNew { box_kw_and_lo, hi };
|
||||
let guar = self.dcx().emit_err(errors::BoxSyntaxRemoved { span, sugg });
|
||||
Ok((span, ExprKind::Err(guar)))
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue