return libs;
};
+ /**
+ * Get the list of feature files to pass to the gherkin linter.
+ *
+ * @returns {Array}
+ */
+ const getGherkinLintTargets = () => {
+ if (files) {
+ // Specific files were requested. Only check these.
+ return files;
+ }
+
+ if (inComponent) {
+ return [`${runDir}/tests/behat/*.feature`];
+ }
+
+ return ['**/tests/behat/*.feature'];
+ };
+
// Project configuration.
grunt.initConfig({
eslint: {
},
gherkinlint: {
options: {
- files: files ? files : ['**/tests/behat/*.feature'],
+ files: getGherkinLintTargets(),
}
},
});
};
tasks.gherkinlint = function() {
- var done = this.async(),
- options = grunt.config('gherkinlint.options');
-
- var args = grunt.file.expand(options.files);
- args.unshift(path.normalize(__dirname + '/node_modules/.bin/gherkin-lint'));
- grunt.util.spawn({
- cmd: 'node',
- args: args,
- opts: {stdio: 'inherit', env: process.env}
- }, function(error, result, code) {
- // Propagate the exit code.
- done(code === 0);
- });
+ const done = this.async();
+ const options = grunt.config('gherkinlint.options');
+
+ // Grab the gherkin-lint linter and required scaffolding.
+ const linter = require('gherkin-lint/src/linter.js');
+ const featureFinder = require('gherkin-lint/src/feature-finder.js');
+ const configParser = require('gherkin-lint/src/config-parser.js');
+ const formatter = require('gherkin-lint/src/formatters/stylish.js');
+
+ // Run the linter.
+ const results = linter.lint(
+ featureFinder.getFeatureFiles(grunt.file.expand(options.files)),
+ configParser.getConfiguration(configParser.defaultConfigFileName)
+ );
+
+ // Print the results out uncondtionally.
+ formatter.printResults(results);
+
+ // Report on the results.
+ // We exit 1 if there is at least one error, otherwise we exit cleanly.
+ if (results.some(result => result.errors.length > 0)) {
+ done(1);
+ } else {
+ done(0);
+ }
};
tasks.startup = function() {