UNPKG

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