blob: 5278dea631e1c6307995605304ba66a165e586bb [file] [log] [blame]
#!/usr/bin/env node
'use strict';
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _utilities = require('./utilities');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var windows = function windows(array, size) {
var output = [];
for (var ii = 0; ii < array.length - size + 1; ii++) {
output.push(array.slice(ii, ii + size));
}
return output;
};
// @flow
var getDocIndexRules = function getDocIndexRules() {
var content = _fs2.default.readFileSync(_path2.default.resolve(__dirname, '../../.README/README.md'), 'utf-8');
var rules = content.split('\n').map(function (line) {
var match = /^{"gitdown": "include", "file": "([^"]+)"}$/.exec(line);
if (match === null) {
return null;
} else {
return match[1].replace('./rules/', '').replace('.md', '');
}
}).filter(function (rule) {
return rule !== null;
});
if (rules.length === 0) {
throw new Error('Docs checker is broken - it could not extract rules from docs index file.');
}
return rules;
};
var hasCorrectAssertions = function hasCorrectAssertions(docPath, name) {
var content = _fs2.default.readFileSync(docPath, 'utf-8');
var match = /<!-- assertions ([a-zA-Z]+) -->/.exec(content);
if (match === null) {
return false;
} else {
return match[1] === name;
}
};
/**
* Performed checks:
* - file `/.README/rules/<rule>.md` exists
* - file `/.README/rules/<rule>.md` contains correct assertions placeholder (`<!-- assertions ... -->`)
* - rule is included in gitdown directive in `/.README/README.md`
* - rules in `/.README/README.md` are alphabetically sorted
*/
var checkDocs = function checkDocs(rulesNames) {
var docIndexRules = getDocIndexRules();
var sorted = windows(docIndexRules, 2).every(function (chunk) {
return chunk[0] < chunk[1];
});
if (!sorted) {
throw new Error('Rules are not alphabetically sorted in `.README/README.md` file.');
}
var invalid = rulesNames.filter(function (names) {
var docPath = _path2.default.resolve(__dirname, '../../.README/rules', names[1] + '.md');
var docExists = (0, _utilities.isFile)(docPath);
var inIndex = docIndexRules.includes(names[1]);
var hasAssertions = docExists ? hasCorrectAssertions(docPath, names[0]) : false;
return !(docExists && inIndex && hasAssertions);
});
if (invalid.length > 0) {
var invalidList = invalid.map(function (names) {
return names[0];
}).join(', ');
throw new Error('Docs checker encountered an error in: ' + invalidList + '. ' + 'Make sure that for every rule you created documentation file with assertions placeholder in camelCase ' + 'and included the file path in `.README/README.md` file.');
}
};
checkDocs((0, _utilities.getRules)());