Начиная писать этот пост, я решил посмотреть, а писал ли я про статический анализ кода? Оказалось что ни одного развёрнутого поста про это у меня нет. Видимо я подразумеваю что это неотъемлемая часть разработки. Однакого мой опыт подсказывает, что то, что является “очевидным” и “неотъемлемым” для меня, наверняка будет чем-то новым для кого-то. Это вдвойне забавно, потому что я много выступал на эту тему (например, на Яндекс.Субботнике). В общем обещаю в ближайшее время посвятить отдельный пост статическому анализу, а пока - практическое руководство по его настройке для связки maven + kotlin. Тут же подумал, что котлин тоже достоин отдельной статьи (или даже серии статей), но обо всём по порядку.
Добавляем плагин
Инструмент, который я выбрал для статического анализа называется detekt.
Автор почему-то решил, что maven-плагин ему не нужен, однако есть “неофициальная” версия -
detekt-maven-plugin,
на которую сам автор и ссылается в документации. Добавь плагин в секцию build -> plugins
:
Обрати внимание на модуль detekt-formatting
в зависимостях плагина. Без него не будут работать проверки, связанные
с “code style”. Я был весьма удивлён, когда это обнаружил - detekt
просто игнорирует правила без этой
зависимости. Сам модуль - обёртка над другим инструментом - ktlint.
В секции executions
мы говорим плагину чтобы проверка выполнялась во время вызова maven-команды verify
(можно
заменить на test
или что ты там вызываешь в своих билдах).
В configuration
- путь к файлу с найстройками плагина.
Настраиваем плагин
Чтобы сгенерировать файл конфигурации с настройками по-умолчанию, достаточно выполнить mvn detekt:generate-config
.
Полученный файл default-detekt-config.yml
положи по пути, который указал в конфигурации.
В дефолтном конфиге почему-то часть правил отключена для тестов (секция test-pattern
). Я рекомендую не делать этого и
относиться к коду тестов так же строго, как и к продакшн коду.
Ещё один интересный момент - большинство правил в секции formatting
имеют опцию autoCorrect: true
-
плагин автоматически исправит эти проблемы. Спасибо разработчикам ktlint, которые “принесли” эту фичу из
инструментов экосистемы JavaScript и Go =).
У плагина есть встроенный настраиваемый порог допустимых ошибок, поэтому можно обойтись без внешних тулов вроде Sonar’a.
comments powered by Disqus