UNPKG

@infctr/eslint-docs

Version:

Keep your rule names and descriptions up-to-date across your repo

57 lines (53 loc) 2.29 kB
"use strict"; var __importDefault = undefined && undefined.__importDefault || function (mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const detect_newline_1 = require("detect-newline"); const flags_1 = require("../flags"); const spinner_1 = __importDefault(require("../spinner")); const abort_1 = __importDefault(require("../abort")); const targetRe = /^<!-- begin rule list -->[\s\S]+<!-- end rule list -->$/im; exports.default = (readme, ruleMeta, { pluginName }) => { const nl = detect_newline_1.graceful(readme); const ruleBlock = buildBlock(ruleMeta, pluginName, nl); let updatedReadme; if (targetRe.test(readme)) { updatedReadme = readme.replace(targetRe, ruleBlock); } else { const message = 'The README does not include a section to place the rule docs into.\nAdding it to the end instead.'; // istanbul ignore next if (flags_1.isChecking) { spinner_1.default.fail(message); return abort_1.default(); } else { spinner_1.default.warn(message); updatedReadme = `${readme}${nl}${nl}${ruleBlock}${nl}`; } } return updatedReadme; }; function buildBlock(meta, pluginName, nl = '\n') { const rulesTable = meta.map(({ name, description, extraDescription, recommended, fixable }) => `| [\`${pluginName}/${name}\`](./docs/rules/${name}.md) | ${handleDescription({ description, extraDescription })} | ${recommended ? ':heavy_check_mark:' : ''} | ${fixable != null ? ':wrench:' : ''} |`).join(nl); return ` <!-- begin rule list --> **Key**: :heavy_check_mark: = recommended, :wrench: = fixable <!-- prettier-ignore --> | Name | Description | :heavy_check_mark: | :wrench: | | ---- | ----------- | ------------------ | -------- | ${rulesTable} <!-- end rule list --> `.trim().replace(/\n/g, nl); } exports.buildBlock = buildBlock; function handleDescription({ description, extraDescription }) { if (!extraDescription) return description; if (Array.isArray(extraDescription)) { extraDescription = extraDescription.join(', '); } return `${description} (${extraDescription})`; } exports.handleDescription = handleDescription;