Add JSHint and make dygraphs pass its checks.
[dygraphs.git] / jshint / env / jsc.js
diff --git a/jshint/env/jsc.js b/jshint/env/jsc.js
new file mode 100644 (file)
index 0000000..94799c9
--- /dev/null
@@ -0,0 +1,79 @@
+/*jshint boss:true, evil:true */
+
+// usage:
+//   jsc ${env_home}/jsc.js -- ${file} "$(cat ${file})" "{option1:true,option2:false} ${env_home}"
+var env_home = '';
+if (arguments.length > 3) {
+  env_home = arguments[3].toString().replace(/\/env$/, '/');
+}
+load(env_home + "jshint.js");
+
+if (typeof(JSHINT) === 'undefined') {
+  print('jshint: Could not load jshint.js, tried "' + env_home + 'jshint.js".');
+  quit();
+}
+
+(function(args){
+    var home  = args[3],
+        name  = args[0],
+        input = args[1],
+        opts  = (function(arg){
+            var opts = {};
+            var item;
+
+            switch (arg) {
+            case undefined:
+            case '':
+                return opts;
+            default:
+                arg = arg.split(',');
+                for (var i = 0, ii = arg.length; i < ii; i++) {
+                    item = arg[i].split(':');
+                    opts[item[0]] = eval(item[1]);
+                }
+                return opts;
+            }
+        })(args[2]);
+
+    if (!name) {
+        print('jshint: No file name was provided.');
+        quit();
+    }
+
+    if (!input) {
+        print('jshint: ' + name + ' contents were not provided to jshint.');
+        quit();
+    }
+
+    if (!JSHINT(input, opts)) {
+        for (var i = 0, err; err = JSHINT.errors[i]; i++) {
+            print(err.reason + ' (line: ' + err.line + ', character: ' + err.character + ')');
+            print('> ' + (err.evidence || '').replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
+            print('');
+        }
+    }
+
+    var data = JSHINT.data();
+    if (data.unused !== undefined) {
+      for (var i = 0, unused; unused = data.unused[i]; i++) {
+        print('Unused variable "' + unused.name + '" (line: ' + unused.line + ')');
+      }
+    }
+
+    // if (data.globals !== undefined) {
+    //   for (var i = 0, globals; global = data.globals[i]; i++) {
+    //     print('Global variable "' + global + '"');
+    //   }
+    // }
+
+    if (data.implieds !== undefined) {
+      for (var i = 0, implied; implied = data.implieds[i]; i++) {
+        print('Implied global variable "' + implied.name + '" (line: ' + implied.line + ')');
+      }
+    }
+
+    // print('Errors: ' + JSHINT.errors.length);
+    // print(JSHINT.report(true));
+
+    quit();
+})(arguments);