Clippy lints / Nursery
Clippy lint · Nursery · checked with Clippy 0.1.99
clippy::needless_pass_by_ref_mut: this parameter is a mutable reference but is not used mutably
What it meansCheck if a &mut function argument is actually used mutably. Be careful if the function is publicly reexported as it would break compatibility with users of this function, when the users pass this function as an argument. It is in the nursery group and off by default.
What you see
warning: this parameter is a mutable reference but is not used mutably --> main.rs:3:11 | 3 | fn foo(y: &mut i32) -> i32 { | ^----^^^ | | | help: consider removing this `mut` | = help: for further information visit https://rust-lang.github.io/rust-clippy/stable/index.html#needless_pass_by_ref_mut = note: `-W clippy::needless-pass-by-ref-mut` implied by `-W clippy::nursery`
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?
Less mut means less fights with the borrow checker. It can also lead to more opportunities for parallelization.
New lints still being finished. Off by default and may have false positives.
How to fix it
Clippy does not fix this one automatically. Change the code by hand:
Flagged
fn foo(y: &mut i32) -> i32 {
12 + *y
}
Write this instead
fn foo(y: &i32) -> i32 {
12 + *y
}
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_pass_by_ref_mut = "warn"In code
#![warn(clippy::needless_pass_by_ref_mut)]One run
cargo clippy -- -W clippy::needless-pass-by-ref-mutThe [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.
Settings in clippy.toml
avoid-breaking-exported-api: Suppress lints whenever the suggested change would cause breakage for other crates.
Clippy's own documentation
What it does
Check if a &mut function argument is actually used mutably.
Be careful if the function is publicly reexported as it would break compatibility with users of this function, when the users pass this function as an argument.
Why is this bad?
Less mut means less fights with the borrow checker. It can also lead to more
opportunities for parallelization.
Example
fn foo(y: &mut i32) -> i32 {
12 + *y
}
Use instead:
fn foo(y: &i32) -> i32 {
12 + *y
}
Configuration
-
avoid-breaking-exported-api: Suppress lints whenever the suggested change would cause breakage for other crates.(default:
true)
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
- literal_string_with_formatting_argsthis looks like a formatting argument but it is not part of a formatting macro
- missing_const_for_fnthis could be a `const fn`
- needless_collectChecks for functions collecting an iterator when collect is not needed
- needless_type_castChecks 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
- 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) =
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?