| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'package:analyzer/error/error.dart'; | |
| import 'package:analyzer/source/error_processor.dart'; | |
| import 'package:analyzer/src/error/codes.dart'; | |
| import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult; | |
| import 'package:analyzer_cli/src/options.dart'; | |
| /// Compute the severity of the error; however: | |
| /// - if [options.enableTypeChecks] is false, then de-escalate checked-mode | |
| /// compile time errors to a severity of [ErrorSeverity.INFO]. | |
| /// - if [options.lintsAreFatal] is true, escalate lints to errors. | |
| ErrorSeverity computeSeverity( | |
| AnalysisError error, | |
| CommandLineOptions commandLineOptions, | |
| AnalysisOptions analysisOptions, | |
| ) { | |
| if (analysisOptions != null) { | |
| ErrorProcessor processor = | |
| ErrorProcessor.getProcessor(analysisOptions, error); | |
| // If there is a processor for this error, defer to it. | |
| if (processor != null) { | |
| return processor.severity; | |
| } | |
| } | |
| if (!commandLineOptions.enableTypeChecks && | |
| error.errorCode.type == ErrorType.CHECKED_MODE_COMPILE_TIME_ERROR) { | |
| return ErrorSeverity.INFO; | |
| } else if (commandLineOptions.lintsAreFatal && error.errorCode is LintCode) { | |
| return ErrorSeverity.ERROR; | |
| } | |
| return error.errorCode.errorSeverity; | |
| } | |
| /// Check various configuration options to get a desired severity for this | |
| /// [error] (or `null` if it's to be suppressed). | |
| ErrorSeverity determineProcessedSeverity(AnalysisError error, | |
| CommandLineOptions commandLineOptions, AnalysisOptions analysisOptions) { | |
| ErrorSeverity severity = | |
| computeSeverity(error, commandLineOptions, analysisOptions); | |
| // Skip TODOs categorically unless escalated to ERROR or HINT (#26215). | |
| if (error.errorCode.type == ErrorType.TODO && | |
| severity == ErrorSeverity.INFO) { | |
| return null; | |
| } | |
| // TODO(devoncarew): We should not filter hints here. | |
| // If not overridden, some "natural" severities get globally filtered. | |
| // Check for global hint filtering. | |
| if (severity == ErrorSeverity.INFO && commandLineOptions.disableHints) { | |
| return null; | |
| } | |
| return severity; | |
| } |