https://github.com/detekt/detekt – статический анализатор кода для Kotlin-проектов. Он умеет проверять исходный код без компиляции проекта и помогает находить потенциальные ошибки и нарушения стиля. Его используют, чтобы упростить поддержку проекта. Detekt работает как со стандартным набором правил, так и с кастомными проверками. Его можно гибко настроить под конкретный проект и выбранный стек.

Как подключить Detekt в Android-проект

Detekt подключается как обычный Gradle-плагин. В build.gradle.kts добавляем dev.detekt, подключаем конфиг, включаем buildUponDefaultConfig

libs.versions.toml

[versions]
detekt = "2.0.0-alpha.3"

[plugins]
detekt = { id = "dev.detekt", version.ref = "detekt" }

build.gradle.kts

import dev.detekt.gradle.extensions.DetektExtension

plugins {
    alias(libs.plugins.detekt)
}

subprojects {
    pluginManager.apply("dev.detekt")
    extensions.configure<DetektExtension> {
        config.setFrom(rootProject.file(".github/detekt.yml"))
        buildUponDefaultConfig = true
    }
}

После этого Detekt можно запускать обычной проверкой:

./gradlew detekt

Запустить проверку с автоматическим исправлением:

./gradlew detekt --auto-correct

Ненужные правила отключаются в detekt.yml, его можно сгенерировать командой:

./gradlew detektGenerateConfig

У нужного ruleset или конкретного правила ставим active: false:

style:
  active: true
  MagicNumber:
    active: false

Зачем создавать свои правила

У Detekt много встроенных правил, но со временем их становится недостаточно. Базовые проверки покрывают общий кодстайл, но не отдельные фетиши конкретного проекта. Поэтому и пишут кастомные правила: чтобы автоматизировать такие проверки и разгрузить code review.

Минимальный каркас

Создаем пустой проект в :google-android-studio: Android Studio. Выбираем шаблон No Activity без лишнего UI-кода. Имя проекта – detekt-rules. Для размещения кода правил нам нужен один JVM-модуль. Описываем задачу агенту:

<aside> <img src="notion://custom_emoji/fa9c1018-82d4-4059-a40c-20867a0bc1d8/33415285-0ae8-806d-886e-007a35b317b9" alt="notion://custom_emoji/fa9c1018-82d4-4059-a40c-20867a0bc1d8/33415285-0ae8-806d-886e-007a35b317b9" width="40px" />

Преврати этот проект в минимальный JVM-проект для разработки кастомных правил Detekt: убери Android-часть, настрой модуль detekt-rules как библиотеку на Kotlin/JVM, добавь ruleset с простым правилом, используй актуальный API Detekt

</aside>