gherkin-lint-ts
Version:
Gherkin features linter written in Typescript
73 lines • 3.35 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyConfigurationFile = void 0;
const rules = __importStar(require("../utils/rules"));
function verifyConfigurationFile(config, additionalRulesDirs) {
const errors = [];
for (let rule in config) {
if (!rules.doesRuleExist(rule, additionalRulesDirs)) {
errors.push(`Rule "${rule}" does not exist`);
}
else {
verifyRuleConfiguration(rule, config[rule], additionalRulesDirs, errors);
}
}
return errors;
}
exports.verifyConfigurationFile = verifyConfigurationFile;
function verifyRuleConfiguration(rule, ruleConfig, additionalRulesDirs, errors = []) {
const enablingSettings = ["error", "warn", "off"];
const genericErrorMsg = `Invalid rule configuration for "${rule}" -`;
if (Array.isArray(ruleConfig)) {
if (!enablingSettings.includes(ruleConfig[0])) {
errors.push(`${genericErrorMsg} The first part of the config should be "error", "warn" or "off"`);
}
if (ruleConfig.length !== 2) {
errors.push(`${genericErrorMsg} The config should only have 2 parts.`);
}
const ruleObj = rules.getRule(rule, additionalRulesDirs);
let isValidSubConfig;
if (typeof (ruleConfig[1]) === "string") {
isValidSubConfig = (availableConfigs, subConfig) => ruleObj.availableConfigs.includes(subConfig);
testSubconfig(genericErrorMsg, rule, ruleConfig[1], isValidSubConfig, additionalRulesDirs, errors);
}
else {
isValidSubConfig = (availableConfigs, subConfig) => ruleObj.availableConfigs[subConfig] !== undefined;
// TODO: fix
for (let subConfig in ruleConfig[1]) {
testSubconfig(genericErrorMsg, rule, subConfig, isValidSubConfig, additionalRulesDirs, errors);
}
}
}
else {
if (!enablingSettings.includes(ruleConfig)) {
errors.push(`${genericErrorMsg} The the config should be "error", "warn" or "off"`);
}
}
}
function testSubconfig(genericErrorMsg, rule, subConfig, isValidSubConfig, additionalRulesDirs, errors) {
const ruleObj = rules.getRule(rule, additionalRulesDirs);
if (!isValidSubConfig(ruleObj.availableConfigs, subConfig)) {
errors.push(`${genericErrorMsg} The rule does not have the specified configuration option "${subConfig}"`);
}
}
//# sourceMappingURL=config-verifier.js.map