Налаштування 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 день. Вартість розраховується індивідуально.







