Clippy lints / Style
Clippy lint · Style · checked with Clippy 0.1.99
clippy::multiple_bound_locations: bound is defined in more than one place
What it meansCheck if a generic is defined both in the bound predicate and in the where clause. It is in the style group and warns by default.
What you see
warning: bound is defined in more than one place --> main.rs:3:7 | 3 | fn ty<F: std::fmt::Debug>(a: F) | ^ 4 | where 5 | F: Sized, | ^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#multiple_bound_locations = note: `#[warn(clippy::multiple_bound_locations)]` on by default
Real output of Clippy 0.1.99 (Rust 1.99) on the example below. Names and line numbers in yours will differ.
Does it matter?
It can be confusing for developers when seeing bounds for a generic in multiple places.
Code that works but is not idiomatic Rust. Warns by default.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
fn ty<F: std::fmt::Debug>(a: F)
where
F: Sized,
{}
Write this instead
fn ty<F>(a: F)
where
F: Sized + std::fmt::Debug,
{}
Turn it off, or on
Allow it where it does not fit your code, as narrowly as you can:
On one item
#[allow(clippy::multiple_bound_locations)]
fn my_function() { /* ... */ }Whole crate (Cargo.toml)
[lints.clippy]
multiple_bound_locations = "allow"One run
cargo clippy -- -A clippy::multiple-bound-locationsThe [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
Check if a generic is defined both in the bound predicate and in the where clause.
Why is this bad?
It can be confusing for developers when seeing bounds for a generic in multiple places.
Example
fn ty<F: std::fmt::Debug>(a: F)
where
F: Sized,
{}
Use instead:
fn ty<F>(a: F)
where
F: Sized + std::fmt::Debug,
{}
From the Clippy lint list (0.1.99), part of the Rust project, MIT or Apache-2.0. Official entry.
Related lints
- needless_returnunneeded `return` statement
- new_without_defaultChecks for public types with a pub fn new() -> Self method and no implementation of Default
- len_zeroChecks for getting the length of something via .len() just to compare to zero, and suggests using .is_empty() where applicable
- mixed_attributes_styleChecks for items that have the same kind of attributes with mixed styles (inner/outer)
- mixed_case_hex_literalsinconsistent casing in hexadecimal literal
- module_inceptionChecks for modules that have the same name as their parent module
- must_use_unitthis unit-returning function has a `#[must_use]` attribute
- mut_mutex_lockcalling `&mut Mutex::lock` unnecessarily locks an exclusive (mutable) reference
- needless_borrowthis expression creates a reference which is immediately dereferenced by the compiler
All 847 Clippy lints · Rust compiler errors · Cargo.toml checker
Up next
Related lintclippy::needless_returnunneeded `return` statementRead it next →Did this answer your question?