A plugin to enable analysis of Dart and Flutter projects into SonarQube.
Feature | Supported |
---|---|
Size | YES |
Issues | YES (dartanalyzer rules) |
Tests | YES |
Coverage | YES |
Complexity | YES |
Syntax | YES |
The plugin is compatible with sonarQube 7.9+.
Checkout the Releases page.
Changelog is available here.
Install Flutter as explained on the official documentation page.
Flutter Installation instructions
Dart is downloaded by the Flutter SDK in $FLUTTER_HOME/bin/cache/dart-sdk, however command lines are not on the path by default (dart must be on the path).
It is recommended to install Dart SDK separately as explained here : Install the Dart SDK for more reliability in a CI/CD environment.
Install sonar-scanner as explained in the official documentation.
- Download the plugin binary into the $SONARQUBE_HOME/extensions/plugins directory.
- Restart the server.
Create a sonar-project.properties file at the root with this content :
# Project identification
sonar.projectKey=flutter_rocks
sonar.projectName=Flutter Rocks
sonar.projectVersion=1.0
# Source code location.
# Path is relative to the sonar-project.properties file. Defaults to .
# Use commas to specify more than one file/folder.
# It is good practice to add pubspec.yaml to the sources as the analyzer
# may produce warnings for this file as well.
sonar.sources=lib,pubspec.yaml
sonar.tests=test
# Encoding of the source code. Default is default system encoding.
sonar.sourceEncoding=UTF-8
# Analyzer mode
# Can be:
# - DETECT (attempt to detect automatically) - default
# - MANUAL (an existing report needs to be provided)
# - FLUTTER (flutter analyze)
# - DART (dart analyze)
# - DARTANALYZER (dartanalyzer)
# sonar.dart.analyzer.mode=
# Allows reuse of an existing analyzer report when mode is MANUAL
# sonar.dart.analyzer.report.path=
# Analyzer report output mode
# Can be:
# - DETECT (attempt to detect automatically, requires Dart SDK on the PATH) - default
# - MACHINE (a new machine readable output that is available for Dart 2.12+)
# - LEGACY (attempts to parse human readable output from dart/flutter) - default
# sonar.dart.analyzer.report.mode=
For a complete list of available options, please refer to the SonarQube documentation.
The plugin uses its own analysis options file.
If analysis_options.yaml
file already exists under the project root, it will be saved during the analysis and then restored to its initial state.
To disable this behavior and use the existinganalysis_options.yaml
file instead, add the following line to sonar-project.properties
file :
# Use existing options to perform dartanalyzer analysis
sonar.dart.analyzer.options.override=true
It is possible to analyze a project with multiple modules. For example a Dart generator library with an example.
sonar.projectKey=mylib
sonar.sourceEncoding=UTF-8
sonar.modules=mylib,mylib_generator,example
# mylib
mylib.sonar.sources=lib,pubspec.yaml
mylib.sonar.dart.analyzer.mode=MANUAL
mylib.sonar.dart.analyzer.report.mode=LEGACY
mylib.sonar.dart.analyzer.report.path=build/reports/analysis-results.txt
# mylib_generator
mylib_generator.sonar.sources=lib,pubspec.yaml
mylib_generator.sonar.dart.analyzer.options.override=false
mylib_generator.sonar.dart.analyzer.mode=MANUAL
mylib_generator.sonar.dart.analyzer.report.mode=MACHINE
mylib_generator.sonar.dart.analyzer.report.path=build/reports/analysis-results.txt
# example
example.sonar.sources=lib,pubspec.yaml
example.sonar.tests=test
example.sonar.exclusions=**/*/*.g.dart
example.sonar.dart.analyzer.options.override=false
example.sonar.dart.analyzer.mode=MANUAL
example.sonar.dart.analyzer.report.mode=LEGACY
example.sonar.dart.analyzer.report.path=build/reports/analysis-results.txt
Use the following commands from the root folder to start an analysis:
# Download dependencies
flutter pub get
# Run tests with User feedback (in case some test are failing)
flutter test
# Run tests without user feedback regeneration tests.output and coverage/lcov.info
flutter test --machine --coverage > tests.output
# Run the analysis and publish to the SonarQube server
sonar-scanner
Dart/Flutter support the use of a dart_test.yaml
file to configure test behavior.
This file can be used to configure the test output format and location. More information can be found here.
file_reporters:
json: build/reports/test-results.json
With this, it is no longer use the --machine
switch or redirect the output.
It is currently not possible to configure the coverage out in this file.
You may follow and upvote these related issue if interested:
- Configuration option - dart-lang/test#1361
- Dart coverage support - dart-lang/test#1265
All options are configurable in the SonarQube UI, via sonar-project.properties
or -D
parameters.
Name | Options | Default | Description |
---|---|---|---|
sonar.dart.analyzer.mode |
DETECT|DART|FLUTTER|MANUAL|DARTANALYZER |
DETECT |
By default the plugin attempts to detect a fitting analyzer (flutter analyze or dart analyze ) by parsing the environment from pubspec.yaml . This can be set to MANUAL to provide and existing report file. For compatibility with older Dart versions, this can be set to DARTANALYZER . |
sonar.dart.analyzer.options.override |
true|false |
true |
By default any local analysis_options.yaml will be replaced for the analysis. This can be prevented by setting this to false . |
sonar.dart.analyzer.report.mode |
DETECT|MACHINE|LEGACY |
DETECT |
The new machine readable output can be automatically detected if Dart SDK is available on the $PATH. |
sonar.dart.analyzer.report.path |
A file path | - | This is required if the analyzer mode is set to MANUAL . |
sonar.flutter.tests.reportPath |
Comma separated list of file paths (wildcard not supported) | tests.output |
The path to the test report JSON file. |
sonar.flutter.coverage.reportPath |
A file path | coverage/lcov.info |
The path to the test coverage file in LCOV format. |
Any help is welcome, and PRs will be greatly appreciated!
Please read CONTRIBUTING for more information.
SonarQube Plugin for Flutter / Dart is released under the GNU LGPL v3 license. See the LICENSE file for more information.