gherkin-lint-ts
Version:
Gherkin features linter written in Typescript
67 lines • 2.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runAllEnabledRules = exports.isWarn = exports.isRuleEnabled = exports.doesRuleExist = exports.getRule = exports.getAllRules = void 0;
// Operations on rules
const types_1 = require("../types");
const glob = require("glob");
const path = require("path");
// Needed to transpile TS files if in JS
// eslint-disable-next-line import/no-unassigned-import
require("ts-node/register/transpile-only");
function getAllRules(additionalRulesDirs) {
let rules = {};
const rulesDirs = [
path.join(__dirname, "..", "rules"),
].concat(additionalRulesDirs || []);
rulesDirs.forEach(rulesDir => {
rulesDir = path.resolve(rulesDir);
glob.sync(`${rulesDir}/*.{js,ts}`).forEach(file => {
if (!file.includes(".d.ts")) {
const rule = require(file);
rules[rule.name] = rule;
}
});
});
return rules;
}
exports.getAllRules = getAllRules;
function getRule(rule, additionalRulesDirs) {
return getAllRules(additionalRulesDirs)[rule];
}
exports.getRule = getRule;
function doesRuleExist(rule, additionalRulesDirs) {
return getRule(rule, additionalRulesDirs) !== undefined;
}
exports.doesRuleExist = doesRuleExist;
function isRuleEnabled(ruleConfig) {
if (Array.isArray(ruleConfig)) {
return ["error", "warn"].includes(ruleConfig[0]);
}
return ["error", "warn"].includes(ruleConfig);
}
exports.isRuleEnabled = isRuleEnabled;
function isWarn(ruleConfig) {
if (Array.isArray(ruleConfig)) {
return ruleConfig[0] === "warn";
}
return ruleConfig === "warn";
}
exports.isWarn = isWarn;
function runAllEnabledRules(feature, file, configuration, additionalRulesDirs) {
let errors = [];
const rules = getAllRules(additionalRulesDirs);
Object.keys(rules).forEach(ruleName => {
let rule = rules[ruleName];
if (isRuleEnabled(configuration[rule.name])) {
const ruleConfig = Array.isArray(configuration[rule.name]) ? configuration[rule.name][1] : {};
const ruleErrors = rule.run(feature, file, ruleConfig);
if (ruleErrors) {
ruleErrors.forEach(it => it.errorLevel = isWarn(configuration[rule.name]) ? types_1.ErrorLevel.Warn : types_1.ErrorLevel.Error);
errors = errors.concat(ruleErrors);
}
}
});
return errors;
}
exports.runAllEnabledRules = runAllEnabledRules;
//# sourceMappingURL=rules.js.map