Настройка Detekt для проверки стиля Kotlin-кода
Detekt — статический анализатор Kotlin-кода. Находит code smells, проверяет сложность функций, обнаруживает потенциально небезопасный код (небезопасные !!, магические числа, пустые catch-блоки). Для Android-проектов работает вместе с Android Lint — они дополняют друг друга: Lint знает про Android-специфику (неправильное использование Context, memory leaks), Detekt — про Kotlin-идиомы.
Подключение к Gradle
// build.gradle.kts (project level)
plugins {
id("io.gitlab.arturbosch.detekt") version "1.23.7"
}
detekt {
config.setFrom(files("$rootDir/detekt.yml"))
buildUponDefaultConfig = true
allRules = false
baseline = file("$rootDir/detekt-baseline.xml")
}
dependencies {
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.7")
detektPlugins("com.twitter.compose.rules:detekt:0.0.26") // Compose-specific rules
}
detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting") добавляет форматирование через ktlint под капотом.
Конфигурация detekt.yml
build:
maxIssues: 0
excludeCorrectable: false
complexity:
LongMethod:
threshold: 50
CyclomaticComplexMethod:
threshold: 15
LongParameterList:
threshold: 6
ignoreDefaultParameters: true
TooManyFunctions:
thresholdInFiles: 20
thresholdInClasses: 15
style:
MagicNumber:
ignoreNumbers:
- '-1'
- '0'
- '1'
- '2'
ignoreEnums: true
ignoreConstantDeclaration: true
UnusedPrivateMember:
active: true
potential-bugs:
UnsafeCallOnNullableType:
active: true
UnreachableCode:
active: true
exceptions:
SwallowedException:
active: true
TooGenericExceptionCaught:
active: true
exceptionNames:
- Exception
- Throwable
Baseline
На существующем проекте Detekt найдёт сотни нарушений. Запускать с нуля с maxIssues: 0 нереально. Baseline фиксирует текущее состояние:
./gradlew detektBaseline
Создаётся detekt-baseline.xml со всеми существующими нарушениями. Detekt будет жаловаться только на новые нарушения в новом коде. Baseline коммитится в репозиторий, постепенно очищается по мере рефакторинга.
Запуск в CI
- name: Run Detekt
run: ./gradlew detekt
- name: Upload Detekt Report
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: build/reports/detekt/detekt.sarif
SARIF-формат отображает нарушения прямо в GitHub Code Review как аннотации. if: always() — загружаем отчёт даже если detekt упал, чтобы видеть нарушения в PR.
Compose-специфичные правила
Для проектов на Jetpack Compose добавляем twitter-compose-rules:
detektPlugins("com.twitter.compose.rules:detekt:0.0.26")
Правила проверяют: @Composable функции без @Preview, нестабильные параметры в @Composable, использование remember без ключей там, где нужны ключи. Это реальные проблемы, которые Android Lint не покрывает.
Срок: 1 день. Стоимость рассчитывается индивидуально.







