Статический анализ 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 "11.0.0"
}
Внутри конфигурации необходимо указать версию инструмента. Для этого в файле 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.21.0"
}
Далее внутри конфигурации необходимо добавить настройку для проверки кода:
detekt {
allRules = true
buildUponDefaultConfig = true
}
Запуск проверки исходного кода #
После конфигурации для проверки исходного кода можно запустить задачу detekt
: ./gradlew detekt
. Все сообщения от инструмента необходимо исправлять.
Настройка проверки внутри IDEA #
Проект detekt предоставляет возможность встроить проверку с помощью специального расширения.
Задача #
Добавьте проверку исходного кода с помощью инструментов ktlint
и detekt
в рамках исходного кода последней практической работы. Исправьте все проблемы, которые были найдены.