@infctr/eslint-docs
Version:
Keep your rule names and descriptions up-to-date across your repo
51 lines (49 loc) • 2.13 kB
JavaScript
;
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
}
};
};