12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /*
- * grunt-contrib-jshint
- * https://gruntjs.com/
- *
- * Copyright (c) 2016 "Cowboy" Ben Alman, contributors
- * Licensed under the MIT license.
- */
- 'use strict';
- module.exports = function(grunt) {
- var path = require('path');
- var hooker = require('hooker');
- var jshint = require('./lib/jshint').init(grunt);
- grunt.registerMultiTask('jshint', 'Validate files with JSHint.', function() {
- var done = this.async();
- // Merge task-specific and/or target-specific options with these defaults.
- var options = this.options({
- force: false,
- reporter: null,
- reporterOutputRelative: true
- });
- // Report JSHint errors but dont fail the task
- var force = options.force;
- delete options.force;
- // Whether to output the report to a file
- var reporterOutput = options.reporterOutput;
- // Hook into stdout to capture report
- var output = '';
- if (reporterOutput) {
- hooker.hook(process.stdout, 'write', {
- pre: function(out) {
- output += out;
- return hooker.preempt();
- }
- });
- }
- jshint.lint(this.filesSrc, options, function(results, data) {
- var failed = 0;
- if (results.length > 0) {
- // Fail task if errors were logged except if force was set.
- failed = force;
- if (jshint.usingGruntReporter === true) {
- var numErrors = grunt.util._.reduce(results, function(memo, result) {
- return memo + (result.error ? 1 : 0);
- }, 0);
- var numFiles = data.length;
- grunt.log.error(numErrors + ' ' + grunt.util.pluralize(numErrors, 'error/errors') + ' in ' +
- numFiles + ' ' + grunt.util.pluralize(numFiles, 'file/files'));
- }
- } else {
- if (jshint.usingGruntReporter === true && data.length > 0) {
- grunt.log.ok(data.length + ' ' + grunt.util.pluralize(data.length, 'file/files') + ' lint free.');
- }
- }
- // Write the output of the reporter if wanted
- if (reporterOutput) {
- hooker.unhook(process.stdout, 'write');
- reporterOutput = grunt.template.process(reporterOutput);
- var destDir = path.dirname(reporterOutput);
- if (!grunt.file.exists(destDir)) {
- grunt.file.mkdir(destDir);
- }
- grunt.file.write(reporterOutput, output);
- grunt.log.ok('Report "' + reporterOutput + '" created.');
- }
- done(failed);
- });
- });
- };
|