Clippy lints / Complexity
Clippy lint · Complexity · checked with Clippy 0.1.99
clippy::manual_checked_ops: Detects manual zero checks before dividing integers, such as if x != 0 { y / x }
What it meansDetects manual zero checks before dividing integers, such as if x != 0 { y / x }. It is in the complexity group and warns by default.
Does it matter?
checked_div already handles the zero case and makes the intent clearer while avoiding a panic from a manual division.
Code that does something simple in a complicated way. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
if b != 0 {
let result = a / b;
println!("{result}");
}
Write this instead
if let Some(result) = a.checked_div(b) {
println!("{result}");
}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::manual_checked_ops)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
manual_checked_ops = "allow"One run
cargo clippy -- -A clippy::manual-checked-opsThe [lints] table needs Rust 1.74 or newer. In a workspace, put it under [workspace.lints.clippy] and add [lints] workspace = true to each member.
Clippy's own documentation
What it does
Detects manual zero checks before dividing integers, such as if x != 0 { y / x }.
Why is this bad?
checked_div already handles the zero case and makes the intent clearer while avoiding a
panic from a manual division.
Example
if b != 0 {
let result = a / b;
println!("{result}");
}
Use instead:
if let Some(result) = a.checked_div(b) {
println!("{result}");
}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- too_many_argumentsChecks for functions with too many parameters
- clone_on_copyusing `clone` on type `u64` which implements the `Copy` trait
- type_complexityChecks for types used in structs, parameters and let declarations above a certain complexity threshold
- let_with_type_underscorevariable declared with type underscore
- manual_abs_diffDetects patterns like if a > b { a - b } else { b - a } and suggests using a.abs_diff(b)
- manual_c_str_literalsChecks for the manual creation of C strings (a string with a NUL byte at the end), either through one of the CStr constructor functions, or more plainly by calling .as_ptr() on a (byte) string literal with a hardcoded \0 byte at the end
- manual_clampIdentifies good opportunities for a clamp function from std or core, and suggests using it
- manual_div_ceilChecks for an expression like (x + (y - 1)) / y which is a common manual reimplementation of x.div_ceil(y)
- manual_filtermanual implementation of `Option::filter`
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::too_many_argumentsChecks for functions with too many parametersRead it next →Did this answer your question?