1 概要
EmbulkのJava関連のコードは、Prestoと同じコードスタイル(Airlift codestyle)で記述されていますした。
(Embulk本体は、v0.9からGoogle Java Styleの一部修正版が採用されています。(2018/2/8追記))
下記の手順で、プラグインのソースコードが同じコードスタイルになっているかどうかをチェックすることができます。
Gradleの設定とIntelliJ IDEA 15 CE(OSX)、 の設定それぞれについて解説します。
ちなみに、Gradleの設定は、embulk new
したときに自動的に生成できるようにするPRを作成しました。
[Propose] Add checkstyle settings in Java plugin generator
いい悪いどちらでも是非、コメントください。
プラグイン内のコードスタイルをチェックする設定がEmbulk 0.8から利用できるようになりました。
なお、Embulkのプロジェクトではプラグイン作成者の方が小気味良いハックで目の前の問題を解決することも許されても良いという方針から、スタイルを厳密に守ることを重要視していません。プラグインを作られる方の好きなスタイルでプラグインを作るのも自由です。
2 Gradleの場合
次の手順で設定をします。
- 2.1 設定
- 2.2 チェックコマンドを実行
- 2.3 余談
2.1 build.gradleの設定(embulk 0.8からは自動設定)
embulk 0.8からは、embulk newをすると、次の設定がbuild.gradleに追加されます。
embulk 0.8より前のプラグインでもembulk migrate path/to/plugin_dir
コマンドを実行すれば同じ設定が適用されます。
plugins {
// 略
id "checkstyle"
}
// 略
checkstyle {
configFile = file("${project.rootDir}/config/checkstyle/checkstyle.xml")
toolVersion = '6.14.1'
}
checkstyleMain {
configFile = file("${project.rootDir}/config/checkstyle/default.xml")
ignoreFailures = true
}
checkstyleTest {
configFile = file("${project.rootDir}/config/checkstyle/default.xml")
ignoreFailures = true
}
またチェックに使うファイルが次の場所に作成されます。
二つのファイルはチェックする内容が若干異なります。
例えば、default.xmlはimportの順序に関するチェックは行わないようになっています。
- config/checkstyle/default.xml
- config/checkstyle/checkstyle.xml
2.3 チェックコマンドを実行
gradlew <チェックの種類>
でチェックを行うことができます。
チェックは次の種類が利用できます。checkは、checkstyleMain
とcheckstyleTest
それぞれを実行します。
- check: 緩いチェックで、警告のみ
- checkstyleMain: プラグイン本体のチェック
- checkstyleTest: テストコードのスタイルチェック
- checkstyle: より厳密なチェック、スタイルに従わないとエラーになる。
checkstyle
の実行例はつぎのとおりです。
./gradlew checkstyle
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:checkstyleMain
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsFileInputPlugin.java:27: 'java.io.File' は上のインポート文から1行空けるべきです。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsFileInputPlugin.java:180:45: ':' の前にホワイトスペースがありません。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsFileInputPlugin.java:187:57: 名前 'rewind_seconds' はパターン '^[a-z][a-zA-Z0-9]*$' に一致しなければなりません。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFile.java:3:8: 使用されないインポートです - org.apache.hadoop.fs.Path。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFile.java:23:30: '{' は新しい行にあるべきです。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFile.java:38: Blank line before closing brace
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFileInputStream.java:0: ファイルが新しい行で終了していません。
[ant:checkstyle] /path/to/embulk-input-hdfs/src/main/java/org/embulk/input/hdfs/HdfsPartialFileInputStream.java:48:40: 'cast' の後にホワイトスペースがありません。
:checkstyleMain FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':checkstyleMain'.
> Checkstyle rule violations were found. See the report at: file:///path/to/embulk-input-hdfs/build/reports/checkstyle/main.xml
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 2.97 secs
余談
- build.gradle内に
toolVersion = 6.7
と記述しなくても良くなりました。(Embulk 0.8以降) - 上記はgradleのバージョンを2.6から2.10にアップデートしたからです。
3 IntelliJ IDEA 2020.3の場合
Airlift.xmlをダウンロードして、~/Library/Preferences/IdeaIC2016.2/codestyles/Airlift.xml(古いバージョンでは、~/Library/Preferences/IdeaIC15/codestyles/Airlift.xml) として保存します。
[Preferences] -> [Editor] -> [Code style]でSchemaからAirliftが選択できるようになります。
ソースコードのフォーマット
Reformatting Source Code によると、Code
-> Reformat Code
で自動整形をしてくれます。
Optimizing Importsによると、Code
-> Optimize Imports
で、importの順番を直してくれます。
4 参考情報
@hanpen_good InteliJ のはコレで大丈夫なハズです:https://t.co/rkdaMpaPAQ
— FURUHASHI Sadayuki (@frsyuki) 2015, 7月 20
Check code style embulk-executor-mapreduce