Index: pkg/analyzer_cli/lib/src/error_formatter.dart |
diff --git a/pkg/analyzer_cli/lib/src/error_formatter.dart b/pkg/analyzer_cli/lib/src/error_formatter.dart |
index d6bec887fceac077fc55337eb2072dae4290c0d7..0154d739978d78ad0672cfdbb29af0c6c81b6ca8 100644 |
--- a/pkg/analyzer_cli/lib/src/error_formatter.dart |
+++ b/pkg/analyzer_cli/lib/src/error_formatter.dart |
@@ -13,98 +13,19 @@ import 'package:analyzer_cli/src/options.dart'; |
ProcessedSeverity _identity(AnalysisError error) => |
new ProcessedSeverity(error.errorCode.errorSeverity); |
-String _pluralize(String word, int count) => count == 1 ? word : word + "s"; |
- |
/// Returns desired severity for the given [error] (or `null` if it's to be |
/// suppressed). |
typedef ProcessedSeverity _SeverityProcessor(AnalysisError error); |
-/// Analysis statistics counter. |
-class AnalysisStats { |
- int errorCount; |
- int hintCount; |
- int lintCount; |
- int warnCount; |
- |
- AnalysisStats() { |
- init(); |
- } |
- |
- /// (Re)set initial values. |
- void init() { |
- errorCount = 0; |
- hintCount = 0; |
- lintCount = 0; |
- warnCount = 0; |
- } |
- |
- /// Print statistics to [out]. |
- void print(StringSink out) { |
- var hasErrors = errorCount != 0; |
- var hasWarns = warnCount != 0; |
- var hasHints = hintCount != 0; |
- var hasLints = lintCount != 0; |
- bool hasContent = false; |
- if (hasErrors) { |
- out.write(errorCount); |
- out.write(' '); |
- out.write(_pluralize("error", errorCount)); |
- hasContent = true; |
- } |
- if (hasWarns) { |
- if (hasContent) { |
- if (!hasHints && !hasLints) { |
- out.write(' and '); |
- } else { |
- out.write(", "); |
- } |
- } |
- out.write(warnCount); |
- out.write(' '); |
- out.write(_pluralize("warning", warnCount)); |
- hasContent = true; |
- } |
- if (hasHints) { |
- if (hasContent) { |
- if (!hasLints) { |
- out.write(' and '); |
- } else { |
- out.write(", "); |
- } |
- } |
- out.write(hintCount); |
- out.write(' '); |
- out.write(_pluralize("hint", hintCount)); |
- hasContent = true; |
- } |
- if (hasLints) { |
- if (hasContent) { |
- out.write(" and "); |
- } |
- out.write(lintCount); |
- out.write(' '); |
- out.write(_pluralize("lint", lintCount)); |
- hasContent = true; |
- } |
- if (hasContent) { |
- out.writeln(" found."); |
- } else { |
- out.writeln("No issues found"); |
- } |
- } |
-} |
- |
/// Helper for formatting [AnalysisError]s. |
/// The two format options are a user consumable format and a machine consumable |
/// format. |
class ErrorFormatter { |
final StringSink out; |
final CommandLineOptions options; |
- final AnalysisStats stats; |
final _SeverityProcessor processSeverity; |
- ErrorFormatter(this.out, this.options, this.stats, |
- [this.processSeverity = _identity]); |
+ ErrorFormatter(this.out, this.options, [this.processSeverity = _identity]); |
/// Compute the severity for this [error] or `null` if this error should be |
/// filtered. |
@@ -191,26 +112,84 @@ class ErrorFormatter { |
return error1.offset - error2.offset; |
}); |
// Format errors. |
+ int errorCount = 0; |
+ int warnCount = 0; |
+ int hintCount = 0; |
+ int lintCount = 0; |
for (AnalysisError error in errors) { |
ProcessedSeverity processedSeverity = processSeverity(error); |
ErrorSeverity severity = processedSeverity.severity; |
if (severity == ErrorSeverity.ERROR) { |
- stats.errorCount++; |
+ errorCount++; |
} else if (severity == ErrorSeverity.WARNING) { |
/// Only treat a warning as an error if it's not been set by a |
/// proccesser. |
if (!processedSeverity.overridden && options.warningsAreFatal) { |
- stats.errorCount++; |
+ errorCount++; |
} else { |
- stats.warnCount++; |
+ warnCount++; |
} |
} else if (error.errorCode.type == ErrorType.HINT) { |
- stats.hintCount++; |
+ hintCount++; |
} else if (error.errorCode.type == ErrorType.LINT) { |
- stats.lintCount++; |
+ lintCount++; |
} |
formatError(errorToLine, error); |
} |
+ // Print statistics. |
+ if (!options.machineFormat) { |
+ var hasErrors = errorCount != 0; |
+ var hasWarns = warnCount != 0; |
+ var hasHints = hintCount != 0; |
+ var hasLints = lintCount != 0; |
+ bool hasContent = false; |
+ if (hasErrors) { |
+ out.write(errorCount); |
+ out.write(' '); |
+ out.write(pluralize("error", errorCount)); |
+ hasContent = true; |
+ } |
+ if (hasWarns) { |
+ if (hasContent) { |
+ if (!hasHints && !hasLints) { |
+ out.write(' and '); |
+ } else { |
+ out.write(", "); |
+ } |
+ } |
+ out.write(warnCount); |
+ out.write(' '); |
+ out.write(pluralize("warning", warnCount)); |
+ hasContent = true; |
+ } |
+ if (hasHints) { |
+ if (hasContent) { |
+ if (!hasLints) { |
+ out.write(' and '); |
+ } else { |
+ out.write(", "); |
+ } |
+ } |
+ out.write(hintCount); |
+ out.write(' '); |
+ out.write(pluralize("hint", hintCount)); |
+ hasContent = true; |
+ } |
+ if (hasLints) { |
+ if (hasContent) { |
+ out.write(" and "); |
+ } |
+ out.write(lintCount); |
+ out.write(' '); |
+ out.write(pluralize("lint", lintCount)); |
+ hasContent = true; |
+ } |
+ if (hasContent) { |
+ out.writeln(" found."); |
+ } else { |
+ out.writeln("No issues found"); |
+ } |
+ } |
} |
static String escapePipe(String input) { |
@@ -223,9 +202,17 @@ class ErrorFormatter { |
} |
return result.toString(); |
} |
+ |
+ static String pluralize(String word, int count) { |
+ if (count == 1) { |
+ return word; |
+ } else { |
+ return word + "s"; |
+ } |
+ } |
} |
-/// A severity with awareness of whether it was overridden by a processor. |
+/// A severity with awareness of whether it was overriden by a processor. |
class ProcessedSeverity { |
ErrorSeverity severity; |
bool overridden; |