Clippy lints / Correctness
Clippy lint · Correctness · checked with Clippy 0.1.99
clippy::modulo_one: Checks for getting the remainder of integer division by one or minus one
What it meansChecks for getting the remainder of integer division by one or minus one. It is in the correctness group and denied by default (the build fails).
Does it matter?
The result for a divisor of one can only ever be zero; for minus one it can cause panic/overflow (if the left operand is the minimal value of the respective integer type) or results in zero. No one will write such code deliberately, unless trying to win an Underhanded Rust Contest. Even for that contest, it’s probably a bad idea. Use something more underhanded.
Code that is almost certainly wrong. Denied by default: the build fails until you fix it or allow it.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
let a = x % 1;
let a = x % -1;
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::modulo_one)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
modulo_one = "allow"One run
cargo clippy -- -A clippy::modulo-oneThe [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
Checks for getting the remainder of integer division by one or minus one.
Why is this bad?
The result for a divisor of one can only ever be zero; for minus one it can cause panic/overflow (if the left operand is the minimal value of the respective integer type) or results in zero. No one will write such code deliberately, unless trying to win an Underhanded Rust Contest. Even for that contest, it’s probably a bad idea. Use something more underhanded.
Example
let a = x % 1;
let a = x % -1;
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- mem_replace_with_uninitChecks for mem::replace(&mut _, mem::uninitialized()) and mem::replace(&mut _, mem::zeroed())
- min_maxChecks for expressions where std::cmp::min and max are used to clamp values, but switched so that the result is constant
- mistyped_literal_suffixesWarns for mistyped suffix in literals
- mut_from_refThis lint checks for functions that take immutable references and return mutable ones
- never_loopthis loop never actually loops
- non_octal_unix_permissionsChecks for non-octal values used to set Unix file permissions
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::mem_replace_with_uninitChecks for mem::replace(&mut _, mem::uninitialized()) and mem::replace(&mut _, mem::zeroed())Read it next →Did this answer your question?