Overview
自分は命名オタクで,適当につけられた変数名を見ることが耐えられません.自分のコードの変数名を入念にチェックする手間が省くためにも,変数名がイケてるかどうか静的解析で確認してやろう!と思い以下のようなツールを作りました.
Githubリポジトリ: NamingReview for Golang
インストール
go get -u github.com/yuya-okada/namingreview/cmd/namingreview
使い方
対象のGoプロジェクトのディレクトリ内で以下を実行.
go vet -vettool=${which namingreview}
仕組み
The Online Plain Text English Dictionaryというオンラインの辞書から英単語の品詞データをスクレイピングしました.また,プログラムで頻繁に使われるerrやreqなどの辞書に載っていない略語はとりあえず思いつく限り手入力で設定ファイルを作りました.
これらに基づき,自動で変数名・関数名・型名を確認し,下の方に書いたようなルールに基づいてイケてない変数名を指摘します.下のルールを読むのがめんどくさい人用に,例えば「関数名は動詞から始まってないといけない」とか,「配列の名前は複数形か,hogeList, hogeArray, hogeSliceのような配列っぽい接尾辞がついた名前にしないといけない」とかのルールに基づいてチェックします.
プロジェクトごとに特有の造語などを使いたい場合は設定ファイルを書くことで対応できます.詳細はGithubのREADMEに書きました.
現時点で実装されている命名規則
どのプロジェクトでも共通で守るべき最低限のルールのみ実装している.今後,命名規則もルールベースで設定ファイルなどかいてカスタマイズできるようにしたい.
変数名
-
Boolean型の変数は動詞を含まなければならない(ex. selected->isSelected, updatable->canUpdate). 動詞から始まることが望ましいが,そうでない方がわかりやすい場合はかならずしも動詞から始まる必要はない.(ex. “userCanAccess”などは使っていい)
-
Boolean型でない変数名は最低1つは名詞を含んでいなければならない
-
Boolean型でない変数名は名詞,形容詞,分詞のいずれかから始まる
-
配列名の中で最後の名詞は複数形または"slice", "array", "list"のいずれかでなければならない.逆に配列でない変数名の最後の名詞は複数形や"slice", "array", "list"であってはならない.Mapについてはどちらでも良い
-
文字数1文字からなる変数名は推奨されないが,小さいスコープなどで必要ならば使用しても良い.
型名
- 最低1つ以上の名詞を含まなければならない.
- 名詞,形容詞,分詞のいずれかから始まらなければならない.
- 文字数1文字からなる型名は推奨されないが,小さいスコープなどで必要ならば使用しても良い.
関数名
- 動詞から始まらなければならない.(main関数は例外とする)