Налаштування Flutter Analyzer для перевірки якості коду
Flutter Analyzer — вбудований статичний аналізатор Dart/Flutter, заснований на dart analyze. Без налаштування він уже працює в IDE, але в CI його часто ігнорують або запускають без правильних флагів. Результат: код з dynamic замість типізованих змінних, неиспользовані import-и, deprecated API — усе це накопичується та мігрує в production.
analysis_options.yaml
Всі налаштування аналізатора — в analysis_options.yaml у корні проекту:
include: package:flutter_lints/flutter.yaml
analyzer:
exclude:
- "**/*.g.dart"
- "**/*.freezed.dart"
- "lib/generated/**"
errors:
invalid_annotation_target: ignore # для freezed
language:
strict-casts: true
strict-inference: true
strict-raw-types: true
linter:
rules:
# Включаємо дополнительно до flutter_lints
- always_use_package_imports
- avoid_dynamic_calls
- avoid_empty_else
- avoid_print
- avoid_relative_lib_imports
- avoid_slow_async_io
- avoid_type_to_string
- cancel_subscriptions
- close_sinks
- comment_references
- invariant_booleans
- literal_only_boolean_expressions
- no_adjacent_strings_in_list
- prefer_const_constructors
- prefer_const_declarations
- prefer_final_fields
- prefer_final_locals
- prefer_void_to_null
- unnecessary_await_in_return
- unnecessary_statements
- use_build_context_synchronously
strict-casts: true, strict-inference: true, strict-raw-types: true — три флаги строгого режиму. strict-inference особливо важливий: забороняє неявний dynamic там, де тип не удається вивести.
Запуск в CI
- name: Analyze
run: flutter analyze --fatal-infos --fatal-warnings
- name: Check formatting
run: dart format --output=none --set-exit-if-changed lib/ test/
--fatal-infos перетворює info-повідомлення на помилки. Жорстко, але ефективно: заставляє розробників не ігнорувати дрібні замічання.
dart format --set-exit-if-changed перевіряє форматування без змін файлів — якщо форматування не відповідає dart format, CI впадає.
Custom lint rules через dart_code_linter
Для більш глибокого аналізу — dart_code_linter (бувший dart_code_metrics):
# pubspec.yaml
dev_dependencies:
dart_code_linter: ^1.1.0
# analysis_options.yaml
dart_code_linter:
metrics:
cyclomatic-complexity: 20
lines-of-code: 100
number-of-parameters: 4
maximum-nesting-level: 5
metrics-exclude:
- test/**
rules:
- avoid-unnecessary-setstate
- prefer-extracting-callbacks
- avoid-returning-widgets
- check-for-equals-in-render-methods
avoid-returning-widgets та prefer-extracting-callbacks — Flutter-специфічні правила, які стандартний аналізатор не покриває, а вони напрямку впливають на rebuild-продуктивність.
Pre-commit інтеграція
# .pre-commit-config.yaml
repos:
- repo: local
hooks:
- id: flutter-analyze
name: Flutter Analyze
language: system
entry: flutter analyze
types: [dart]
pass_filenames: false
- id: dart-format
name: Dart Format
language: system
entry: dart format --set-exit-if-changed
types: [dart]
Тривалість: 1 день. Вартість розраховується індивідуально.







