decorder はファイル内の宣言(type、const、var、func)の順序と数をチェックするツールです。
解決する問題
Go ファイル内の宣言の配置順序がバラバラだと、コードの見通しが悪くなります。型定義が関数の間に散在したり、定数と変数が混在したりすると、ファイルの構造を把握するのに時間がかかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package user
func NewUser(name string) *User { }
type User struct { Name string Age int }
var defaultAge = 20
const maxNameLen = 100
type Role int
const ( _ Role = iota RoleAdmin )
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| package user
type User struct { Name string Age int }
type Role int
const maxNameLen = 100
const ( _ Role = iota RoleAdmin )
var defaultAge = 20
func NewUser(name string) *User { }
|
設定
公式ドキュメント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| version: "2"
linters: enable: - decorder settings: decorder: dec-order: - type - const - var - func disable-dec-order-check: false disable-dec-num-check: false disable-init-func-first-check: false
|
オプション
| オプション |
型 |
デフォルト |
説明 |
dec-order |
[]string |
[type, const, var, func] |
宣言の必須順序 |
disable-dec-order-check |
bool |
true |
宣言順序のチェックを無効化する |
disable-dec-num-check |
bool |
true |
同種の宣言ブロックの重複チェックを無効化する |
disable-init-func-first-check |
bool |
true |
init 関数が他の関数より前にあるかのチェックを無効化する |
disable-type-dec-num-check |
bool |
false |
type 宣言の重複チェックを無視する |
disable-const-dec-num-check |
bool |
false |
const 宣言の重複チェックを無視する |
disable-var-dec-num-check |
bool |
false |
var 宣言の重複チェックを無視する |
ignore-underscore-vars |
bool |
false |
アンダースコア変数(_)をチェックから除外する |
サンプル
検出例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
package example
func Helper() {}
type Config struct { Host string }
const maxRetry = 3
const timeout = 30
func Run() {}
func init() {}
|
修正例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package example
type Config struct { Host string }
const ( maxRetry = 3 timeout = 30 )
func init() {}
func Helper() {}
func Run() {}
|
注意点
- デフォルトではすべてのチェックが無効(
true)になっている。有効にするには disable-*-check: false を明示的に設定する
dec-order はカスタマイズ可能。チームの規約に合わせて [const, type, var, func] のような順序も指定できる
init 関数は Go の仕様上特別な関数のため、disable-init-func-first-check: false で他の func より前に配置することを強制できる
- 同種の宣言を 1 つのブロックにまとめることを推奨するチェック(
dec-num-check)は、関連する定数や変数をグループ化する習慣づけに有効
参考リンク