背景
僕はGoを書く前はPythonを書いていました。
Pythonにはflake8という色々便利なやつがいて、自分のコードがPython界の流儀に従っているかチェックしてくれます。
Goだとgofmtとかがほぼ同等の機能を提供してくれています。
ですが、flake8にあってgofmtにないもの。それはコードの循環複雑度を指摘する機能です。
これがあるとついつい長く書いてしまった関数なんかを洗い出してリファクタするための手がかりになったりします。
これをGoで使うためにGoで書きました。
すでにあるかどうかは知りません。
使い方
ビルドしてパスの通った場所に配置して実行すると
(go:go-cyclomatic-complexity) kenshikamata% ./gocc -path ./complexity
complexity/ast.go :Line 21 func BuildAst is too complex 27 > 12
complexity/ast.go :Line 102 func Attrs is too complex 13 > 12
こんな感じで出力してくれます
パラメータは
-limit
複雑度のしきい値。デフォルトは12
-path
調べるコードがあるディレクトリのパス。デフォルトはカレントディレクトリ
こんな感じです
感想
これを作成するにあたって、標準パッケージのASTライブラリを利用したのですが、どうにもこうにも使い勝手がわからなくて以下の記事とコードを参考にしました。
とてもわかり易かったです。ありがとうございました。
http://yuroyoro.hatenablog.com/entry/2014/06/30/220356
https://github.com/yuroyoro/goast-viewer
初めてGoでまともにツールを作ってみたのですが、すごく簡単に書けていい感じだなーって思いました。
ロジックをかなりゴリゴリ書いてしまったり、ツールの名前がイケてなかったりと色々修正点があるので今後直していく予定です。