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
|
.suggestion = escape `box` to use it as an identifier
|
||||||
|
|
||||||
parse_box_syntax_removed = `box_syntax` has been removed
|
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
|
parse_cannot_be_raw_ident = `{$ident}` cannot be a raw identifier
|
||||||
|
|
||||||
|
@ -2725,15 +2725,24 @@ pub fn new() -> Self {
|
|||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(parse_box_syntax_removed)]
|
#[diag(parse_box_syntax_removed)]
|
||||||
pub struct BoxSyntaxRemoved<'a> {
|
pub struct BoxSyntaxRemoved {
|
||||||
#[primary_span]
|
#[primary_span]
|
||||||
#[suggestion(
|
|
||||||
code = "Box::new({code})",
|
|
||||||
applicability = "machine-applicable",
|
|
||||||
style = "verbose"
|
|
||||||
)]
|
|
||||||
pub span: Span,
|
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)]
|
#[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
|
/// Parse `box expr` - this syntax has been removed, but we still parse this
|
||||||
/// for now to provide a more useful error
|
/// for now to provide a more useful error
|
||||||
fn parse_expr_box(&mut self, box_kw: Span) -> PResult<'a, (Span, ExprKind)> {
|
fn parse_expr_box(&mut self, box_kw: Span) -> PResult<'a, (Span, ExprKind)> {
|
||||||
let (span, _) = self.parse_expr_prefix_common(box_kw)?;
|
let (span, expr) = self.parse_expr_prefix_common(box_kw)?;
|
||||||
let inner_span = span.with_lo(box_kw.hi());
|
// Make a multipart suggestion instead of `span_to_snippet` in case source isn't available
|
||||||
let code = self.psess.source_map().span_to_snippet(inner_span).unwrap();
|
let box_kw_and_lo = box_kw.until(self.interpolated_or_expr_span(&expr));
|
||||||
let guar = self.dcx().emit_err(errors::BoxSyntaxRemoved { span: span, code: code.trim() });
|
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)))
|
Ok((span, ExprKind::Err(guar)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ LL | let _ = box ();
|
|||||||
help: use `Box::new()` instead
|
help: use `Box::new()` instead
|
||||||
|
|
|
|
||||||
LL | let _ = Box::new(());
|
LL | let _ = Box::new(());
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~ +
|
||||||
|
|
||||||
error: `box_syntax` has been removed
|
error: `box_syntax` has been removed
|
||||||
--> $DIR/removed-syntax-box.rs:10:13
|
--> $DIR/removed-syntax-box.rs:10:13
|
||||||
@ -18,7 +18,7 @@ LL | let _ = box 1;
|
|||||||
help: use `Box::new()` instead
|
help: use `Box::new()` instead
|
||||||
|
|
|
|
||||||
LL | let _ = Box::new(1);
|
LL | let _ = Box::new(1);
|
||||||
| ~~~~~~~~~~~
|
| ~~~~~~~~~ +
|
||||||
|
|
||||||
error: `box_syntax` has been removed
|
error: `box_syntax` has been removed
|
||||||
--> $DIR/removed-syntax-box.rs:11:13
|
--> $DIR/removed-syntax-box.rs:11:13
|
||||||
@ -29,7 +29,7 @@ LL | let _ = box T { a: 12, b: 18 };
|
|||||||
help: use `Box::new()` instead
|
help: use `Box::new()` instead
|
||||||
|
|
|
|
||||||
LL | let _ = Box::new(T { a: 12, b: 18 });
|
LL | let _ = Box::new(T { a: 12, b: 18 });
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~ +
|
||||||
|
|
||||||
error: `box_syntax` has been removed
|
error: `box_syntax` has been removed
|
||||||
--> $DIR/removed-syntax-box.rs:12:13
|
--> $DIR/removed-syntax-box.rs:12:13
|
||||||
@ -40,7 +40,7 @@ LL | let _ = box [5; 30];
|
|||||||
help: use `Box::new()` instead
|
help: use `Box::new()` instead
|
||||||
|
|
|
|
||||||
LL | let _ = Box::new([5; 30]);
|
LL | let _ = Box::new([5; 30]);
|
||||||
| ~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~ +
|
||||||
|
|
||||||
error: `box_syntax` has been removed
|
error: `box_syntax` has been removed
|
||||||
--> $DIR/removed-syntax-box.rs:13:22
|
--> $DIR/removed-syntax-box.rs:13:22
|
||||||
@ -51,7 +51,7 @@ LL | let _: Box<()> = box ();
|
|||||||
help: use `Box::new()` instead
|
help: use `Box::new()` instead
|
||||||
|
|
|
|
||||||
LL | let _: Box<()> = Box::new(());
|
LL | let _: Box<()> = Box::new(());
|
||||||
| ~~~~~~~~~~~~
|
| ~~~~~~~~~ +
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user