summaryrefslogtreecommitdiff
path: root/hooks/before_prepare
diff options
context:
space:
mode:
Diffstat (limited to 'hooks/before_prepare')
-rwxr-xr-xhooks/before_prepare/02_jshint.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/hooks/before_prepare/02_jshint.js b/hooks/before_prepare/02_jshint.js
new file mode 100755
index 00000000..fff7775d
--- /dev/null
+++ b/hooks/before_prepare/02_jshint.js
@@ -0,0 +1,73 @@
+#!/usr/bin/env node
+
+var fs = require('fs');
+var path = require('path');
+var jshint = require('jshint').JSHINT;
+var async = require('async');
+
+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.log('processFiles err: ' + 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 {
+ innercallback();
+ }
+ });
+ }, function(error) {
+ if(errorCount > 0) {
+ 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);
+ }
+ });
+}
+