Spaces:
Sleeping
Sleeping
| /** | |
| * @fileoverview Stylish reporter | |
| * @author Sindre Sorhus | |
| */ | |
| ; | |
| const chalk = require("chalk"), | |
| util = require("node:util"), | |
| table = require("../../shared/text-table"); | |
| //------------------------------------------------------------------------------ | |
| // Helpers | |
| //------------------------------------------------------------------------------ | |
| /** | |
| * Given a word and a count, append an s if count is not one. | |
| * @param {string} word A word in its singular form. | |
| * @param {number} count A number controlling whether word should be pluralized. | |
| * @returns {string} The original word with an s on the end if count is not one. | |
| */ | |
| function pluralize(word, count) { | |
| return count === 1 ? word : `${word}s`; | |
| } | |
| //------------------------------------------------------------------------------ | |
| // Public Interface | |
| //------------------------------------------------------------------------------ | |
| module.exports = function (results) { | |
| let output = "\n", | |
| errorCount = 0, | |
| warningCount = 0, | |
| fixableErrorCount = 0, | |
| fixableWarningCount = 0, | |
| summaryColor = "yellow"; | |
| results.forEach(result => { | |
| const messages = result.messages; | |
| if (messages.length === 0) { | |
| return; | |
| } | |
| errorCount += result.errorCount; | |
| warningCount += result.warningCount; | |
| fixableErrorCount += result.fixableErrorCount; | |
| fixableWarningCount += result.fixableWarningCount; | |
| output += `${chalk.underline(result.filePath)}\n`; | |
| output += `${table( | |
| messages.map(message => { | |
| let messageType; | |
| if (message.fatal || message.severity === 2) { | |
| messageType = chalk.red("error"); | |
| summaryColor = "red"; | |
| } else { | |
| messageType = chalk.yellow("warning"); | |
| } | |
| return [ | |
| "", | |
| String(message.line || 0), | |
| String(message.column || 0), | |
| messageType, | |
| message.message.replace(/([^ ])\.$/u, "$1"), | |
| chalk.dim(message.ruleId || ""), | |
| ]; | |
| }), | |
| { | |
| align: ["", "r", "l"], | |
| stringLength(str) { | |
| return util.stripVTControlCharacters(str).length; | |
| }, | |
| }, | |
| ) | |
| .split("\n") | |
| .map(el => | |
| el.replace(/(\d+)\s+(\d+)/u, (m, p1, p2) => | |
| chalk.dim(`${p1}:${p2}`), | |
| ), | |
| ) | |
| .join("\n")}\n\n`; | |
| }); | |
| const total = errorCount + warningCount; | |
| if (total > 0) { | |
| output += chalk[summaryColor].bold( | |
| [ | |
| "\u2716 ", | |
| total, | |
| pluralize(" problem", total), | |
| " (", | |
| errorCount, | |
| pluralize(" error", errorCount), | |
| ", ", | |
| warningCount, | |
| pluralize(" warning", warningCount), | |
| ")\n", | |
| ].join(""), | |
| ); | |
| if (fixableErrorCount > 0 || fixableWarningCount > 0) { | |
| output += chalk[summaryColor].bold( | |
| [ | |
| " ", | |
| fixableErrorCount, | |
| pluralize(" error", fixableErrorCount), | |
| " and ", | |
| fixableWarningCount, | |
| pluralize(" warning", fixableWarningCount), | |
| " potentially fixable with the `--fix` option.\n", | |
| ].join(""), | |
| ); | |
| } | |
| } | |
| // Resets output color, for prevent change on top level | |
| return total > 0 ? chalk.reset(output) : ""; | |
| }; | |