静的解析ツール

deteKt + Jetpack Compose Rulesがよさそうです
Ktlintは設定が楽だけど、細かい指定がしたくなるかもなので上位互換のdeteKt
SlackのCompose Lintsはアクティブなプロジェクトで使われていて精錬されているとは思うけど
本流と思われるJetpack Compose Rulesをとりあえず選択しました

Kotlin 静的解析ツール

・Ktlint

Android StudioのプラグインはまだK2 compilerに対応されてないです
gradleにplugin設定して、コンソールから実行した場合はK2 compiler有効にしていてもエラーになりませんでした
https://pinterest.github.io/ktlint/latest/install/setup/

・deteKt

こちらのAndroid StudioのプラグインはK2 compiler使っていてもエラーとかにはなりません
※ 対応済みかどうかは不明
https://detekt.dev/
https://github.com/detekt/detekt

Jetpack Compose向けの設定変更はこちらが参考になりました
https://android.benigumo.com/20231015/detekt/
https://detekt.dev/docs/introduction/compose/

[versions]
detekt = "1.23.6"

[plugins]
arturbosch-detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
plugins {
    alias(libs.plugins.arturbosch.detekt) apply false
}
plugins {
    alias(libs.plugins.arturbosch.detekt)
}

detekt {
    buildUponDefaultConfig = true
    config.setFrom("$projectDir/config/detekt.yml")
}

config/detekt/detekt.ymlをプロジェクト直下に生成

./gradlew detektGenerateConfig

このファイルをTools – detekt – Files – Configration file(s)にも追加

FunctionNaming:
    ignoreAnnotated: ['Composable'] # 追加

MagicNumber:
#   ignorePropertyDeclaration: false
    ignorePropertyDeclaration: true

TopLevelPropertyNaming:
#    constantPattern: '[A-Z][_A-Z0-9]*'
    constantPattern: '[A-Z][A-Za-z0-9]*'

LongParameterList:
#    functionThreshold: 6
# OutlinedTextFieldなど引数が多いパターンに対応(とりあえず20)
    functionThreshold: 20
#    ignoreDefaultParameters: false
    ignoreDefaultParameters: true

UnusedPrivateMember:
    ignoreAnnotated: ['Preview'] # 追加

TooManyFunctions:
#   ignoreAnnotatedFunctions: []
    ignoreAnnotatedFunctions: ['Preview']

MaxLineLength:
#    maxLineLength: 120
    maxLineLength: 150

WildcardImport:
    excludeImports:
      - 'java.util.*'
      - 'org.junit.Assert.*' # 追加

実行

./gradlew detekt

Jetpack Compose 静的解析ツール

・Jetpack Compose Rules

Twitterのが更新停止したため、引き継いで更新されているそうです更新は元Twitterの人がしているそうです
https://mrmans0n.github.io/compose-rules/
https://github.com/mrmans0n/compose-rules

dependencies {
    detektPlugins "io.nlopez.compose.rules:detekt:<VERSION>"
}

以下にあるCompose用のルールをdetekt.ymlに追加
https://mrmans0n.github.io/compose-rules/detekt

・Compose Lints
Slackが引き継いで更新しているものもあるようです
https://github.com/slackhq/compose-lints

Android Studio

Set from…からKotlin obsolete IntelliJ IDEA code styleを指定してこれベースでカスタマイズ

・自動的にコードフォーマットを適応する

Tools – Actions on Save
Refomat code / Optimize imports

・ソースの最終行に改行挿入
Editor – General – On Save – Ensure every saved file ends with line break

・ifのelseやtryのcatchで改行
単に見やすいのと、コードをelseやcatch/finallyで折りたたみたいので改行したい派(少数派;;)

・NOTEコメントをTODOリストに表示

Editor – TODO に追加 ← ついでに追加しとく


Android Studio Koala Feature Drop 2024.1.2 built on August 23, 2024