| #![warn(clippy::manual_checked_ops)] | |
| fn main() { | |
| let mut a = 10u32; | |
| let mut b = 5u32; | |
| // Should trigger lint | |
| if b != 0 { | |
| //~^ manual_checked_ops | |
| let _result = a / b; | |
| let _another = (a + 1) / b; | |
| } | |
| // Should trigger lint (compound assignment) | |
| if b != 0 { | |
| //~^ manual_checked_ops | |
| a /= b; | |
| } | |
| if b > 0 { | |
| //~^ manual_checked_ops | |
| let _result = a / b; | |
| } | |
| if b == 0 { | |
| //~^ manual_checked_ops | |
| println!("zero"); | |
| } else { | |
| let _result = a / b; | |
| } | |
| // Should NOT trigger (already using checked_div) | |
| if let Some(result) = b.checked_div(a) { | |
| println!("{result}"); | |
| } | |
| // Should NOT trigger (signed integers are not linted) | |
| let c = -5i32; | |
| if c != 0 { | |
| let _result = 10 / c; | |
| } | |
| // Should NOT trigger (side effects in divisor) | |
| if counter() > 0 { | |
| let _ = 32 / counter(); | |
| } | |
| // Should NOT trigger (divisor used before division) | |
| if b > 0 { | |
| use_value(b); | |
| let _ = a / b; | |
| } | |
| // Should NOT trigger (divisor may change during evaluation) | |
| if b > 0 { | |
| g(inc_and_return_value(&mut b), a / b); | |
| } | |
| } | |
| fn counter() -> u32 { | |
| println!("counter"); | |
| 1 | |
| } | |
| fn use_value(_v: u32) {} | |
| fn inc_and_return_value(x: &mut u32) -> u32 { | |
| *x += 1; | |
| *x | |
| } | |
| fn g(_lhs: u32, _rhs: u32) {} |