rust-lang / rust-lang/rust-clippy
struct fields that can be reordered to avoid clones during struct init
Open
Nobody has claimed this yet.
A-lint
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
What it does
Check for data that is cloned into struct field because a move would prevent the data being used in another field (by reference).
Suggest to change the field order to remove the clone
Advantage
less clones, more 🚀
Drawbacks
No response
Example
struct S {
A: String,
B: String,
}
pub fn main() {
let x = String::from("hello");
let s = S {
A: x.clone(), // :(
B: format!("{}", x),
};
}
Could be written as:
struct S {
A: String,
B: String,
}
pub fn main() {
let x = String::from("hello");
let s = S {
B: format!("{}", x),
A: x, // :)
};
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start from the struct initialization examples in the issue and examine how field evaluation and moves make the clone unnecessary. Determine the cases where reordering fields is safe, then add a lint suggestion and tests covering the shown clone-versus-move pattern.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- devtools
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100