UNPKG

@infctr/eslint-docs

Version:

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

51 lines (49 loc) 2.13 kB
"use strict"; var __importDefault = undefined && undefined.__importDefault || function (mod) { return mod && mod.__esModule ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chalk_1 = __importDefault(require("chalk")); 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 diff_1 = __importDefault(require("../diff")); exports.default = ({ rule, docs, friendlyDocPath }, name) => { if (!rule || !rule.meta || !rule.meta.docs || !rule.meta.docs.description) { spinner_1.default.fail(`Rule ${name} does not have a description`); return abort_1.default(); } const fixable = rule.meta.fixable; var _rule$meta$docs = rule.meta.docs; const description = _rule$meta$docs.description, extraDescription = _rule$meta$docs.extraDescription, recommended = _rule$meta$docs.recommended; const heading = `# ${description} (${name})`; const headingRe = /^\s*#[^\r\n]*(\r?\n)?/; const newDocs = headingRe.test(docs) ? docs.replace(headingRe, heading + `$1`) : `${heading}${detect_newline_1.graceful(docs)}${docs}`; if (newDocs !== docs) { const patch = diff_1.default({ name: friendlyDocPath, content: docs }, { name: 'generated', content: newDocs }); if (flags_1.isChecking) { spinner_1.default.fail(chalk_1.default`The description for {bold ${name}} must match the required format:`); if (!flags_1.noDiffs) console.error(patch); process.exitCode = 1; } else { spinner_1.default.info(chalk_1.default`Updating the docs for {bold ${name}}:`); if (!flags_1.noDiffs) console.log(patch); } } if (flags_1.isChecking) { spinner_1.default.succeed(`${friendlyDocPath} is valid`); } return { newDocs, meta: { name, description, extraDescription, recommended, fixable } }; };