Анализ кода в Flutter-приложениях и настройка сборочной линии Gitlab CI для анализа

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Когда изменения, касающиеся одной задачи, превышают 7+-2 файлов, становится сложно контролировать качество кода. Тогда на помощь приходят статические анализаторы кода. В сообществе dart-разработчиков популярен статический анализатор dart_code_metrics. В рамках этого мануала вы узнаете, что он из себя представляет и как его настроить в проекте и внедрить в gitlab-ci для автоматического запуска проверок, например, перед code review или просто перед применением изменений в основные ветки.

Краткий обзор анализатора

Анализатор dart_code_metrics позволяет снимать такие метрики кода как: цикломатическая сложность, метрики холстеда, количество строк кода, индекс поддерживаемости и другое. В целом, эти метрики позволят вам достаточно точно сказать, в каком состоянии находится ваш проект и помогут скорректировать сроки реализации какой-либо фичи.

Помимо метрик кода dart_code_metrics умеет создавать правила для написания кода. Например, dart_code_metrics позволяет предотвратить утечки памяти:

Помимо этого, правила помогут сделать проект более безопасным в отношении null safety и предотвратить непредвиденные ошибки:

В dart_code_metrics великое множество разных правил, с которыми вы можете ознакомиться в их документации.

Настройка метрик кода и правил осуществляется в файле analysis_options.yaml. Пример файла конфигурации для dart_code_metrics:

Листинг 1

analyzer:
  plugins:
    - dart_code_metrics

dart_code_metrics:
  metrics-exclude:
    - test/**
  metrics:
    cyclomatic-complexity: 20
    number-of-parameters: 4
    maximum-nesting-level: 5
  rules-exclude:
    - ./**/*.g.dart
  rules:
    - avoid-double-slash-imports
    - avoid-duplicate-exports
    - avoid-dynamic
    - avoid-nested-conditional-expressions

Таким образом вы можете добавлять/изменять правила и метрики.

Настройка dart_code_metrics в проекте

Для начала необходимо добавить зависимость dart_code_metrics в проект:

Листинг 2

flutter pub add --dev dart_code_metrics
flutter pub get

Затем необходимо настроить анализатор в файле analysis_options.yaml, находящемся в корне проекта. Сейчас я использую следующую конфигурацию:

Листинг 3

include: package:flutter_lints/flutter.yaml

linter:
  rules:

analyzer:
  plugins:
    - dart_code_metrics

dart_code_metrics:
  rules-exclude:
    - ./**/*.g.dart
  rules:
    - avoid-double-slash-imports
    - avoid-duplicate-exports
    - avoid-dynamic
    - avoid-nested-conditional-expressions
    - avoid-non-null-assertion
    - avoid-redundant-async
    - avoid-unnecessary-conditionals
    - avoid-unnecessary-type-assertions
    - avoid-unnecessary-type-casts
    - avoid-unrelated-type-assertions
    - list-all-equatable-fields
    - no-boolean-literal-compare
    - prefer-enums-by-name
    - prefer-first
    - prefer-last
    - prefer-immediate-return
    - prefer-match-file-name
    - prefer-moving-to-variable
    - avoid-cascade-after-if-null
    - binary-expression-operand-order
    - double-literal-format
    - no-boolean-literal-compare
    - no-empty-block
    - no-equal-then-else
    - no-object-declaration
    - prefer-conditional-expressions
    - prefer-trailing-comma
    - always-remove-listener
    - avoid-returning-widgets
    - avoid-shrink-wrap-in-lists
    - prefer-correct-edge-insets-constructor

После того, как вы настроили анализатор, перезагрузите IDE и сможете наблюдать новые подсказки, замечания. Если у вас ничего не появилось, возможно вы совершили ошибку при изменении файла analysis_options.yaml. Также убедитесь, что вы не забыли включить в список плагинов анализатора dart_code_metrics. Возможно проблема может быть связана с самой IDE, например, для Android Studio помогает изменить какой-нибудь файл и подождать или перезагрузить.

Настройка gitlab-ci для анализа в репозитории

Вы можете запускать анализатор кода в gitlab. Это сильно экономит время аудитора кода, ведь программист перед тем, как отправить код на code review будет сразу видеть свои ошибки, даже если изменения содержат большое количество кода.

Замечания по коду вы сможете увидеть в запросе на слияние, выглядит это так:

Для того, чтобы запускать анализатор, нужен runner. Для этого необходим компьютер с доступом в сеть, на котором и будет выполняться анализ. Gitlab посылает задачу для runner’а и он выполняется на компьютере.

Вы можете посмотреть список runner’ов для вашего проекта на странице репозиторий > настройки > CI/CD.

На странице https://docs.gitlab.com/runner/install/ вы можете посмотреть, как установить runner на компьютер. На странице с runner’ами вы также можете скачать необходимые файлы для установки и ключи.

После настройки runner’а вы можете перейти к настройке pipeline’ов. Pipeline представляет собой набор этапов и описание действий, которые необходимо произвести в автоматическом режиме. Эти же действия будут выполнены в runner’е.

Для настройки pipeline’а в корне проекта необходимо создать файл .gitlab-ci.yml. Пример файла конфигурации, вы можете использовать его у себя в проекте:

Листинг 4

stages:
  - code_quality
  …
code_quality:
  stage: code_quality
  image: "cirrusci/flutter:3.3.0"
  before_script:
    - flutter pub get
    - flutter pub global activate dart_code_metrics
    - export PATH="$PATH:$HOME/.pub-cache/bin"
  tags:
    - flutter
  script:
    - flutter pub run dart_code_metrics:metrics analyze lib -r gitlab --no-verbose --no-congratulate > gl-code-quality-report.json || exit_code=$?
  artifacts:
    reports:
      codequality: gl-code-quality-report.json
...

Обратите внимание, что этапу я назначил тег flutter. Такой же тег должен быть и у runner’а, который вы установили. Если у вас не запускается pipeline, возможно дело как раз в этом.

Если вы все сделали правильно, в запросе на слиянии у вас появится pipeline:

Соответственно, после выполнения у вас появятся результаты анализа. Перед этим страницу следует перезагрузить.

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

На этом все! Have a good day!

Специально для habr.com - Алексей Губин | AppFox.ru

Источник: https://habr.com/ru/post/717708/


Интересные статьи

Интересные статьи

Проанализируйте конкурентов, нишу и спрос на товар еще до того, как войти в этот бизнес. Как это сделать? Подробнее в этой статье.Меня зовут Вик Довнар, я пишу про e-commerce бизнес и еженедельно разб...
Всем привет!Мы продолжаем развитие нашей системы анализа естественного языка и, завершив промежуточный этап работы над коммерческим сценарием выявления поручений из документов, решили выложить в отрыт...
Мне очень нравится паттерн Fluent interface, за то, что он делает сложный и длинный код максимально читабельным. В статье хочу показать пример реализации этого паттерна при работе с ftp. ...
Если вы полагаете, что фундаментальные исследования всегда скучны и с трудом находят прикладное значение, то прочитайте эту статью. Старший научный сотрудник нашей лабора...
Представьте себе книгу, в которой нет деления на главы, а все идет без логической и смысловой разбивки, книгу, где нет абзацев, нет точек и запятых, книгу, где в первой строке рассказывается про ...