Fix removed box_syntax
diagnostic if source isn't available
This commit is contained in:
parent
97ac52f579
commit
e157954cce
@ -66,7 +66,7 @@ parse_box_not_pat = expected pattern, found {$descr}
|
||||
.suggestion = escape `box` to use it as an identifier
|
||||
|
||||
parse_box_syntax_removed = `box_syntax` has been removed
|
||||
.suggestion = use `Box::new()` instead
|
||||
parse_box_syntax_removed_suggestion = use `Box::new()` instead
|
||||
|
||||
parse_cannot_be_raw_ident = `{$ident}` cannot be a raw identifier
|
||||
|
||||
|
@ -2725,15 +2725,24 @@ pub fn new() -> Self {
|
||||
|
||||
#[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 @@ fn recover_tilde_expr(&mut self, lo: Span) -> PResult<'a, (Span, ExprKind)> {
|
||||
/// 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)))
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ LL | let _ = box ();
|
||||
help: use `Box::new()` instead
|
||||
|
|
||||
LL | let _ = Box::new(());
|
||||
| ~~~~~~~~~~~~
|
||||
| ~~~~~~~~~ +
|
||||
|
||||
error: `box_syntax` has been removed
|
||||
--> $DIR/removed-syntax-box.rs:10:13
|
||||
@ -18,7 +18,7 @@ LL | let _ = box 1;
|
||||
help: use `Box::new()` instead
|
||||
|
|
||||
LL | let _ = Box::new(1);
|
||||
| ~~~~~~~~~~~
|
||||
| ~~~~~~~~~ +
|
||||
|
||||
error: `box_syntax` has been removed
|
||||
--> $DIR/removed-syntax-box.rs:11:13
|
||||
@ -29,7 +29,7 @@ LL | let _ = box T { a: 12, b: 18 };
|
||||
help: use `Box::new()` instead
|
||||
|
|
||||
LL | let _ = Box::new(T { a: 12, b: 18 });
|
||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
| ~~~~~~~~~ +
|
||||
|
||||
error: `box_syntax` has been removed
|
||||
--> $DIR/removed-syntax-box.rs:12:13
|
||||
@ -40,7 +40,7 @@ LL | let _ = box [5; 30];
|
||||
help: use `Box::new()` instead
|
||||
|
|
||||
LL | let _ = Box::new([5; 30]);
|
||||
| ~~~~~~~~~~~~~~~~~
|
||||
| ~~~~~~~~~ +
|
||||
|
||||
error: `box_syntax` has been removed
|
||||
--> $DIR/removed-syntax-box.rs:13:22
|
||||
@ -51,7 +51,7 @@ LL | let _: Box<()> = box ();
|
||||
help: use `Box::new()` instead
|
||||
|
|
||||
LL | let _: Box<()> = Box::new(());
|
||||
| ~~~~~~~~~~~~
|
||||
| ~~~~~~~~~ +
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user