はしがき
以前、go vetについて触れましたが、
公式以外でも循環複雑度解析をしてくれたりとか、
いろいろ良いライブラリがあるので、その辺の紹介を。(後おまけでvimの設定:p
静的解析ライブラリ 御三家的なアレ。
前の記事でも紹介したgo謹製のツールですね。
保存時とかに掛けると、使ってないimportを自動でお掃除してくれたり、追加してくれたりする、賢い子です。
構文上微妙なものとかをsuggestしてくれます。
私はvimのファイル保存時にgo fmt,go lintは自動で掛けるようにしています :)
静的解析ライブラリ 複雑度、重複コードチェックとか少し凝ったやつ
分岐数などのプログラムの構造の複雑さ、循環複雑度を測ってくれます。
あくまで指標なので普段からゴリゴリ使うものでもないですが、リファクタの対象探しとかに良いかなと。
-over
とかで閾値を決めて定期的に探したり、大きいモジュールを作った時にチェックしてみると楽しい。
エラーハンドリングしてない奴を抽出してくれます。
個人的にはエラーはちまちまハンドリングするんじゃなくて、上の層でごそっと捕まえてロギングするなりしたいので
そんな使ってない。(下手に握り潰されてもやなので、回復処理がないならとりあえず上にちゃんと返せ派)
重複コード検出をしてくれます。
vimmer向け
go imports
,go vet
,go lint
周りは保存時にかけちゃうのがオススメです。(go fmtは言わずもがな)
syntasticあたりとか
vim-goとかで。
vim-goはチュートリアルも充実してて便利です。
NeoBundle 'scrooloose/syntastic'
let g:syntastic_mode_map = {
\ "mode" : "active",
\ "active_filetypes" : ["go"],
\}
let g:syntastic_go_checkers = ['go', 'golint', 'govet']
let g:go_fmt_autosave = 1
let g:syntastic_aggregate_errors = 1
augroup GoSaveHook
autocmd!
autocmd BufWritePre *.go GoImports
augroup END
とか(適当ですいません。)
そういえば最近NeoBundle聞かないなぁ。
YOU全てかけちゃいなよ なライブラリ
だいたい上で紹介したもの+αをまとめて全部かけてくれる子もいます。
全ての項目を有効にした場合、結構な時間が掛かるのでCIで常時回すのは自己判断で..。
ただ手軽なので、一度回してみると良いと思います :)
gometalinter --install --update
gometalinter ./...
サボってると大量に出るので、metalinterのformatがしたくなると言う。
私見
個人的に、レビューでの構文指摘などは不毛なので、lint,vet,fmt通ればOK、みたいなボーダーラインやルールを作ると、
構造設計・パフォーマンスなど本来レビューするべきことに集中できるのでオススメです。
duplやerrcheck,cycloなどは定常的にCIで,,ってほどには正直思わないのですが、
コードベースが大きくなるにつれ、複雑度がおかしくなってゼウスクラスが出来上がったりするので
コードベースのたまのヘルスチェック くらいな気持ちで良いかなーと思ってます。