CustomImportOrder
検証環境
Checkstyleバージョン:10.3.3
Javaバージョン:17
チェック概要
チェック追加バージョン |
---|
Checkstyle 5.8 |
インポート宣言のグループが、ユーザーによって指定された順序で表示されるかどうかをチェックする。
ユーザによって順序を指定されていないインポートはインポートリストの最後に配置すること。
順序を構成するためのグループには以下の5つがある。
- STATICグループ
staticインポート SAME_PACKAGE(n)グループ
パッケージ名とインポート名の最初のドメインがn個同じであれば、インポートはSAME_PACKAGE(n)グループであるとみなされる
以下はSAME_PACKAGE(3) の例である
```
package java.util.concurrent.locks;import java.util.concurrent.*;
import java.util.concurrent.AbstractExecutorService;
import java.util.concurrent.locks.LockSupport;
```- THIRD_PARTY_PACKAGEグループ
サードパーティインポート。STATIC, SAME_PACKAGE(n), STANDARD_JAVA_PACKAGE, SPECIAL_IMPORTSを除くすべてのインポートのことである - STANDARD_JAVA_PACKAGEグループ
標準的な java/javax のインポート - SPECIAL_IMPORTSグループ
ユーザにとって特別な意味を持つインポートが含まれている場合がある
ルールとルールの間にはセパレーター「###」を使用する。
THIRD_PARTY_PACKAGEとSTANDARD_JAVA_PACKAGEグループにRegExpを設定するには、thirdPartyPackageRegExpとstandardPackageRegExpオプションを使用する。
1つのインポート文が複数のグループに属する場合は、グループには以下の優先順位があるため、優先順位が高い方のグループに所属する。
- STATIC
- SAME_PACKAGE
- STANDARD_JAVA_PACKAGE, SPECIAL_IMPORTS
- THIRD_PARTY
プロパティ
プロパティ | 型 | デフォルト値 | 説明 | 追加バージョン |
---|---|---|---|---|
customImportOrderRules | String | "" | 順番のフォーマットを指定 | 5.8 |
standardPackageRegExp | Pattern | "^(java|javax)\." |
STANDARD_JAVA_PACKAGEグループに含めるクラスの正規表現 | 5.8 |
thirdPartyPackageRegExp | Pattern | ".*" |
THIRD_PARTY_PACKAGEグループに含めるクラスの正規表現 | 5.8 |
specialImportsRegExp | Pattern | "^$" |
SPECIAL_IMPORTSグループに含めるクラスの正規表現 | 5.8 |
separateLineBetweenGroups | boolean | true | インポートグループの間に空白行を挿入するかどうか | 5.8 |
sortImportsInGroupAlphabetically | boolean | false | アルファベット順にするかどうか | 5.8 |
設定+チェック実行結果
プロパティ設定なし
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"/> </module> </module>
チェック実行例
// OK デフォルトは順序の指定なし package com.company; import org.apache.commons.io.FileUtils; import static java.util.*; import java.time.*; import static java.io.*; import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck;
プロパティ設定あり
customImportOrderRules
順番のフォーマットを指定する。 ルールとルールの間にはセパレーター「###」を使用する。
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"> <property name="customImportOrderRules" value="STATIC###STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE"/> </module> </module> </module>
チェック実行例
package com.company; import static java.util.*; import java.time.*; import javax.net.*; // NG static importは一番上にあるべき import static java.io.*; import org.apache.commons.io.FileUtils; import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck;
standardPackageRegExp
STANDARD_JAVA_PACKAGEグループに含めるクラスの正規表現
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"> <property name="customImportOrderRules" value="STATIC###STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE"/> <property name="standardPackageRegExp" value="^java\."/> </module> </module> </module>
チェック実行例
package com.company; import static java.util.*; import static java.io.*; import java.time.*; // NG STANDARD_JAVA_PACKAGEグループに含まれていない import javax.net.*; import org.apache.commons.io.FileUtils; import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck;
thirdPartyPackageRegExp
THIRD_PARTY_PACKAGEグループに含めるクラスの正規表現
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"> <property name="customImportOrderRules" value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/> <property name="thirdPartyPackageRegExp" value="^com\."/> </module> </module> </module>
チェック実行例
package com.company; import static java.util.*; import static java.io.*; import java.time.*; import javax.net.*; // NG THIRD_PARTY_PACKAGEグループに含まれていない(最後に書くべき) import org.apache.commons.io.FileUtils; import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck;
specialImportsRegExp
SPECIAL_IMPORTSグループに含めるクラスの正規表現
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"> <property name="customImportOrderRules" value="STATIC###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE"/> <property name="specialImportsRegExp" value="^org\."/> </module> </module> </module>
チェック実行例
package com.company; import static java.util.*; import static java.io.*; import org.json.JSONObject; import java.time.*; import javax.net.*; // SPECIAL_IMPORTSグループに含まれるのでSTANDARD_JAVA_PACKAGEより上に書くべき import org.apache.commons.io.FileUtils;
separateLineBetweenGroups
インポートグループの間に空白行を挿入するかどうか(デフォルト:true)
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"> <property name="customImportOrderRules" value="STATIC###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE"/> <property name="specialImportsRegExp" value="^org\."/> <property name="separateLineBetweenGroups" value="true"/> </module> </module> </module>
チェック実行例
package com.company; import static java.util.*; import static java.io.*; import org.json.JSONObject; import org.apache.commons.io.FileUtils; // NG 「separateLineBetweenGroups」がtrueなのでグループ間には空行を挿入するべき import java.time.*; import javax.net.*;
sortImportsInGroupAlphabetically
アルファベット順にするかどうか(デフォルト:false)
設定ファイル記述方法
<module name="Checker"> <module name="TreeWalker"> <module name="CustomImportOrder"> <property name="customImportOrderRules" value="STATIC###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE"/> <property name="specialImportsRegExp" value="^org\."/> <property name="sortImportsInGroupAlphabetically" value="true"/> </module> </module> </module>
チェック実行例
package com.company; import static java.util.*; import static java.io.*; // NG 「sortImportsInGroupAlphabetically」がtrueなのでjava.utiよりも上に書くべき import org.json.JSONObject; import org.apache.commons.io.FileUtils; import java.time.*; import javax.net.*;