importas はインポートエイリアスの一貫性を強制するツールです。
解決する問題
バージョン付きパッケージ(Kubernetes API など)をインポートする際、開発者ごとにエイリアスの付け方がばらつくとコードの可読性が低下します。同じパッケージに対して v1、apiv1、servingv1 などが混在すると、コードレビューの効率も落ちます。
1 2 3 4 5 6
| import ( v1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1" core "k8s.io/api/core/v1" )
|
1 2 3 4 5 6
| import ( corev1 "k8s.io/api/core/v1" appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" )
|
設定
公式ドキュメント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| version: "2"
linters: enable: - importas settings: importas: no-unaliased: true no-extra-aliases: true alias: - pkg: k8s.io/api/core/v1 alias: corev1 - pkg: k8s.io/api/apps/v1 alias: appsv1 - pkg: k8s.io/apimachinery/pkg/apis/meta/v1 alias: metav1
|
オプション
| オプション |
型 |
デフォルト |
説明 |
alias |
[]object |
[] |
パッケージパスとエイリアスの対応リスト |
alias[].pkg |
string |
- |
パッケージのインポートパス(正規表現可) |
alias[].alias |
string |
- |
強制するエイリアス名(キャプチャグループで動的生成可) |
no-unaliased |
bool |
false |
alias で指定したパッケージのエイリアスなしインポートを禁止する |
no-extra-aliases |
bool |
false |
alias で指定していないエイリアスを禁止する |
サンプル
検出例
1 2 3 4 5 6 7 8 9 10 11
|
import ( v1 "k8s.io/api/core/v1" )
import ( "k8s.io/api/core/v1" )
|
修正例
1 2 3
| import ( corev1 "k8s.io/api/core/v1" )
|
正規表現による一括ルール
1 2 3 4 5 6 7 8 9 10 11 12
| linters: settings: importas: no-unaliased: true alias: - pkg: k8s.io/api/(\w+)/(v[\w\d]+) alias: $1$2 - pkg: k8s.io/apimachinery/pkg/apis/meta/(v[\w\d]+) alias: meta$1
|
この設定で以下のように解決されます:
1 2 3 4 5
| import ( corev1 "k8s.io/api/core/v1" appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" )
|
注意点
no-unaliased: true は alias で指定したパッケージにのみ適用される。指定していないパッケージのエイリアスなしインポートには影響しない
no-extra-aliases: true にすると alias に定義されていないエイリアスが禁止される。段階的に導入する場合はまず false で始める
- 正規表現の
pkg パターンとキャプチャグループ($1、$2)を活用すると、バージョン付きパッケージが多い場合でも設定を簡潔に保てる
参考リンク