UNPKG

eslint-index

Version:

CLI for finding and managing rules in ESLint config files

81 lines (69 loc) 2.18 kB
const _ = require('lodash') const chalk = require('chalk') const Table = require('cli-table3') const Constants = require('./constants') const Docs = require('./docs') function formatColor(value, status) { const color = Constants.STATUS_COLORS[status] return color ? chalk[color](value) : value } function formatKey(key, prefix) { const labels = _.map(key, (color, label) => chalk[color](label)) return [ prefix ].concat(labels).join(' ') } function formatList(rules, showDocs) { let ruleDocsUrl = '', formattedRule = '' const ruleWithMaxLength = _.maxBy(rules, rule => rule.id.length) const maxRuleIdLength = ruleWithMaxLength ? ruleWithMaxLength.id.length : 0 return rules.map((rule) => { formattedRule = _.padEnd(rule.id, maxRuleIdLength) formattedRule = formatColor(formattedRule, rule.status) if (showDocs) { ruleDocsUrl = chalk.gray(Docs.getRuleDocsUrl(rule)) formattedRule = `${formattedRule} ${ruleDocsUrl}` } return formattedRule }).join('\n') } function formatNumber(rules) { return rules.length } function formatTable(rules, statusFilter) { const RULES_KEY = 'total' const columns = [ RULES_KEY ].concat(statusFilter) // Calculate column width const width = columns.reduce((result, key) => Math.max(result, key.length), 0) // Color table headers const head = _.map(columns, label => formatColor(_.padEnd(label, width), label)) // Create table const table = new Table({ head: [ '' ].concat(head), style: { head: [] } }) // Build group status counters const counter = _.mapValues(Constants.STATUS_COLORS, () => 0) const index = _.transform(rules, (result, rule) => { if (!result[rule.group]) { result[rule.group] = _.assign({ [RULES_KEY]: 0 }, counter) } result[rule.group][rule.status]++ result[rule.group][RULES_KEY]++ }, {}) // Add group table rows _.each(index, (counters, group) => { const counts = _.map(columns, status => formatColor(counters[status], status)) table.push([ group ].concat(counts)) }) return table.toString() } module.exports = { formatNumber, formatTable, formatList, formatKey }