Clippy lints / Nursery
Clippy lint · Nursery · checked with Clippy 0.1.99
clippy::needless_type_cast: Checks for bindings (constants, statics, or let bindings) that are defined with one numeric type but are consistently cast to a different type in all usages
What it meansChecks for bindings (constants, statics, or let bindings) that are defined with one numeric type but are consistently cast to a different type in all usages. It is in the nursery group and off by default.
Does it matter?
If a binding is always cast to a different type when used, it would be clearer and more efficient to define it with the target type from the start.
New lints still being finished. Off by default and may have false positives.
How to fix it
Clippy can fix this one for you: run cargo clippy --fix (add --allow-dirty if you have uncommitted changes). Review the diff before you commit.
Flagged
const SIZE: u16 = 15;
let arr: [u8; SIZE as usize] = [0; SIZE as usize];
Write this instead
const SIZE: usize = 15;
let arr: [u8; SIZE] = [0; SIZE];
Turn it off, or on
It is off by default. To use it, set it to warn or deny:
Whole crate (Cargo.toml)
[lints.clippy]
needless_type_cast = "warn"In code
#![warn(clippy::needless_type_cast)]One run
cargo clippy -- -W clippy::needless-type-castThe [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 bindings (constants, statics, or let bindings) that are defined with one numeric type but are consistently cast to a different type in all usages.
Why is this bad?
If a binding is always cast to a different type when used, it would be clearer and more efficient to define it with the target type from the start.
Example
const SIZE: u16 = 15;
let arr: [u8; SIZE as usize] = [0; SIZE as usize];
Use instead:
const SIZE: usize = 15;
let arr: [u8; SIZE] = [0; SIZE];
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further use
- missing_const_for_fnthis could be a `const fn`
- needless_collectChecks for functions collecting an iterator when collect is not needed
- needless_pass_by_ref_mutthis parameter is a mutable reference but is not used mutably
- non_send_fields_in_send_tyThis lint warns about a Send implementation for a type that contains fields that are not safe to be sent across threads. It tries to detect fields that can cause a soundness issue when sent to another thread (e.g., Rc) while allowing !Send fields that are expected to exist in a Send type, such as raw pointers
- option_if_let_elseLints usage of if let Some(v) =
- or_fun_callChecks for calls to .or(foo(..)), .unwrap_or(foo(..)), .or_insert(foo(..)) etc., and suggests to use .or_else(|| foo(..)), .unwrap_or_else(|| foo(..)), .unwrap_or_default() or .or_default() etc
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::redundant_cloneChecks for a redundant clone() (and its relatives) which clones an owned value that is going to be dropped without further useRead it next →Did this answer your question?