rust-clippy の manual_flatten 誤検知を修正した話
DRANK

株式会社estie(エスティ)ではバックエンドの主要な開発言語に Rust を使用しています。入社時点では Rust を触ったことがなかったため、学習目的で rust-clippy へ誤検知を修正する PR を出しました。manual_flatten とは次のような if let を使ったループのコードがあります。for x in iter { if let Some(y) = x { // ... } } manual_flatten は、この if let が不要だと指摘し、Iterator::flatten() を使う形への書き換えを提案します。for y in iter.flatten() { // ... } manual_flatten の誤検知issue #6776 で、次のコードにも同じ指摘が出ると報告されていました。let x: Vec<Option<(i32, Option<i32>)>> = vec![Some((4, Some(0)))]; for n in x.iter() { if let Some((_, Some(n))) = n { println!("{n}"); } } Clippy の提案どおりに書き換えると次のようになりますが、これではコンパイルが通りません。let x: Vec<Option<(i32, Option<i32>)>> = vec![Some((4, Some(0)))]; for (_, Some(n)) in x.iter().flatten() { println!("{n}"); } error[E0005]: refutable pattern in `for` loop binding --> src/main.rs:…

zenn.dev
Related Topics: Rust
1 comments