Автоматизация проверки стиля кода с помощью KtLint в Android проекте

от автора

Современная разработка программного обеспечения требует не только написания функционального кода, но и обеспечения его качества, надежности и безопасности.
Для обеспечения этого во многих командах по-прежнему существует Code Review. По моему мнению в 90% случаев это абсолютно бесполезная трата времени и сил разработчиков команды. Code Review это рудимент, который изжил себя. Я не утверждаю, что Code Review должен исчезнуть — принцип и подход должны измениться.
Ручная организация Code Review ведет к деградации продуктивности и взаимоотношений внутри команды. Очень часто Code Review превращается в способ самоутверждения, эмоциональной разрядке одного из участников команды за счет других. Комментарии часто бывают противоречивыми и контр продуктивными.
Как этого избежать?
Ответ – полностью автоматизировать этот процесс.

Одним из ключевых инструментов для достижения этой цели является статистический анализ кода — метод автоматизированной проверки исходного кода без его выполнения.

Я всю свою практику участвовал в командах, где Code Review было ручным и каждый участник команды ставил approve, либо оставлял комментарий. Думаю, так происходит и сейчас во многих командах. Качество такого Review низкое и трудно быть по-настоящему объективным.

Мне повезло участвовать в большом стартапе и начать проект самостоятельно. И в моем проекте я решил покончить с Code Review в привычном понимании.

Что мне было необходимо? Нужен был инструмент, который бы приводил код к единому стилю и избавил меня и других участников команды от необходимости проверять стиль кода. Сюда входит правила расстановки новых строк, именования методов, отступы и тд. Необходимо чтоб инструмент подсвечивал места где стиль не соблюдается и исправлял автоматически такие места.

В данной статье я рассмотрю только анализ стиля Kotlin кода и его автоматическое исправления согласно выработанным правилам в проекте.
Использовать будем Kotlinter.

Как подключить плагин:

plugins {     id 'org.jmailen.kotlinter' version "5.0.2" apply false }  plugins {     //for groovy     id 'org.jmailen.kotlinter'     //for kts     id("org.jmailen.kotlinter") } 

Далее создаем .editorconfig файл на самом верхнем уровне проекта (там где лежит файл settings.gradle) в котором будем описывать правила стиля кода.
Всю документацию по написанию правил стиля можно прочитать тут (Pinterest).

.editorconfig расположение файла

.editorconfig расположение файла
root = true  [*.{kt,kts}] ktlint_code_style = android_studio  indent_size = 4 indent_style = space max_line_length = 120

Так как я являюсь Android разработчиком то по умолчанию ставлю стиль android_studio(есть опцииintellij_idea, android_studio, ktlint_official). Для меня наиболее удобеный для восприятия является android_studioстиль.
Ну и в принципе, уже на этом этапе можно и закончить.

Уже сейчас мы имеем минимальный набор правил для того чтобы привести в порядок наш проект. Давайте попробуем это сделать.

Для этого в терминале Android Studio введем команды

// для проверки кода и вывода мест которые нарушают стилистику кода ./gradlew lintKotlin // для автоматичекого исправления кода ./gradlew formatKotlin 

Такой вариант уже будет автоматически сортировать импорты, удалять неиспользуемые импорты, удалять пустые строки.

Детальная настройка

Не буду пересказывать документацию. Там все детально и с примерами описано.
Приведу лишь полный мой файл который существует сейчас в нашей команде:

root = true  [*.{kt,kts}] ktlint_code_style = android_studio  indent_size = 4 indent_style = space max_line_length = 120  ktlint_function_naming_ignore_when_annotated_with = Composable  ktlint_experimental = enabled  ktlint_chain_wrapping = disabled ktlint_import_ordering = enabled ktlint_trailing_comma_on_call_site = false ktlint_trailing_comma_on_declaration_site = false ktlint_function_signature = enabled ktlint_function_signature_body_expression_wrapping = always ktlint_spacing_around_parens = enabled ktlint_modifier_order = enabled ktlint_no_wildcard_imports = enabled ij_kotlin_line_break_after_multiline_when_entry = false ktlint_class_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 1 ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 2 ktlint_standard_function-expression-body = disabled

При возникновении спорных моментов мы не устраиваем долгих и изнурительных дебатов, а просто вносим изменения в этот файл. И эти правила распространяются на весь проект.

Добавить автоформатирование при каждом Build можно создать task в gradle

tasks.getByPath("preBuild").dependsOn("formatKotlin")

Буду рад рад, если написав эту короткую статью я помогу сэкономить силы и время командам и сместить фокус на более важные моменты требующие человеческого внимания.


ссылка на оригинал статьи https://habr.com/ru/articles/914250/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *