UNPKG

gplint

Version:

A Gherkin linter/validator written in Javascript.

62 lines 2.12 kB
import * as featureFinder from '../../feature-finder.js'; import * as linter from '../../linter.js'; import * as logger from '../../logger.js'; export const command = '*'; export const describe = 'gplint main command'; export const builder = {}; export async function handler(argv) { const additionalRulesDirs = argv.rulesdir; const files = featureFinder.getFeatureFiles(argv._, argv.ignore); try { const results = await linter.lintInit(files, argv, additionalRulesDirs); await printResults(results, argv.format); process.exit(getExitCode(results, argv)); } catch (e) { console.error('Error running gplint', e); // eslint-disable-line no-console } } function getExitCode(results, { maxWarnings }) { let exitCode = 0; const { warnCount, errorCount } = countErrors(results); if (errorCount > 0) { exitCode = 1; } else if (maxWarnings > -1 && warnCount > maxWarnings) { exitCode = 1; console.log(`gplint found too many warnings (maximum: ${maxWarnings}).`); // eslint-disable-line no-console } return exitCode; } function countErrors(results) { let warnCount = 0; let errorCount = 0; results.flatMap(result => result.errors).forEach(e => { if (e.level === 1) { warnCount++; } else if (e.level === 2) { errorCount++; } }); return { warnCount, errorCount }; } async function printResults(results, format) { let formatter; switch (format) { case 'json': formatter = await import('../../formatters/json.js'); break; case 'xunit': formatter = await import('../../formatters/xunit.js'); break; case 'stylish': formatter = await import('../../formatters/stylish.js'); break; default: logger.boldError('Unsupported format. The supported formats are json, xunit and stylish.'); process.exit(1); } console.log(formatter.print(results)); // eslint-disable-line no-console } //# sourceMappingURL=main.js.map