Статический анализ Kotlin-приложений #
Документация #
- Проверка форматирования кода ktlint
 - Плагин для системы сборки Gradle для запуска ktlint
 - Проект статического анализа исходного кода detekt
 - Плагин для проверки нарушений качества кода detekt
 
Статический анализ исходного кода #
Статический анализ исходного кода применяется для решения следующих задач:
- Нахождение синтаксических и лексических проблем в исходном коде. Реализуется внутри компилятора языка.
 - Обеспечение единого оформления для исходного кода.
 - Предупреждение потенциальных проблем в исходном коде приложения.
 
Изучите особенности анализа исходного кода
- Использование статического и динамического анализа для повышения качества продукции и эффективности разработки
 - Внедряйте статический анализ в процесс, а не ищите с его помощью баги
 - Статические анализаторы кода на примере ClickHouse
 
Проверка форматирования кода с помощью ktlint #
ktlint — инструмент для статического анализа форматирования исходного кода в соответствии с официальным соглашением о стилистике кода.
Для подключения к проекту необходимо:
- Добавить поддержку инструмента в систему сборки проекта Gradle.
 - Добавить настройку стиля программирования в среду сборки IDEA.
 - Использовать Gradle-задачи для проверки исходного кода на соответствие стиля.
 
Добавление поддержки в Gradle #
Инструмент ktlint может быть интегрирован разными способами, рассмотрим использование плагина Ktlint Gradle.
Необходимо добавить плагин в конфигурацию build.gradle:
plugins{
    id("org.jlleitschuh.gradle.ktlint") version "10.2.1"
    id("org.jlleitschuh.gradle.ktlint-idea") version "10.2.1"
}Внутри конфигурации необходимо указать версию инструмента. Для этого в файле gradle.properties укажите версию инструмента:
ktlintVersion=0.45.1И в build.gradle необходимо указать используемую версию инструмента:
ktlint {
    version = ktlintVersion
}Запуск проверки исходного кода #
После конфигурации можно запускать Gradle-задачу для проверки исходного кода ktlintCheck: ./gradlew ktlintCheck. Все сообщения о нарушениях форматирования необходимо исправить.
Настройка форматирования в IDEA #
После успешной конфигурации необходимо:
- Выполнить задачу 
ktlintApplyToIdea:./gradlew ktlintApplyToIdea. - Перезапустить IDEA, чтобы новые настройки применились.
 
После выполнения действий исправления будут внесены в локальный каталог .idea. Если данный каталог удалён, то задачу по настройке необходимо выполнить ещё раз.
Анализ потенциальных проблем в исходном коде #
Инструмент detekt выполняет поиск потенциальных проблем в исходном коде. Данные проблемы связаны с типичными проблемами:
- Слишком длинные методы.
 - Большая вложенность циклов и условных операторов.
 - Плохие названия переменных.
 - Добавление комментариев к исходному коду и т.д.
 
Для использования инструмента необходимо:
- Сформировать правила проверки кода.
 - Добавить конфигурацию для запуска инструмента в Gradle.
 - Использовать Gradle-задачи для проверки исходного кода.
 
По желанию можно добавить расширение для IDEA.
Формирование набора правил проверки кода #
В настоящий момент никаких отличий относительно базовой конфигурации инструмента не предполагается.
Важно: самостоятельно вносить изменения в конфигурацию инструмента запрещено. В частности запрещено подавлять сообщения от анализатора с помощью аннотаций и baseline-файла.
Добавление поддержки в Gradle #
Инструмент изначально предлагает расширение для Gradle. Для его использования необходимо добавить соответствующий плагин в build.gradle:
plugins {
    id "io.gitlab.arturbosch.detekt" version "1.19.0"
}Далее внутри конфигурации необходимо добавить настройку для проверки кода:
detekt {
    allRules = true
    buildUponDefaultConfig = true
}Запуск проверки исходного кода #
После конфигурации для проверки исходного кода можно запустить задачу detekt: ./gradlew detekt. Все сообщения от инструмента необходимо исправлять.
Настройка проверки внутри IDEA #
Проект detekt предоставляет возможность встроить проверку с помощью специального расширения.
Задача #
Добавьте проверку исходного кода с помощью инструментов ktlint и detekt в рамках исходного кода последней практической работы. Исправьте все проблемы, которые были найдены.