🔍

Twitter Jetpack Compose Rules のktlintを試す

2022/10/08に公開

話題になってたので試してみた。

  1. Android Studioから新規Composeプロジェクトを作成
  2. そこにtwitter/compose-rulesを導入していく
  3. ktlint実行時にcompose ruleがチェックされればOK

導入する前に

公式ドキュメントを見ると、使い方としていくつかのlintツールが紹介されている。
基本的に、これらのツールと組み合わせてcompose-rulesを使用するようだ。

  • Kotlinter
  • ktlint-gradle
  • spotless
  • ktlint CLI
  • ktlint (unofficial) IntelliJ plugin

今回は先頭にあったKotlinterと一緒にcompose-rulesを導入していく。

導入してみる

Kotlinterの導入

まずはプロジェクトにKotlinterを追加する。
Kotlinterドキュメントのmulti-module-and-androidを参照しながら導入した。

build.gradle
plugins {
     id 'com.android.application' version '7.4.0-beta02' apply false
     id 'com.android.library' version '7.4.0-beta02' apply false
     id 'org.jetbrains.kotlin.android' version '1.7.0' apply false
+    id 'org.jmailen.kotlinter' version "3.12.0" apply false
}
app/build.gradle
 plugins {
     id 'com.android.application'
     id 'org.jetbrains.kotlin.android'
+    id 'org.jmailen.kotlinter'
}

ここでsyncして、formatKotlinlintKotlinを実行してみてKotlinterの動作を確かめる。

$ ./gradlew formatKotlin

lintエラーっぽいのが見つかればOK

twitter/compose-rules/ktlin の導入

公式ドキュメントを見ながら導入する。
https://twitter.github.io/compose-rules/ktlint/#using-with-kotlinter

build.gradle
 buildscript {
+    dependencies {
+        classpath "com.twitter.compose.rules:ktlint:0.0.18"
+    }

これで導入完了、思ったより簡単だった。

Compose Ruleのktlintを実行してみる

$ ./gradlew lintKotlin

> Task :app:lintKotlinMain FAILED
/Users/k_ikemura/dev/android-compose-rules-sample/app/src/main/java/com/sample/composerules/MainActivity.kt:30:5: Lint error > [twitter-compose:modifier-missing-check] This @Composable function emits content but doesn't have a modifier parameter.

See https://twitter.github.io/compose-rules/rules/#when-should-i-expose-modifier-parameters for more information.

FAILURE: Build failed with an exception.

無事にcompose ruleが指摘されている。

error > [twitter-compose:modifier-missing-check] This @Composable function emits content but doesn't have a modifier parameter.

modifierを持ちなさい、という内容だった。

ちゃんとlint ruleのurlも表示されており、こちらも目を通しておくと良さそう
https://twitter.github.io/compose-rules/rules

試したGitHub Repository

https://github.com/ikemura23/android-compose-rules-sample

Discussion