@infctr/eslint-docs
Version:
Keep your rule names and descriptions up-to-date across your repo
116 lines (109 loc) • 5.17 kB
JavaScript
;
var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
}
function rejected(value) {
try {
step(generator["throw"](value));
} catch (e) {
reject(e);
}
}
function step(result) {
result.done ? resolve(result.value) : new P(function (resolve) {
resolve(result.value);
}).then(fulfilled, rejected);
}
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = undefined && undefined.__importDefault || function (mod) {
return mod && mod.__esModule ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_1 = __importDefault(require("mz/fs"));
const path_1 = __importDefault(require("path"));
const chalk_1 = __importDefault(require("chalk"));
const flags_1 = require("./flags");
const project_root_1 = __importDefault(require("./project-root"));
const try_fs_1 = require("./try-fs");
const paths_1 = require("./paths");
const abort_1 = require("./abort");
const spinner_1 = __importDefault(require("./spinner"));
const diff_1 = __importDefault(require("./diff"));
const read_rule_1 = __importDefault(require("./actions/read-rule"));
const update_readme_1 = __importDefault(require("./actions/update-readme"));
exports.default = abort_1.unabort((projectRoot = project_root_1.default) => __awaiter(undefined, void 0, void 0, function* () {
const isTTY = process.stdout.isTTY && !process.env.CI;
const project = paths_1.register((yield projectRoot));
const rulesDir = project.rulesDir,
readmePath = project.readmePath,
docsDir = project.docsDir;
projectRoot = project.projectRoot;
if (isTTY) spinner_1.default.start('Reading rules...');
const rulePaths = (yield fs_1.default.readdir(rulesDir)).map(name => path_1.default.resolve(rulesDir, name));
const ruleMeta = [];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = rulePaths[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
const rulePath = _step.value;
if (isTTY) spinner_1.default.start(`${flags_1.verb} rule ${rulePaths.indexOf(rulePath) + 1} of ${rulePaths.length}...`);
const rule = require(rulePath);
const name = path_1.default.basename(rulePath, path_1.default.extname(rulePath));
const docPath = path_1.default.resolve(docsDir, name + '.md');
const friendlyDocPath = path_1.default.relative(projectRoot, docPath).replace(name, chalk_1.default.bold(name));
const docs = yield try_fs_1.read(null, chalk_1.default`Could not read the docs for {bold ${name}} at ${friendlyDocPath}`, docPath);
if (docs) {
var _read_rule_1$default = read_rule_1.default({ rule, docs, friendlyDocPath }, name);
const meta = _read_rule_1$default.meta,
newDocs = _read_rule_1$default.newDocs;
ruleMeta.push(meta);
if (!flags_1.isChecking) {
yield try_fs_1.write(`${friendlyDocPath} is up-to-date`, `Could not update the docs for {bold ${name}} at ${friendlyDocPath}`, docPath, newDocs);
}
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
if (isTTY) spinner_1.default.start(`${flags_1.verb} README...`);
const readme = yield try_fs_1.read(null, `Could not read the README`, readmePath);
const updatedReadme = update_readme_1.default(readme, ruleMeta, project);
if (updatedReadme !== readme) {
const patch = diff_1.default({ name: 'README.md', content: readme }, { name: 'generated', content: updatedReadme });
if (flags_1.isChecking) {
spinner_1.default.fail('The README is not correctly formatted. Please update it:');
if (!flags_1.noDiffs) console.error(patch);
process.exitCode = 1;
} else {
spinner_1.default.info('Updating README:');
if (!flags_1.noDiffs) console.log(patch);
yield try_fs_1.write('README.md is up-to-date', `Could not update the README`, readmePath, updatedReadme);
}
} else {
if (flags_1.isChecking) {
spinner_1.default.succeed('The README is valid');
} else {
spinner_1.default.succeed('The README is up-to-date');
}
}
}));