UNPKG

eslint-formatter-summary

Version:

ESLint summary formatter aggregating results by rule

110 lines (84 loc) 3.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = format; require("core-js/modules/es.string.pad-end.js"); require("core-js/modules/es.array.map.js"); require("core-js/modules/es.array.includes.js"); var _chalk = _interopRequireDefault(require("chalk")); var _padNum = _interopRequireDefault(require("./pad-num")); var _sumUp = _interopRequireDefault(require("./sum-up")); var _lengthOfLongest = _interopRequireDefault(require("./length-of-longest")); var _sortByProp = _interopRequireDefault(require("./sort-by-prop")); var _aggregator = _interopRequireDefault(require("./aggregator")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var maxErrorLen = function maxErrorLen(rules) { return (0, _lengthOfLongest.default)('errors', rules); }; var maxWarningLen = function maxWarningLen(rules) { return (0, _lengthOfLongest.default)('warnings', rules); }; var maxRuleLen = function maxRuleLen(rules) { return (0, _lengthOfLongest.default)('ruleId', rules); }; var totalErrors = function totalErrors(rules) { return (0, _sumUp.default)('errors', rules); }; var totalWarnings = function totalWarnings(rules) { return (0, _sumUp.default)('warnings', rules); }; var totalProblems = function totalProblems(rules) { return totalErrors(rules) + totalWarnings(rules); }; var sparkles = String.fromCodePoint(0x2728); var flames = String.fromCodePoint(0x1f525); var constructHeader = function constructHeader(rules) { var errors = '0'.repeat(maxErrorLen(rules)); var warnings = '0'.repeat(maxWarningLen(rules)); var longestRule = '0'.repeat(maxRuleLen(rules)); var len = `errors ${errors} warnings ${warnings} rule: ${longestRule}`.length; var header = ` ${sparkles} Summary of failing ESLint rules `.padEnd(len); return (0, _chalk.default)`{bgBlue ${header}}`; }; var constructSummary = function constructSummary(rules) { return rules.map(function (rule, i) { var errors = (0, _padNum.default)(rule.errors, maxErrorLen(rules)); var warnings = (0, _padNum.default)(rule.warnings, maxWarningLen(rules)); var ruleId = rule.ruleId; var line = (0, _chalk.default)`errors {red ${errors}} warnings {yellow ${warnings}} rule: {gray ${ruleId}}`; return i < rules.length - 1 ? `${line}\n` : line; }).join(''); }; var constructTotal = function constructTotal(rules) { return (0, _chalk.default)`${flames} {red ${totalProblems(rules)} problems in total} (${totalErrors(rules)} {red errors}, ${totalWarnings(rules)} {yellow warnings})`; }; /** * Generates formatted summary output from ESLint result set * * Accepts the following options: * `process.env.SORT_BY <prop>` where <prop> can be `rule`, `errors`, `warnings` * `process.env.DESC` to reverse order of sorted rule summary * * @param {Array} results ESLint results * @param {Array} env Node's process.env * @returns {string} The formatted output */ function format(results, _ref) { var SORT_BY = _ref.SORT_BY, DESC = _ref.DESC; var rules = (0, _aggregator.default)(results); if (['rule', 'errors', 'warnings'].includes(SORT_BY)) { var prop = SORT_BY === 'rule' ? 'ruleId' : SORT_BY; var direction = DESC === 'true' ? 'desc' : 'asc'; (0, _sortByProp.default)(prop, rules, direction); } else { // default sorting is by rule / ascending (0, _sortByProp.default)('ruleId', rules, 'asc'); } var header = constructHeader(rules); var summary = constructSummary(rules); var total = constructTotal(rules); return `${header}\n${summary}\n${total}`; } module.exports = exports.default;