LoginSignup
34
29

More than 5 years have passed since last update.

循環複雑度を測定してくれるツールを作りました #Golang

Posted at

背景

僕は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でまともにツールを作ってみたのですが、すごく簡単に書けていい感じだなーって思いました。

ロジックをかなりゴリゴリ書いてしまったり、ツールの名前がイケてなかったりと色々修正点があるので今後直していく予定です。

34
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
29