Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

背景

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

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

mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away