gplint
Version:
A Gherkin linter/validator written in Javascript.
62 lines • 2.12 kB
JavaScript
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