UNPKG

1.63 kBJavaScriptView Raw
1"use strict";
2
3const _ = require("lodash");
4const chalk = require("chalk");
5const stringFormatter = require("./stringFormatter");
6
7module.exports = function(results) {
8 let output = stringFormatter(results);
9
10 if (output === "") {
11 output = "\n";
12 }
13
14 const sourceWord = results.length > 1 ? "sources" : "source";
15 const ignoredCount = results.filter(result => result.ignored).length;
16 const checkedDisplay = ignoredCount
17 ? `${results.length - ignoredCount} of ${results.length}`
18 : results.length;
19
20 output += chalk.underline(`${checkedDisplay} ${sourceWord} checked\n`);
21 results.forEach(result => {
22 let formatting = "green";
23
24 if (result.errored) {
25 formatting = "red";
26 } else if (result.warnings.length) {
27 formatting = "yellow";
28 } else if (result.ignored) {
29 formatting = "dim";
30 }
31
32 let sourceText = `${result.source}`;
33
34 if (result.ignored) {
35 sourceText += " (ignored)";
36 }
37
38 output += _.get(chalk, formatting)(` ${sourceText}\n`);
39 });
40
41 const warnings = _.flatten(results.map(r => r.warnings));
42 const warningsBySeverity = _.groupBy(warnings, "severity");
43 const problemWord = warnings.length === 1 ? "problem" : "problems";
44
45 output += chalk.underline(`\n${warnings.length} ${problemWord} found\n`);
46
47 _.forOwn(warningsBySeverity, (warningList, severityLevel) => {
48 const warningsByRule = _.groupBy(warningList, "rule");
49
50 output += ` severity level "${severityLevel}": ${warningList.length}\n`;
51 _.forOwn(warningsByRule, (list, rule) => {
52 output += chalk.dim(` ${rule}: ${list.length}\n`);
53 });
54 });
55
56 return output + "\n";
57};