Skip to content

Instantly share code, notes, and snippets.

@poychang
Last active July 1, 2016 07:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save poychang/e9273db6f08833905c8e7dae14e2d897 to your computer and use it in GitHub Desktop.
Save poychang/e9273db6f08833905c8e7dae14e2d897 to your computer and use it in GitHub Desktop.
Cordova hook with JSHint
#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var jshint = require('jshint').JSHINT;
var async = require('async');
var recursiveFolderSearch = true;
var foldersToProcess = [
'js'
];
foldersToProcess.forEach(function (folder) {
processFiles("www/" + folder);
});
function processFiles(dir, callback) {
var errorCount = 0;
fs.readdir(dir, function (err, list) {
if (err) {
console.error('Directory Error: ' + err);
return;
}
async.eachSeries(list, function (file, innercallback) {
file = dir + '/' + file;
fs.stat(file, function (err, stat) {
if (!stat.isDirectory()) {
if (path.extname(file) === ".js") {
lintFile(file, function (hasError) {
if (hasError) {
errorCount++;
}
innercallback();
});
} else {
innercallback();
}
} else {
if (stat.isDirectory() && recursiveFolderSearch) {
processFiles(file, callback);
} else {
innercallback();
}
innercallback();
}
});
}, function (error) {
if (errorCount > 0) {
console.error('Get ' + errorCount + ' error(s) by JSHint.');
process.exit(1);
}
});
});
}
function lintFile(file, callback) {
console.log("Linting " + file);
fs.readFile(file, function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
if (jshint(data.toString())) {
//console.log('File ' + file + ' has no errors.');
//console.log('-----------------------------------------');
callback(false);
} else {
console.log('Errors in file ' + file);
var out = jshint.data(),
errors = out.errors;
for (var j = 0; j < errors.length; j++) {
console.log(errors[j].line + ':' + errors[j].character + ' -> ' + errors[j].reason + ' -> ' +
errors[j].evidence);
}
console.log('-----------------------------------------');
callback(true);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment