Rustのclippyについて調べてみた
はじめに
- Rustのlinter(静的解析ツール)であるclippyですが、「そもそも変な書き方してたらコンパイラで警告してくれるし、必要なの??」と疑問に思い調べたので、自分への備忘録として記事にしました。
clippyとは
- いわゆる静的解析ツール。コードを分析してよくある間違いを見つけ指摘してくれる
コンパイラ警告がカバーしない範囲の警告を出してくれる
どんな解析、警告を出してくれるかは下記に書かれている
cargo clippy --fix
と--fix
を追加すると自動的にコードを直してくれる- ただし、指摘した全てを直してくれるわけではない
cargo fix
で修正されるものは全て修正してくれる(?)。cargo fix
の上位互換かもしれない
例
fn main() { let x = 3.1415; let r = 8.0; println!("the area of the circle is {}", x * r * r); return; }
上のコードに対してcargo clippy
を実行すると下記が出力される
warning: unneeded `return` statement --> src\main.rs:6:5 | 6 | return; | ^^^^^^^ help: remove `return` | = note: `#[warn(clippy::needless_return)]` on by default = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return error: approximate value of `f{32, 64}::consts::PI` found --> src\main.rs:2:13 | 2 | let x = 3.1415; | ^^^^^^ | = note: `#[deny(clippy::approx_constant)]` on by default = help: consider using the constant directly = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#approx_constant
次にcargo clippy --fix
(正確には、私の手元の環境で実施した時はcargo clippy --fix --allow-no-vcs
)を実行すると、コードが下のように変更される
fn main() { let x = 3.1415; let r = 8.0; println!("the area of the circle is {}", x * r * r); }
returnが不要ということで消してくれたのは良いけど、returnの文字列だけなので変な空白は残ってしまうみたいです。
ただ、この後にcargo fmt
を実行することで残ってしまった余計な空白を取り除くことができます
さいごに
- Rustの静的解析ツールであるclippyについて調査し、実際に使ってみました。
- コンパイラで指摘するよりも多くのことを指摘してくれることが分かりました。
--fix
をつけることで自動で修正する機能があることも分かりました。+ しかし、指摘事項の全てを修正するわけではないことは注意すべきかもしれません。 + 余計な空白が残ったりするので、実行後`cargo fmt`もセットで実行するのが良さそうです。