Skip to content

Commit 46161b7

Browse files
committed
Support binary cast expressions for manual_div_ceil
1 parent 977e450 commit 46161b7

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

clippy_lints/src/manual_div_ceil.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use clippy_config::msrvs::{self, Msrv};
22
use clippy_utils::diagnostics::span_lint_and_sugg;
33
use clippy_utils::source::snippet_with_applicability;
4+
use clippy_utils::sugg::Sugg;
45
use clippy_utils::SpanlessEq;
56
use rustc_ast::{BinOpKind, LitKind};
67
use rustc_data_structures::packed::Pu128;
@@ -128,10 +129,10 @@ fn build_suggestion(
128129
rhs: &Expr<'_>,
129130
applicability: &mut Applicability,
130131
) {
131-
let dividend_snippet = snippet_with_applicability(cx, lhs.span.source_callsite(), "..", applicability);
132+
let dividend_sugg = Sugg::hir_with_applicability(cx, lhs, "..", applicability).maybe_par();
132133
let divisor_snippet = snippet_with_applicability(cx, rhs.span.source_callsite(), "..", applicability);
133134

134-
let sugg = format!("{dividend_snippet}.div_ceil({divisor_snippet})");
135+
let sugg = format!("{dividend_sugg}.div_ceil({divisor_snippet})");
135136

136137
span_lint_and_sugg(
137138
cx,

tests/ui/manual_div_ceil.fixed

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
fn main() {
55
let x = 7_i32;
66
let y = 4_i32;
7+
let z_u: u32 = 11;
78

89
// Lint.
910
let _ = x.div_ceil(y);
@@ -12,6 +13,9 @@ fn main() {
1213

1314
let _ = 7_i32.div_ceil(4);
1415

16+
let _ = (z_u as i32).div_ceil(y);
17+
let _ = (7_u32 as i32).div_ceil(y);
18+
1519
// No lint.
1620
let _ = (x + (y - 2)) / y;
1721
let _ = (x + (y + 1)) / y;

tests/ui/manual_div_ceil.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
fn main() {
55
let x = 7_i32;
66
let y = 4_i32;
7+
let z_u: u32 = 11;
78

89
// Lint.
910
let _ = (x + (y - 1)) / y;
@@ -12,6 +13,9 @@ fn main() {
1213

1314
let _ = (7_i32 + (4 - 1)) / 4;
1415

16+
let _ = (z_u as i32 + (y - 1)) / y;
17+
let _ = (7_u32 as i32 + (y - 1)) / y;
18+
1519
// No lint.
1620
let _ = (x + (y - 2)) / y;
1721
let _ = (x + (y + 1)) / y;

tests/ui/manual_div_ceil.stderr

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: manually reimplementing `div_ceil`
2-
--> tests/ui/manual_div_ceil.rs:9:13
2+
--> tests/ui/manual_div_ceil.rs:10:13
33
|
44
LL | let _ = (x + (y - 1)) / y;
55
| ^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `x.div_ceil(y)`
@@ -8,22 +8,34 @@ LL | let _ = (x + (y - 1)) / y;
88
= help: to override `-D warnings` add `#[allow(clippy::manual_div_ceil)]`
99

1010
error: manually reimplementing `div_ceil`
11-
--> tests/ui/manual_div_ceil.rs:10:13
11+
--> tests/ui/manual_div_ceil.rs:11:13
1212
|
1313
LL | let _ = ((y - 1) + x) / y;
1414
| ^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `x.div_ceil(y)`
1515

1616
error: manually reimplementing `div_ceil`
17-
--> tests/ui/manual_div_ceil.rs:11:13
17+
--> tests/ui/manual_div_ceil.rs:12:13
1818
|
1919
LL | let _ = (x + y - 1) / y;
2020
| ^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `x.div_ceil(y)`
2121

2222
error: manually reimplementing `div_ceil`
23-
--> tests/ui/manual_div_ceil.rs:13:13
23+
--> tests/ui/manual_div_ceil.rs:14:13
2424
|
2525
LL | let _ = (7_i32 + (4 - 1)) / 4;
2626
| ^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `7_i32.div_ceil(4)`
2727

28-
error: aborting due to 4 previous errors
28+
error: manually reimplementing `div_ceil`
29+
--> tests/ui/manual_div_ceil.rs:16:13
30+
|
31+
LL | let _ = (z_u as i32 + (y - 1)) / y;
32+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `(z_u as i32).div_ceil(y)`
33+
34+
error: manually reimplementing `div_ceil`
35+
--> tests/ui/manual_div_ceil.rs:17:13
36+
|
37+
LL | let _ = (7_u32 as i32 + (y - 1)) / y;
38+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.div_ceil()`: `(7_u32 as i32).div_ceil(y)`
39+
40+
error: aborting due to 6 previous errors
2941

0 commit comments

Comments
 (0)