/* compatibility between NodeJS and Rhino */ if (typeof print === 'undefined') print = console.log; if (typeof console === 'undefined') console = { log: print }; if (typeof process !== 'undefined') arguments = process.argv.splice(2); if (typeof quit === 'undefined') quit = process.exit; if (typeof readFile === 'undefined') { var fs = require("fs"); readFile = function (filename) { return fs.readFileSync(filename, "utf-8"); }; } (function (a) { var options = { anon : false, // if the space may be omitted in anonymous function declarations bitwise : false, // if bitwise operators should be allowed browser : false, // if the standard browser globals should be predefined cap : false, // if upper case HTML should be allowed confusion : false, // if types can be used inconsistently 'continue' : false, // if the continuation statement should be tolerated css : false, // if CSS workarounds should be tolerated debug : false, // if debugger statements should be allowed devel : false, // if logging should be allowed (console, alert, etc.) eqeq : false, // if == should be allowed es5 : false, // if ES5 syntax should be allowed evil : false, // if eval should be allowed forin : false, // if for in statements need not filter fragment : false, // if HTML fragments should be allowed indent : 10, // the indentation factor maxerr : 1000, // the maximum number of errors to allow maxlen : 256, // the maximum length of a source line newcap : false, // if constructor names capitalization is ignored node : false, // if Node.js globals should be predefined nomen : false, // if names may have dangling _ on : false, // if HTML event handlers should be allowed passfail : false, // if the scan should stop on first error plusplus : false, // if increment/decrement should be allowed properties : false, // if all property names must be declared with /*properties*/ regexp : false, // if the . should be allowed in regexp literals rhino : false, // if the Rhino environment globals should be predefined undef : false, // if variables can be declared out of order unparam : false, // if unused parameters should be tolerated sloppy : false, // if the 'use strict'; pragma is optional sub : false, // if all forms of subscript notation are tolerated vars : false, // if multiple var statements per function should be allowed white : false, // if sloppy whitespace is tolerated widget : false, // if the Yahoo Widgets globals should be predefined windows : false // if MS Windows-specific globals should be predefined }; var k; var m for (k = 0; k < a.length; k++) { if ( a[k].substring(0, 1) != '-' && a[k].substring(0, 1) != '+') break; var name = a[k] var value = name.substring(0, 1) == "+" ? true : false; name = name.substring(1) if ((m = name.match(/^(.+)=(.+)$/))) { name = m[1] value = m[2] } if (options[name] == undefined) { print("jslint: ERROR: invalid command line option \"" + a[k] + "\""); quit(1); } options[name] = value } var e, i, input; if (!a[k]) { var o = ""; for (opt in options) { if (typeof options[opt] == "boolean") o += " [+|-" + opt + "]" else o += " [+" + opt + "=]" } print("jslint: USAGE: jslint" + o + " "); quit(1); } input = readFile(a[k]); if (!input) { print("jslint: ERROR: couldn't open file '" + a[k] + "'."); quit(1); } if (!JSLINT(input, options)) { for (i = 0; i < JSLINT.errors.length; i += 1) { e = JSLINT.errors[i]; if (e) { print('jslint: ERROR: line ' + e.line + ' character ' + e.character + ': ' + e.reason); print(e.evidence || ''); var prefix = ""; for (var j = 0; j < e.character - 1; j++) prefix += " "; print(prefix + '^'); } } quit(2); } else quit(); }(arguments));