Инструменты контроля качества кода в проектах Kotlin
Инструменты контроля качества кода помогают соблюдать стандарты программирования, заблаговременно обнаруживать ошибки, измерять покрытие тестами и поддерживать качество кода во всех проектах Kotlin. В этом руководстве показано, как интегрировать популярные инструменты, такие как ktlint, detekt, SonarQube, SonarCloud и Kover в backend-проект с помощью Maven или Gradle.
Форматирование кода с помощью ktlint
ktlint — это линтер и форматтер для Kotlin, который обеспечивает соблюдение официальных соглашений о написании кода Kotlin без дополнительной настройки.
ktlint проверяет такие правила, как отступы, пробелы вокруг операторов, порядок импортов и завершающие запятые. Если обнаружено нарушение, сборка завершается с ошибкой и сообщением с указанием файла и номера строки. Помимо обнаружения нарушений, ktlint может автоматически исправлять простые проблемы.
Чтобы интегрировать ktlint в проект:
-
Добавьте плагин в файл сборки:
<!-- pom.xml --> <plugin> <groupId>com.github.gantsign.maven</groupId> <artifactId>ktlint-maven-plugin</artifactId> <version>3.7.1</version> <executions> <execution> <id>check</id> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>// build.gradle.kts plugins { id("org.jlleitschuh.gradle.ktlint") version "12.3.0" } -
Запустите линтер, чтобы проверить стиль кода:
mvn ktlint:check
./gradlew ktlintCheck
-
(Необязательно) Чтобы настроить правила, можно также добавить файл
.editorconfigв корневой каталог проекта. Например, чтобы разрешить импорты с подстановочными знаками и отключить требование завершающих запятых:[*.{kt,kts}] ij_kotlin_imports_layout = * ktlint_standard_trailing-comma-on-call-site = disabled ktlint_standard_trailing-comma-on-declaration-site = disabledПо умолчанию ktlint следует официальным соглашениям о написании кода Kotlin. Если вы предпочитаете руководство по стилю Kotlin для Android, которое заметно отличается от соглашений Kotlin, укажите стиль кода
android_studioв файле.editorconfig:[*.{kt,kts}] ktlint_code_style = android_studio -
Чтобы автоматически исправить проблемы с форматированием, выполните команду:
mvn ktlint:format
./gradlew ktlintFormat
Дополнительную информацию о доступных функциях и правилах см. в документации ktlint.
Анализ кода с помощью detekt
detekt — это инструмент статического анализа кода Kotlin, который обнаруживает проблемы в коде, чрезмерную сложность и потенциальные ошибки.
Чтобы интегрировать detekt в проект:
-
Добавьте плагин в файл сборки:
<!-- pom.xml --> <plugin> <groupId>com.github.ozsie</groupId> <artifactId>detekt-maven-plugin</artifactId> <version>1.23.8</version> <executions> <execution> <phase>verify</phase> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>// build.gradle.kts plugins { id("io.gitlab.arturbosch.detekt") version "1.23.8" } -
Создайте стандартный файл конфигурации
detekt.yml:mvn detekt:generate-config
./gradlew detektGenerateConfig
-
Откройте файл
detekt.ymlи настройте правила в созданном файле. Например:complexity: LongMethod: threshold: 50 style: MagicNumber: active: false -
Укажите файл конфигурации в файле сборки, чтобы detekt мог применить новые правила:
<!-- pom.xml --> <plugin> <groupId>com.github.ozsie</groupId> <artifactId>detekt-maven-plugin</artifactId> <version>1.23.8</version> <configuration> <config>detekt.yml</config> <report> <report>txt:reports/detekt.txt</report> <report>xml:reports/detekt.xml</report> </report> </configuration> <executions> <execution> <phase>verify</phase> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin>// build.gradle.kts detekt { toolVersion = "1.23.8" config.setFrom(file("config/detekt/detekt.yml")) buildUponDefaultConfig = true } -
Запустите анализ:
mvn detekt:check
./gradlew detekt
detekt создает отчет со списком всех нарушений правил, их серьезностью, расположением в файле и описанием проблемы. По умолчанию Gradle сохраняет отчеты в build/reports/detekt, а Maven — в каталоге reports/detekt в корне проекта.
Дополнительную информацию см. в документации detekt для Gradle и Maven.
Качество кода с помощью SonarSource
SonarQube и SonarCloud от SonarSource обеспечивают глубокий статический анализ проектов Kotlin, включая обнаружение ошибок, поиск уязвимостей и отслеживание покрытия кода через веб-панель.
Чтобы проанализировать проект с помощью SonarQube:
-
Добавьте плагин в файл сборки:
<!-- pom.xml --> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>5.7.0.6970</version> </plugin>// build.gradle.kts plugins { id("org.sonarqube") version "6.2.0.5505" } sonar { properties { property("sonar.projectKey", "my-project") property("sonar.host.url", "http://localhost:9000") } } -
(Необязательно) Настройте свойства анализа. Например, чтобы сборка ожидала результат проверки контрольных условий качества и завершалась с ошибкой, если проверка не пройдена, добавьте свойство
sonar.qualitygate.wait:mvn verify sonar:sonar \ -Dsonar.qualitygate.wait=true \ -Dsonar.projectKey=my-project \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.token=YOUR_TOKEN
// build.gradle.kts sonar { properties { property("sonar.qualitygate.wait", "true") } } -
Запустите анализ на сервере SonarQube:
mvn verify sonar:sonar \ -Dsonar.projectKey=my-project \ -Dsonar.host.url=http://localhost:9000 \ -Dsonar.token=YOUR_TOKEN
Для SonarCloud замените URL хоста на
https://sonarcloud.ioи укажите ключ организации:mvn verify sonar:sonar \ -Dsonar.projectKey=my-project \ -Dsonar.organization=my-org \ -Dsonar.host.url=https://sonarcloud.io \ -Dsonar.token=YOUR_TOKEN
Чтобы запустить анализ, используйте задачу
sonarи укажите токен аутентификации:./gradlew sonar \ -Dsonar.token=YOUR_TOKEN
По умолчанию анализ выполняется на локальном сервере SonarQube. Чтобы использовать SonarCloud, измените блок
sonar {}в файлеbuild.gradle.kts, указавhttps://sonarcloud.io, и добавьте ключ организации:sonar { properties { property("sonar.projectKey", "example-project") property("sonar.organization", "example-org") property("sonar.host.url", "https://sonarcloud.io") } } Откройте панель SonarQube или SonarCloud, чтобы просмотреть результаты. На панели проблемы сгруппированы по типу (ошибка, уязвимость, запах кода) и серьезности.
Дополнительную информацию см. в документации SonarSource.
Покрытие кода с помощью Kover
Kover — это официальный инструмент JetBrains для измерения покрытия кода Kotlin. Он измеряет, какие строки и ветви кода покрыты тестами, и создает удобные для чтения отчеты.
В отличие от JaCoCo, Kover корректно обрабатывает специфичные для Kotlin конструкции, такие как inline-функции и классы данных, поэтому показывает точные значения покрытия без ложных отрицательных результатов, вызванных байт-кодом, сгенерированным компилятором.
Чтобы интегрировать Kover в проект:
-
Добавьте плагин в файл сборки:
<!-- pom.xml --> <plugin> <groupId>org.jetbrains.kotlinx</groupId> <artifactId>kover-maven-plugin</artifactId> <version>0.9.8</version> <executions> <execution> <id>instr</id> <goals> <goal>instrumentation</goal> </goals> </execution> <execution> <id>kover-verify</id> <goals> <goal>verify</goal> </goals> </execution> <execution> <id>kover-report-xml</id> <goals> <goal>report-xml</goal> </goals> </execution> <execution> <id>kover-report-html</id> <goals> <goal>report-html</goal> </goals> </execution> </executions> </plugin>// build.gradle.kts plugins { id("org.jetbrains.kotlinx.kover") version "0.9.8" } -
Запустите тесты, чтобы собрать данные о покрытии и создать отчет:
mvn verify
./gradlew koverVerify koverHtmlReport
Откройте HTML-отчет, созданный в каталоге
target/site/kover/html/(для Gradle —build/reports/kover/html/), чтобы просмотреть покрытие построчно.-
(Необязательно) Чтобы задать минимальный порог покрытия, при несоблюдении которого сборка завершится с ошибкой, можно добавить конфигурацию проверки покрытия в файл сборки. Например:
<!-- pom.xml --> <configuration> <!-- Create new coverage verification rule --> <rules> <rule> <bounds> <bound> <minValue>50</minValue> <coverageUnits>LINE</coverageUnits> <aggregationForGroup>COVERED_PERCENTAGE</aggregationForGroup> </bound> </bounds> </rule> </rules> </configuration>// build.gradle.kts // Add a `kover` configuration block import kotlinx.kover.gradle.plugin.dsl.* kover { reports { total { log { aggregationForGroup = AggregationType.COVERED_PERCENTAGE coverageUnits = CoverageUnit.LINE } verify { rule { minBound(50) } } } } }
Дополнительную информацию о настройке правил проверки см. в документации Kover для Maven и Gradle.
Другие инструменты
Помимо ktlint, detekt, SonarQube, SonarCloud и Kover, попробуйте другие инструменты для повышения качества кода Kotlin:
Инструмент |
Описание |
|---|---|
Движок семантического анализа кода от GitHub. Поддерживает Kotlin и интегрируется с GitHub Actions для автоматического поиска уязвимостей. |
|
Быстрый и легковесный инструмент статического анализа с поддержкой пользовательских правил. Его можно использовать для проверки соблюдения шаблонов или обнаружения антипаттернов в коде Kotlin. |
|
Анализатор исходного кода с поддержкой Kotlin (с помощью средства обнаружения дублирования кода CPD), выявляющий распространенные ошибки программирования и повторяющийся код. |
Что дальше
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/jvm-code-analysis.html