Skip to content

Commit

Permalink
use structured suggestion when casting a reference
Browse files Browse the repository at this point in the history
  • Loading branch information
euclio committed Jan 10, 2019
1 parent 6ecad33 commit 29a8386
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 23 deletions.
10 changes: 8 additions & 2 deletions src/librustc_typeck/check/cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,8 +213,14 @@ impl<'a, 'gcx, 'tcx> CastCheck<'tcx> {
fcx.ty_to_string(self.expr_ty),
cast_ty));
if let Ok(snippet) = fcx.sess().source_map().span_to_snippet(self.expr.span) {
err.span_help(self.expr.span,
&format!("did you mean `*{}`?", snippet));
err.span_suggestion_with_applicability(
self.expr.span,
"dereference the expression",
format!("*{}", snippet),
Applicability::MaybeIncorrect,
);
} else {
err.span_help(self.expr.span, "dereference the expression with `*`");
}
err.emit();
}
Expand Down
11 changes: 4 additions & 7 deletions src/test/ui/error-codes/E0606.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,10 @@ error[E0606]: casting `&u8` as `u8` is invalid
--> $DIR/E0606.rs:2:5
|
LL | &0u8 as u8; //~ ERROR E0606
| ^^^^^^^^^^ cannot cast `&u8` as `u8`
|
help: did you mean `*&0u8`?
--> $DIR/E0606.rs:2:5
|
LL | &0u8 as u8; //~ ERROR E0606
| ^^^^
| ----^^^^^^
| |
| cannot cast `&u8` as `u8`
| help: dereference the expression: `*&0u8`

error: aborting due to previous error

Expand Down
11 changes: 4 additions & 7 deletions src/test/ui/error-festival.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,10 @@ error[E0606]: casting `&u8` as `u32` is invalid
--> $DIR/error-festival.rs:37:18
|
LL | let y: u32 = x as u32;
| ^^^^^^^^ cannot cast `&u8` as `u32`
|
help: did you mean `*x`?
--> $DIR/error-festival.rs:37:18
|
LL | let y: u32 = x as u32;
| ^
| -^^^^^^^
| |
| cannot cast `&u8` as `u32`
| help: dereference the expression: `*x`

error[E0607]: cannot cast thin pointer `*const u8` to fat pointer `*const [u8]`
--> $DIR/error-festival.rs:41:5
Expand Down
11 changes: 4 additions & 7 deletions src/test/ui/mismatched_types/cast-rfc0401.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -240,13 +240,10 @@ error[E0606]: casting `&{float}` as `f32` is invalid
--> $DIR/cast-rfc0401.rs:71:30
|
LL | vec![0.0].iter().map(|s| s as f32).collect::<Vec<f32>>(); //~ ERROR is invalid
| ^^^^^^^^ cannot cast `&{float}` as `f32`
|
help: did you mean `*s`?
--> $DIR/cast-rfc0401.rs:71:30
|
LL | vec![0.0].iter().map(|s| s as f32).collect::<Vec<f32>>(); //~ ERROR is invalid
| ^
| -^^^^^^^
| |
| cannot cast `&{float}` as `f32`
| help: dereference the expression: `*s`

error: aborting due to 34 previous errors

Expand Down

0 comments on commit 29a8386

Please sign in to comment.