Dart Code Metrics

Dart Code Metrics is a static analysis tool that helps you analyse and improve your code quality.

Quick start

Analyzer plugin

A plugin for the Dart analyzer package providing additional rules from Dart Code Metrics. All issues produced by rules or anti-patterns will be highlighted in IDE.

  1. Install package as a dev dependency

    $ dart pub add --dev dart_code_metrics
    # or for a Flutter package
    $ flutter pub add --dev dart_code_metrics


    add it manually to pubspec.yaml

      dart_code_metrics: ^4.2.0-dev.1

    and then run

    $ dart pub get
    # or for a Flutter package
    $ flutter pub get
  2. Add configuration to analysis_options.yaml

        - dart_code_metrics
        - long-method
        - long-parameter-list
        cyclomatic-complexity: 20
        maximum-nesting-level: 5
        number-of-parameters: 4
        source-lines-of-code: 50
        - test/**
        - newline-before-return
        - no-boolean-literal-compare
        - no-empty-block
        - prefer-trailing-comma
        - prefer-conditional-expressions
        - no-equal-then-else
  3. Reload IDE to allow the analyzer to discover the plugin


The package can be used as a command-line tool.
It will produce a result in one of the supported formats:

  • Console
  • GitHub
  • Codeclimate
  • HTML
  • JSON


Install the package as listed in the Analyzer plugin usage example.

If you want the command-line tool to check rules, you should configure rules entry in the analysis_options.yaml first.

dart pub run dart_code_metrics:metrics lib

# or for a Flutter package
flutter pub run dart_code_metrics:metrics lib

Multi-package repositories usage

If you use Melos, you can add custom command to melos.yaml.

  run: |
    melos exec -c 1 --ignore="*example*" -- \
      flutter pub run dart_code_metrics:metrics lib
  description: |
    Run `dart_code_metrics` in all packages.
     - Note: you can also rely on your IDEs Dart Analysis / Issues window.


Usage: metrics [arguments...] <directories>

-h, --help                                        Print this usage information.

-r, --reporter=<console>                          The format of the output of the analysis
                                                  [console (default), console-verbose, codeclimate, github, gitlab, html, json]
-o, --output-directory=<OUTPUT>                   Write HTML output to OUTPUT
                                                  (defaults to "metrics")

    --cyclomatic-complexity=<20>                  Cyclomatic Complexity threshold
    --lines-of-code=<100>                         Lines of Code threshold
    --maximum-nesting-level=<5>                   Maximum Nesting Level threshold
    --number-of-methods=<10>                      Number of Methods threshold
    --number-of-parameters=<4>                    Number of Parameters threshold
    --source-lines-of-code=<50>                   Source lines of Code threshold
    --weight-of-class=<0.33>                      Weight Of a Class threshold

    --root-folder=<./>                            Root folder
                                                  (defaults to current directory)
    --exclude=<{/**.g.dart,/**.template.dart}>    File paths in Glob syntax to be exclude
                                                  (defaults to "{/**.g.dart,/**.template.dart}")

    --set-exit-on-violation-level=<warning>       Set exit code 2 if code violations same or higher level than selected are detected
                                                  [noted, warning, alarm]