UNPKG

gherkin-lint

Version:

A Gherkin linter/validator written in javascript

58 lines (46 loc) 1.95 kB
#!/usr/bin/env node "use strict"; const program = require('commander'); const linter = require('./linter.js'); const featureFinder = require('./feature-finder.js'); const configParser = require('./config-parser.js'); const logger = require('./logger.js'); function list(val) { return val.split(','); } function collect(val, memo) { memo.push(val); return memo; } program.usage('[options] <feature-files>').option('-f, --format [format]', 'output format. Possible values: json, stylish, xunit. Defaults to stylish').option('-i, --ignore <...>', 'comma seperated list of files/glob patterns that the linter should ignore, overrides ' + featureFinder.defaultIgnoreFileName + ' file', list).option('-c, --config [config]', 'configuration file, defaults to ' + configParser.defaultConfigFileName).option('-r, --rulesdir <...>', 'additional rule directories', collect, []).parse(process.argv); const options = program.opts(); const additionalRulesDirs = options.rulesdir; const files = featureFinder.getFeatureFiles(program.args, options.ignore); const config = configParser.getConfiguration(options.config, additionalRulesDirs); linter.lint(files, config, additionalRulesDirs).then(results => { printResults(results, options.format); process.exit(getExitCode(results)); }); function getExitCode(results) { let exitCode = 0; results.forEach(result => { if (result.errors.length > 0) { exitCode = 1; } }); return exitCode; } function printResults(results, format) { let formatter; if (format === 'json') { formatter = require('./formatters/json.js'); } else if (format === 'xunit') { formatter = require('./formatters/xunit.js'); } else if (!format || format === 'stylish') { formatter = require('./formatters/stylish.js'); } else { logger.boldError('Unsupported format. The supported formats are json, xunit and stylish.'); process.exit(1); } formatter.printResults(results); }