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