Clippy lints / Nursery
Clippy lint · Nursery · checked with Clippy 0.1.99
clippy::branches_sharing_code: Checks if the blocks of an if/else, or the arms of a match, contain shared code that can be moved out of the branches
What it meansChecks if the blocks of an if/else, or the arms of a match, contain shared code that can be moved out of the branches. It is in the nursery group and off by default.
Does it matter?
Duplicate code is less maintainable.
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
let foo = if … {
println!("Hello World");
13
} else {
println!("Hello World");
42
};
Write this instead
println!("Hello World");
let foo = if … {
13
} else {
42
};
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]
branches_sharing_code = "warn"In code
#![warn(clippy::branches_sharing_code)]One run
cargo clippy -- -W clippy::branches-sharing-codeThe [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 if the blocks of an if/else, or the arms of a match, contain shared code that
can be moved out of the branches.
Why is this bad?
Duplicate code is less maintainable.
Example
let foo = if … {
println!("Hello World");
13
} else {
println!("Hello World");
42
};
Use instead:
println!("Hello World");
let foo = if … {
13
} else {
42
};
For a match, when every arm ends with the same expression it can be moved after the
match:
match mode {
Mode::A => { a(); Ok(()) }
Mode::B => { b(); Ok(()) }
}
Use instead:
match mode {
Mode::A => { a(); }
Mode::B => { b(); }
}
Ok(())
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
- as_ptr_cast_mutcasting the result of `as_ptr` to *mut u8
- clear_with_drain`drain` used to clear a `Vec`
- coerce_container_to_anyProtects against unintended coercion of references to container types to &dyn Any when the container type dereferences to a dyn Any which could be directly referenced instead
- collection_is_never_readChecks for collections that are never queried
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?