UNPKG

gherkin-lint

Version:

A Gherkin linter/validator written in javascript

61 lines (47 loc) 2.1 kB
"use strict"; const rules = require('./rules.js'); function verifyConfigurationFile(config, additionalRulesDirs) { let 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; } function verifyRuleConfiguration(rule, ruleConfig, additionalRulesDirs, errors) { const enablingSettings = ['on', '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 "on" 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; 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 "on" 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 + '"'); } } module.exports = verifyConfigurationFile;