項目29:Clippyに耳を傾けよう
LT;DR
これにより、Rust らしい書き方を深く理解することができる
hr.icon
正確さ(Correctness): よくあるプログラム上のエラーを警告する
Rust らしさ(Idiom): コードの構成が標準的な Rust のスタイルに従っていないと警告する
簡潔さ(Concision): よりコンパクトにコードを書く方法があれば指摘する
性能(Performance): 不要な処理やメモリ確保を避ける方法があれば提案する
読みやすさ(Readability): 人間にとって読みやすく、理解しやすように書き直す方法を提案する
e.g.
下記のコードは コンパイル できるが Clippy で操作するとエラーを吐く code:rs
pub fn circle_area(radius: f64) -> f64 {
let pi = 3.14;
pi * radius * radius
}
code:sh
error: approximate value of f{32, 64}::consts::PI found
--> src/main.rs:2:14
|
2 | let pi = 3.14;
| ^^^^
|
= help: consider using the constant directly
= help: for further information visit ...
= note: #[deny(clippy::approx_constant)] on by default
エラーの通りに修正する
code:rs
pub fn circle_area(radius: f64) -> f64 {
std::f64::consts::PI * radius * radius
}
ページではそのコードがなぜ悪いかが記述されている
そのため、プログラマが自身のコードにも適用されるのか、されないのかを判断することができる
項目によっては 偽陽性 の可能性についても書かれている Rust らしい書き方を深く理解したいなら、この一覧ページを読もう
もし、警告が自身のコードと関係が無いと判断した場合、#[allow(...)] で無効化することが可能
トップレベルで ! を追加して記述する(#![allow(...)])ことで、クレート全体を無効化することもできる
ただし、偽陽性であるかを議論するよりかは、リファクタリング するのに労力を費やしたほうが良い コードを修正するにせよ、警告を無効にするにせよ、「コードに対してClippy の警告が出ないようにしよう」
これにより、新しい警告が出た場合に気がつくことができる
as を利用しているケース(warning.icon デフォルトでは無効)
ヒープ上に確保されたコレクションの要素が Box で保持されているケース: vec_box Iterator メソッドの組み合わせがより簡潔に書けるケース: 複数あるため省略
デフォルト実装に委ねていない
panic! や expect などの関連メソッドを利用しているケース: 複数あるため省略