eslint-formatter-summary
Version:
ESLint summary formatter aggregating results by rule
110 lines (84 loc) • 3.67 kB
JavaScript
;
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;