@@ -5,7 +5,8 @@ import 'package:collection/collection.dart';
55import '../../analyzers/lint_analyzer/lint_analyzer.dart' ;
66import '../../analyzers/lint_analyzer/metrics/metrics_factory.dart' ;
77import '../../analyzers/lint_analyzer/metrics/models/metric_value_level.dart' ;
8- import '../../analyzers/lint_analyzer/reporters/utility_selector.dart' ;
8+ import '../../analyzers/lint_analyzer/models/severity.dart' ;
9+ import '../../analyzers/lint_analyzer/utils/report_utils.dart' ;
910import '../../config_builder/config_builder.dart' ;
1011import '../../config_builder/models/deprecated_option.dart' ;
1112import '../models/flag_names.dart' ;
@@ -39,13 +40,6 @@ class AnalyzeCommand extends BaseCommand {
3940 @override
4041 Future <void > runCommand () async {
4142 final parsedArgs = ParsedArguments (
42- rootFolder: argResults[FlagNames .rootFolder] as String ,
43- reporterName: argResults[FlagNames .reporter] as String ,
44- reportFolder: argResults[FlagNames .reportFolder] as String ,
45- maximumAllowedLevel: MetricValueLevel .fromString (
46- argResults[FlagNames .setExitOnViolationLevel] as String ? ,
47- ),
48- folders: argResults.rest,
4943 excludePath: argResults[FlagNames .exclude] as String ,
5044 metricsConfig: {
5145 for (final metric in getMetrics (config: {}))
@@ -57,24 +51,41 @@ class AnalyzeCommand extends BaseCommand {
5751 final config = ConfigBuilder .getLintConfigFromArgs (parsedArgs);
5852
5953 final lintAnalyserResult = await _analyzer.runCliAnalysis (
60- parsedArgs.folders ,
61- parsedArgs .rootFolder,
54+ argResults.rest ,
55+ argResults[ FlagNames .rootFolder] as String ,
6256 config,
6357 );
6458
6559 await _analyzer
6660 .getReporter (
67- name: parsedArgs.reporterName ,
61+ name: argResults[ FlagNames .reporter] as String ,
6862 output: stdout,
69- reportFolder: parsedArgs .reportFolder,
63+ reportFolder: argResults[ FlagNames .reportFolder] as String ,
7064 )
7165 ? .report (lintAnalyserResult);
7266
73- if (parsedArgs.maximumAllowedLevel != null &&
74- UtilitySelector .maxViolationLevel (lintAnalyserResult) >=
75- parsedArgs.maximumAllowedLevel! ) {
67+ if (hasIssueWithSevetiry (lintAnalyserResult, Severity .error)) {
68+ exit (3 );
69+ } else if ((argResults[FlagNames .fatalWarnings] as bool ) &&
70+ hasIssueWithSevetiry (lintAnalyserResult, Severity .warning)) {
7671 exit (2 );
7772 }
73+
74+ final maximumAllowedLevel = MetricValueLevel .fromString (
75+ argResults[FlagNames .setExitOnViolationLevel] as String ? ,
76+ );
77+
78+ if (maximumAllowedLevel != null &&
79+ maxMetricViolationLevel (lintAnalyserResult) >= maximumAllowedLevel) {
80+ exit (2 );
81+ }
82+
83+ if (((argResults[FlagNames .fatalPerformance] as bool ) &&
84+ hasIssueWithSevetiry (lintAnalyserResult, Severity .performance)) ||
85+ ((argResults[FlagNames .fatalStyle] as bool ) &&
86+ hasIssueWithSevetiry (lintAnalyserResult, Severity .style))) {
87+ exit (1 );
88+ }
7889 }
7990
8091 void _addFlags () {
@@ -147,6 +158,20 @@ class AnalyzeCommand extends BaseCommand {
147158 valueHelp: 'warning' ,
148159 help:
149160 'Set exit code 2 if code violations same or higher level than selected are detected.' ,
161+ )
162+ ..addFlag (
163+ FlagNames .fatalStyle,
164+ help: 'Treat style level issues as fatal.' ,
165+ )
166+ ..addFlag (
167+ FlagNames .fatalPerformance,
168+ help: 'Treat performance level issues as fatal.' ,
169+ )
170+ ..addFlag (
171+ FlagNames .fatalWarnings,
172+ help: 'Treat warning level issues as fatal.' ,
173+ // TODO(dkrutrkikh): activate on next major version
174+ // defaultsTo: true,
150175 );
151176 }
152177}
0 commit comments