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