🧹

spotlessでktlintをつかう

2024/12/21に公開

Kotlin の Formatter/Linter って何がデファクトスタンダードなんですかね…?

Spotless[1] を使って ktlint[2] による Lint/Format を行います. ktlint 単体だと Maven での設定が面倒なので, Spotless を使って設定します.

https://github.com/toms74209200/spotless-ktlint-example

環境

Kotlin 2.0.21
Maven 3.9.9
spotless-maven-plugin 2.43.0

使い方

spotless-maven-plugin のドキュメントにしたがって設定するだけです. Maven の Phase で実行できるように executions の設定を追加します.
spotless-maven-plugingoalapplycheck の 2つなので, それぞれを Phase に割り当てます.これで mvn clean を実行するとフォーマットが適用され mvn compile 時に Lint check が行われます. compile に割り当てられているのは ErrorProne の名残です.

<build>
    <plugins>
        <plugin>
            <groupId>com.diffplug.spotless</groupId>
            <artifactId>spotless-maven-plugin</artifactId>
            <configuration>
                <kotlin>
                    <includes>
                        <include>src/main/kotlin/**/*.kt</include>
                        <include>src/test/kotlin/**/*.kt</include>
                    </includes>
                    <ktlint />
                </kotlin>
            </configuration>
            <executions>
                <execution>
                    <id>spotless-clean</id>
                    <goals>
                        <goal>apply</goal>
                    </goals>
                    <phase>clean</phase>
                </execution>
                <execution>
                    <id>spotless-compile</id>
                    <goals>
                        <goal>check</goal>
                    </goals>
                    <phase>compile</phase>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

https://github.com/toms74209200/spotless-ktlint-example/blob/f059991eca57dbb074456a6e0ab47cb110e6d013/pom.xml#L79-L107

Spotless は Java でも使えるし, 今回使った ktlint 以外もすぐに導入できます. 簡単ですね.

脚注
  1. spotless/plugin-maven at main · diffplug/spotless ↩︎

  2. Features - Ktlint ↩︎

Discussion