Presets
DCM includes 19 sets of predefined configurations:
- All: contains all available lint rules for Dart and Flutter.
- Recommended: contains recommended Dart and Flutter rules (with an emphasis on finding errors).
- Dart: contains all lint rules applicable to any Dart app.
- Flutter: contains all lint rules applicable to any Flutter app.
- Flame: contains lint rules for the Flame package.
- Provider: contains lint rules for the Provider package.
- Bloc: contains lint rules for the Bloc package.
- Riverpod: contains lint rules for the Riverpod package.
- Equatable: contains lint rules for the Equatable package.
- Patrol: contains lint rules for the Patrol package.
- FakeAsync: contains lint rules for the FakeAsync package.
- GetIt: contains lint rules for the GetIt package.
- FlutterHooks: contains lint rules for the FlutterHooks package.
- FirebaseAnalytics: contains lint rules for the FirebaseAnalytics package.
- GetX: contains lint rules for the GetX package.
- Intl: contains lint rules for the Intl package.
- EasyLocalization: contains lint rules for the EasyLocalization package.
- Pub: contains lint rules to check for issues in the pubspec.yaml file.
- Recommended metrics: contains recommended configured metrics.
While presets are a great way to keep track of rule list updates, upgrading to a newer version of DCM can introduce new issues if the preset has been updated.
Consider this before choosing a preset.
Built-in Presets
To simplify the tool's integration, the "recommended" preset can be enabled without installing the "dart_code_metrics_presets" package.
dart_code_metrics:
extends:
- recommended
Since this preset comes with the executable, the list of rules included into it depends on the executable version, but is expected to match the latest version of located here.
Enabling a Preset
To enable a preset:
-
Install dart_code_metrics_presets as a dev dependency:
- Flutter
- Dart
$ flutter pub add --dev dart_code_metrics_presets
$ dart pub add --dev dart_code_metrics_presets
-
For DCM configuration add the
extends
entry:analysis_options.yamldart_code_metrics:
extends:
- package:dart_code_metrics_presets/all.yaml
If you are reusing a shared configuration between multiple packages, they should all have dart_code_metrics_presets
as dev dependency.
If the preset cannot be resolved, a preset-not-found
warning will be shown.
Reconfiguring a Rule
To reconfigure a rule included into a preset:
dart_code_metrics:
extends:
- package:dart_code_metrics_presets/all.yaml
rules:
- arguments-ordering:
child-last: true
Disabling a Rule
To disable a rule set its configuration to : false
:
dart_code_metrics:
extends:
- package:dart_code_metrics_presets/all.yaml
rules:
- avoid-banned-imports: false
Defining a Custom Preset
Creating custom presets is also supported. For example,
dart_code_metrics:
extends:
- package:dart_code_metrics_presets/all.yaml
- package:dart_code_metrics_presets/teams_all.yaml
This defines a new preset that will load rules from dart_code_metrics_presets/all.yaml
and dart_code_metrics_presets/teams_all.yaml
.
To use this custom preset, add it to the extends
section of another analysis_options
file:
dart_code_metrics:
extends:
- package:my_presets/analysis_options.yaml
What Structure a Custom Preset Should Have?
The only requirement for a preset is that it should match the regular DCM configuration structure. For example,
dart_code_metrics:
rules:
- avoid-cubits
- avoid-bloc-public-methods
- avoid-passing-bloc-to-bloc
- prefer-multi-bloc-provider
- prefer-correct-bloc-provider
What Happens If a Rule Is Included Into Multiple Loaded Presets?
When configuration is loaded, the last subsequent entry overrides the previous one, meaning that if in dart_code_metrics_presets/all.yaml
there is a rule called some-rule
and in my_presets/analysis_options.yaml
the same rule is disabled via some-rule: false
, in the resulting config the rule will be disabled.
dart_code_metrics:
extends:
- package:dart_code_metrics_presets/all.yaml
- package:my_presets/analysis_options.yaml # disables 'some-rule' if listed last
Note, that the configuration in the analysis_options.yaml
file that loads the presets is the primary configuration and overrides the loaded config:
dart_code_metrics:
extends:
- package:dart_code_metrics_presets/all.yaml
- package:my_presets/analysis_options.yaml
rules:
- some-rule: true # overrides any configuration from the presets