UNPKG

@kiwicom/eslint-config

Version:

Eslint configuration describing rules for JS used at Kiwi.com.

84 lines (65 loc) 4.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper")); function _wrapRegExp(re, groups) { _wrapRegExp = function _wrapRegExp(re, groups) { return new BabelRegExp(re, undefined, groups); }; var _RegExp = (0, _wrapNativeSuper2.default)(RegExp); var _super = RegExp.prototype; var _groups = new WeakMap(); function BabelRegExp(re, flags, groups) { var _this = _RegExp.call(this, re, flags); _groups.set(_this, groups || _groups.get(re)); return _this; } (0, _inherits2.default)(BabelRegExp, _RegExp); BabelRegExp.prototype.exec = function (str) { var result = _super.exec.call(this, str); if (result) result.groups = buildGroups(result, this); return result; }; BabelRegExp.prototype[Symbol.replace] = function (str, substitution) { if (typeof substitution === "string") { var groups = _groups.get(this); return _super[Symbol.replace].call(this, str, substitution.replace(/\$<([^>]+)>/g, function (_, name) { return "$" + groups[name]; })); } else if (typeof substitution === "function") { var _this = this; return _super[Symbol.replace].call(this, str, function () { var args = []; args.push.apply(args, arguments); if ((0, _typeof2.default)(args[args.length - 1]) !== "object") { args.push(buildGroups(args, _this)); } return substitution.apply(this, args); }); } else { return _super[Symbol.replace].call(this, str, substitution); } }; function buildGroups(result, re) { var g = _groups.get(re); return Object.keys(g).reduce(function (groups, name) { groups[name] = result[g[name]]; return groups; }, Object.create(null)); } return _wrapRegExp.apply(this, arguments); } var os = require('os'); var chalk = require('chalk'); var stripAnsi = require('strip-ansi'); var table = require('text-table'); function pluralize(word, count) { return count === 1 ? word : "".concat(word, "s"); } module.exports = function (results) { var output = os.EOL; var errorCount = 0; var warningCount = 0; var fixableErrorCount = 0; var fixableWarningCount = 0; var summaryColor = 'yellow'; results.forEach(function (result) { var messages = result.messages; if (messages.length === 0) { return; } errorCount += result.errorCount; warningCount += result.warningCount; fixableErrorCount += result.fixableErrorCount; fixableWarningCount += result.fixableWarningCount; output += table(messages.map(function (message) { var messageType; if (message.fatal || message.severity === 2) { messageType = chalk.red('error'); summaryColor = 'red'; } else { messageType = chalk.yellow('warning'); } return ['', message.line || 0, message.column || 0, messageType, message.message.replace(_wrapRegExp(/([^ ])\.$/, { msg: 1 }), '$1'), chalk.dim(message.ruleId || '')]; }), { align: ['', 'r', 'l'], stringLength: function stringLength(str) { return stripAnsi(str).length; } }).split(os.EOL).map(function (el) { return el.replace(_wrapRegExp(/(\d+)\s+(\d+)/, { line: 1, column: 2 }), function (m, p1, p2) { return chalk.dim("".concat(p1, ":").concat(p2)); }); }).join(os.EOL) + os.EOL; }); var total = errorCount + warningCount; if (total > 0) { if (fixableErrorCount > 0 || fixableWarningCount > 0) { output += os.EOL + // $FlowExpectedError: indexer property is missing in Chalk (problem of Chalk) chalk[summaryColor].bold([' ', fixableErrorCount, pluralize(' error', fixableErrorCount), ' and ', fixableWarningCount, pluralize(' warning', fixableWarningCount), ' potentially fixable with the `--fix` option.\n'].join('')); } } return total > 0 ? output : ''; };