Skip to content

Commit

Permalink
Auto merge of #9996 - Jarcho:issue_9906, r=Alexendoo
Browse files Browse the repository at this point in the history
Fix `unnecessary_cast` suggestion when taking a reference

fixes #9906
changelog: `unnecessary_cast`: Fix suggestion when taking a reference
  • Loading branch information
bors committed Nov 30, 2022
2 parents d7d098a + 73f4546 commit 846c9b8
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 7 deletions.
6 changes: 5 additions & 1 deletion clippy_lints/src/casts/unnecessary_cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,11 @@ pub(super) fn check<'tcx>(
expr.span,
&format!("casting to the same type is unnecessary (`{cast_from}` -> `{cast_to}`)"),
"try",
cast_str,
if get_parent_expr(cx, expr).map_or(false, |e| matches!(e.kind, ExprKind::AddrOf(..))) {
format!("{{ {cast_str} }}")
} else {
cast_str
},
Applicability::MachineApplicable,
);
return true;
Expand Down
3 changes: 3 additions & 0 deletions tests/ui/unnecessary_cast.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ mod fixable {

let _ = 1 as I32Alias;
let _ = &1 as &I32Alias;

let x = 1i32;
let _ = &{ x };
}

type I32Alias = i32;
Expand Down
3 changes: 3 additions & 0 deletions tests/ui/unnecessary_cast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ mod fixable {

let _ = 1 as I32Alias;
let _ = &1 as &I32Alias;

let x = 1i32;
let _ = &(x as i32);
}

type I32Alias = i32;
Expand Down
18 changes: 12 additions & 6 deletions tests/ui/unnecessary_cast.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -150,35 +150,41 @@ error: casting float literal to `f32` is unnecessary
LL | let _ = -1.0 as f32;
| ^^^^^^^^^^^ help: try: `-1.0_f32`

error: casting to the same type is unnecessary (`i32` -> `i32`)
--> $DIR/unnecessary_cast.rs:101:18
|
LL | let _ = &(x as i32);
| ^^^^^^^^^^ help: try: `{ x }`

error: casting integer literal to `i32` is unnecessary
--> $DIR/unnecessary_cast.rs:104:22
--> $DIR/unnecessary_cast.rs:107:22
|
LL | let _: i32 = -(1) as i32;
| ^^^^^^^^^^^ help: try: `-1_i32`

error: casting integer literal to `i64` is unnecessary
--> $DIR/unnecessary_cast.rs:106:22
--> $DIR/unnecessary_cast.rs:109:22
|
LL | let _: i64 = -(1) as i64;
| ^^^^^^^^^^^ help: try: `-1_i64`

error: casting float literal to `f64` is unnecessary
--> $DIR/unnecessary_cast.rs:113:22
--> $DIR/unnecessary_cast.rs:116:22
|
LL | let _: f64 = (-8.0 as f64).exp();
| ^^^^^^^^^^^^^ help: try: `(-8.0_f64)`

error: casting float literal to `f64` is unnecessary
--> $DIR/unnecessary_cast.rs:115:23
--> $DIR/unnecessary_cast.rs:118:23
|
LL | let _: f64 = -(8.0 as f64).exp(); // should suggest `-8.0_f64.exp()` here not to change code behavior
| ^^^^^^^^^^^^ help: try: `8.0_f64`

error: casting to the same type is unnecessary (`f32` -> `f32`)
--> $DIR/unnecessary_cast.rs:123:20
--> $DIR/unnecessary_cast.rs:126:20
|
LL | let _num = foo() as f32;
| ^^^^^^^^^^^^ help: try: `foo()`

error: aborting due to 30 previous errors
error: aborting due to 31 previous errors

0 comments on commit 846c9b8

Please sign in to comment.