rust-lang / rust-lang/rust-clippy
`manual_flatten` false positives with reference slices
Open
@dswij is already working on this.
Since Aug 9, 2021.
C-bug
good first issue
I-false-positive
I-suggestion-causes-error
- Dominant language
- Rust
- Stars
- 13.5k
- Forks
- 2.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 32
Description
Lint name: manual_flatten
I tried this code:
struct Test {
a: Option<usize>,
b: Option<usize>,
}
fn main() {
let t = Test {
a: Some(1),
b: Some(2),
};
for x in [&t.a, &t.b] {
if let Some(y) = x {
println!("{}", y);
}
}
}
This also applies to mutable references.
Clippy suggests this, which is both incomplete as a refactor and does not compile. Try as I might I could not get into_iter().flatten() to compile.
for x in [&t.a, &t.b].into_iter().flatten() {
if let Some(y) = x {
println!("{}", y);
}
}
Meta
I saw https://github.com/rust-lang/rust-clippy/issues/6893 which appears to be the same issue, but it was claimed to be fixed there and that fix should have landed in 1.53. I'm on 1.54 now and still seeing it with both mutable and immutable reference slices.
cargo clippy -V: clippy 0.1.54 (a178d03 2021-07-26)rustc -Vv:
rustc 1.54.0 (a178d0322 2021-07-26)
binary: rustc
commit-hash: a178d0322ce20e33eac124758e837cbd80a6f633
commit-date: 2021-07-26
host: x86_64-unknown-linux-gnu
release: 1.54.0
LLVM version: 12.0.1
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.
Assessment
This issue has not been assessed yet.