何を作ったのか
以下のような、変数をそのまま返しているやつ嫌ですよね。それをチェックするツールを作りました。
func f() struct{} {
v := struct{}{}
return v // ヤダ
}
func g() (v struct{}) {
return v // ヤダ
}
どう作ったのか
Goには静的解析ツールを作る機能が標準ライブラリで提供されています。詳しくは分厚いスライドをご覧ください。
ざっくりとしたアルゴリズムは以下の通りです。
- 代入文を探し、ゼロ値じゃない値を代入しているものに印を付ける
-
return
文で変数を返しているものを見つける - その変数がゼロ値じゃない値を代入してる印がついていなければエラー