jslint 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
 - data/bin/jslint +2 -2
 - data/jslint.gemspec +37 -39
 - data/jslint/jslint.js +6765 -0
 - data/jslint/json2.js +36 -38
 - data/jslint/node.coffee +69 -0
 - data/jslint/node.js +72 -67
 - data/jslint/rhino.coffee +59 -0
 - data/jslint/rhino.js +69 -53
 - data/lib/generators/jslint/update_config/templates/jslint.yml +34 -34
 - data/lib/jslint.rb +1 -1
 - metadata +61 -59
 - data/.gitignore +0 -21
 - data/jslint/adsafe.js +0 -1769
 - data/jslint/fulljslint.js +0 -5664
 - data/jslint/intercept.js +0 -86
 
    
        data/jslint/json2.js
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
2 
     | 
    
         
             
                http://www.JSON.org/json2.js
         
     | 
| 
       3 
     | 
    
         
            -
                 
     | 
| 
      
 3 
     | 
    
         
            +
                2011-02-23
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
                Public Domain.
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
         @@ -141,7 +141,7 @@ 
     | 
|
| 
       141 
141 
     | 
    
         
             
                redistribute.
         
     | 
| 
       142 
142 
     | 
    
         
             
            */
         
     | 
| 
       143 
143 
     | 
    
         | 
| 
       144 
     | 
    
         
            -
            /*jslint evil: true, strict: false */
         
     | 
| 
      
 144 
     | 
    
         
            +
            /*jslint evil: true, strict: false, regexp: false */
         
     | 
| 
       145 
145 
     | 
    
         | 
| 
       146 
146 
     | 
    
         
             
            /*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
         
     | 
| 
       147 
147 
     | 
    
         
             
                call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
         
     | 
| 
         @@ -153,11 +153,13 @@ 
     | 
|
| 
       153 
153 
     | 
    
         
             
            // Create a JSON object only if one does not already exist. We create the
         
     | 
| 
       154 
154 
     | 
    
         
             
            // methods in a closure to avoid creating global variables.
         
     | 
| 
       155 
155 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
             
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
      
 156 
     | 
    
         
            +
            var JSON;
         
     | 
| 
      
 157 
     | 
    
         
            +
            if (!JSON) {
         
     | 
| 
      
 158 
     | 
    
         
            +
                JSON = {};
         
     | 
| 
       158 
159 
     | 
    
         
             
            }
         
     | 
| 
       159 
160 
     | 
    
         | 
| 
       160 
161 
     | 
    
         
             
            (function () {
         
     | 
| 
      
 162 
     | 
    
         
            +
                "use strict";
         
     | 
| 
       161 
163 
     | 
    
         | 
| 
       162 
164 
     | 
    
         
             
                function f(n) {
         
     | 
| 
       163 
165 
     | 
    
         
             
                    // Format integers to have at least two digits.
         
     | 
| 
         @@ -169,19 +171,19 @@ if (!this.JSON) { 
     | 
|
| 
       169 
171 
     | 
    
         
             
                    Date.prototype.toJSON = function (key) {
         
     | 
| 
       170 
172 
     | 
    
         | 
| 
       171 
173 
     | 
    
         
             
                        return isFinite(this.valueOf()) ?
         
     | 
| 
       172 
     | 
    
         
            -
             
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
             
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
      
 174 
     | 
    
         
            +
                            this.getUTCFullYear()     + '-' +
         
     | 
| 
      
 175 
     | 
    
         
            +
                            f(this.getUTCMonth() + 1) + '-' +
         
     | 
| 
      
 176 
     | 
    
         
            +
                            f(this.getUTCDate())      + 'T' +
         
     | 
| 
      
 177 
     | 
    
         
            +
                            f(this.getUTCHours())     + ':' +
         
     | 
| 
      
 178 
     | 
    
         
            +
                            f(this.getUTCMinutes())   + ':' +
         
     | 
| 
      
 179 
     | 
    
         
            +
                            f(this.getUTCSeconds())   + 'Z' : null;
         
     | 
| 
       178 
180 
     | 
    
         
             
                    };
         
     | 
| 
       179 
181 
     | 
    
         | 
| 
       180 
     | 
    
         
            -
                    String.prototype.toJSON 
     | 
| 
       181 
     | 
    
         
            -
             
     | 
| 
       182 
     | 
    
         
            -
             
     | 
| 
       183 
     | 
    
         
            -
             
     | 
| 
       184 
     | 
    
         
            -
             
     | 
| 
      
 182 
     | 
    
         
            +
                    String.prototype.toJSON      =
         
     | 
| 
      
 183 
     | 
    
         
            +
                        Number.prototype.toJSON  =
         
     | 
| 
      
 184 
     | 
    
         
            +
                        Boolean.prototype.toJSON = function (key) {
         
     | 
| 
      
 185 
     | 
    
         
            +
                            return this.valueOf();
         
     | 
| 
      
 186 
     | 
    
         
            +
                        };
         
     | 
| 
       185 
187 
     | 
    
         
             
                }
         
     | 
| 
       186 
188 
     | 
    
         | 
| 
       187 
189 
     | 
    
         
             
                var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
         
     | 
| 
         @@ -207,13 +209,11 @@ if (!this.JSON) { 
     | 
|
| 
       207 
209 
     | 
    
         
             
            // sequences.
         
     | 
| 
       208 
210 
     | 
    
         | 
| 
       209 
211 
     | 
    
         
             
                    escapable.lastIndex = 0;
         
     | 
| 
       210 
     | 
    
         
            -
                    return escapable.test(string) ?
         
     | 
| 
       211 
     | 
    
         
            -
                         
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
                             
     | 
| 
       214 
     | 
    
         
            -
             
     | 
| 
       215 
     | 
    
         
            -
                        }) + '"' :
         
     | 
| 
       216 
     | 
    
         
            -
                        '"' + string + '"';
         
     | 
| 
      
 212 
     | 
    
         
            +
                    return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
         
     | 
| 
      
 213 
     | 
    
         
            +
                        var c = meta[a];
         
     | 
| 
      
 214 
     | 
    
         
            +
                        return typeof c === 'string' ? c :
         
     | 
| 
      
 215 
     | 
    
         
            +
                            '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
         
     | 
| 
      
 216 
     | 
    
         
            +
                    }) + '"' : '"' + string + '"';
         
     | 
| 
       217 
217 
     | 
    
         
             
                }
         
     | 
| 
       218 
218 
     | 
    
         | 
| 
       219 
219 
     | 
    
         
             
                function str(key, holder) {
         
     | 
| 
         @@ -295,11 +295,9 @@ if (!this.JSON) { 
     | 
|
| 
       295 
295 
     | 
    
         
             
            // Join all of the elements together, separated with commas, and wrap them in
         
     | 
| 
       296 
296 
     | 
    
         
             
            // brackets.
         
     | 
| 
       297 
297 
     | 
    
         | 
| 
       298 
     | 
    
         
            -
                            v = partial.length === 0 ? '[]' :
         
     | 
| 
       299 
     | 
    
         
            -
                                gap  
     | 
| 
       300 
     | 
    
         
            -
             
     | 
| 
       301 
     | 
    
         
            -
                                            mind + ']' :
         
     | 
| 
       302 
     | 
    
         
            -
                                      '[' + partial.join(',') + ']';
         
     | 
| 
      
 298 
     | 
    
         
            +
                            v = partial.length === 0 ? '[]' : gap ?
         
     | 
| 
      
 299 
     | 
    
         
            +
                                '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
         
     | 
| 
      
 300 
     | 
    
         
            +
                                '[' + partial.join(',') + ']';
         
     | 
| 
       303 
301 
     | 
    
         
             
                            gap = mind;
         
     | 
| 
       304 
302 
     | 
    
         
             
                            return v;
         
     | 
| 
       305 
303 
     | 
    
         
             
                        }
         
     | 
| 
         @@ -309,8 +307,8 @@ if (!this.JSON) { 
     | 
|
| 
       309 
307 
     | 
    
         
             
                        if (rep && typeof rep === 'object') {
         
     | 
| 
       310 
308 
     | 
    
         
             
                            length = rep.length;
         
     | 
| 
       311 
309 
     | 
    
         
             
                            for (i = 0; i < length; i += 1) {
         
     | 
| 
       312 
     | 
    
         
            -
                                 
     | 
| 
       313 
     | 
    
         
            -
             
     | 
| 
      
 310 
     | 
    
         
            +
                                if (typeof rep[i] === 'string') {
         
     | 
| 
      
 311 
     | 
    
         
            +
                                    k = rep[i];
         
     | 
| 
       314 
312 
     | 
    
         
             
                                    v = str(k, value);
         
     | 
| 
       315 
313 
     | 
    
         
             
                                    if (v) {
         
     | 
| 
       316 
314 
     | 
    
         
             
                                        partial.push(quote(k) + (gap ? ': ' : ':') + v);
         
     | 
| 
         @@ -322,7 +320,7 @@ if (!this.JSON) { 
     | 
|
| 
       322 
320 
     | 
    
         
             
            // Otherwise, iterate through all of the keys in the object.
         
     | 
| 
       323 
321 
     | 
    
         | 
| 
       324 
322 
     | 
    
         
             
                            for (k in value) {
         
     | 
| 
       325 
     | 
    
         
            -
                                if (Object.hasOwnProperty.call(value, k)) {
         
     | 
| 
      
 323 
     | 
    
         
            +
                                if (Object.prototype.hasOwnProperty.call(value, k)) {
         
     | 
| 
       326 
324 
     | 
    
         
             
                                    v = str(k, value);
         
     | 
| 
       327 
325 
     | 
    
         
             
                                    if (v) {
         
     | 
| 
       328 
326 
     | 
    
         
             
                                        partial.push(quote(k) + (gap ? ': ' : ':') + v);
         
     | 
| 
         @@ -334,9 +332,9 @@ if (!this.JSON) { 
     | 
|
| 
       334 
332 
     | 
    
         
             
            // Join all of the member texts together, separated with commas,
         
     | 
| 
       335 
333 
     | 
    
         
             
            // and wrap them in braces.
         
     | 
| 
       336 
334 
     | 
    
         | 
| 
       337 
     | 
    
         
            -
                        v = partial.length === 0 ? '{}' :
         
     | 
| 
       338 
     | 
    
         
            -
                             
     | 
| 
       339 
     | 
    
         
            -
             
     | 
| 
      
 335 
     | 
    
         
            +
                        v = partial.length === 0 ? '{}' : gap ?
         
     | 
| 
      
 336 
     | 
    
         
            +
                            '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
         
     | 
| 
      
 337 
     | 
    
         
            +
                            '{' + partial.join(',') + '}';
         
     | 
| 
       340 
338 
     | 
    
         
             
                        gap = mind;
         
     | 
| 
       341 
339 
     | 
    
         
             
                        return v;
         
     | 
| 
       342 
340 
     | 
    
         
             
                    }
         
     | 
| 
         @@ -377,7 +375,7 @@ if (!this.JSON) { 
     | 
|
| 
       377 
375 
     | 
    
         
             
                        rep = replacer;
         
     | 
| 
       378 
376 
     | 
    
         
             
                        if (replacer && typeof replacer !== 'function' &&
         
     | 
| 
       379 
377 
     | 
    
         
             
                                (typeof replacer !== 'object' ||
         
     | 
| 
       380 
     | 
    
         
            -
             
     | 
| 
      
 378 
     | 
    
         
            +
                                typeof replacer.length !== 'number')) {
         
     | 
| 
       381 
379 
     | 
    
         
             
                            throw new Error('JSON.stringify');
         
     | 
| 
       382 
380 
     | 
    
         
             
                        }
         
     | 
| 
       383 
381 
     | 
    
         | 
| 
         @@ -406,7 +404,7 @@ if (!this.JSON) { 
     | 
|
| 
       406 
404 
     | 
    
         
             
                            var k, v, value = holder[key];
         
     | 
| 
       407 
405 
     | 
    
         
             
                            if (value && typeof value === 'object') {
         
     | 
| 
       408 
406 
     | 
    
         
             
                                for (k in value) {
         
     | 
| 
       409 
     | 
    
         
            -
                                    if (Object.hasOwnProperty.call(value, k)) {
         
     | 
| 
      
 407 
     | 
    
         
            +
                                    if (Object.prototype.hasOwnProperty.call(value, k)) {
         
     | 
| 
       410 
408 
     | 
    
         
             
                                        v = walk(value, k);
         
     | 
| 
       411 
409 
     | 
    
         
             
                                        if (v !== undefined) {
         
     | 
| 
       412 
410 
     | 
    
         
             
                                            value[k] = v;
         
     | 
| 
         @@ -446,9 +444,9 @@ if (!this.JSON) { 
     | 
|
| 
       446 
444 
     | 
    
         
             
            // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
         
     | 
| 
       447 
445 
     | 
    
         | 
| 
       448 
446 
     | 
    
         
             
                        if (/^[\],:{}\s]*$/
         
     | 
| 
       449 
     | 
    
         
            -
            .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
         
     | 
| 
       450 
     | 
    
         
            -
            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
         
     | 
| 
       451 
     | 
    
         
            -
            .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
         
     | 
| 
      
 447 
     | 
    
         
            +
                                .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
         
     | 
| 
      
 448 
     | 
    
         
            +
                                    .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
         
     | 
| 
      
 449 
     | 
    
         
            +
                                    .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
         
     | 
| 
       452 
450 
     | 
    
         | 
| 
       453 
451 
     | 
    
         
             
            // In the third stage we use the eval function to compile the text into a
         
     | 
| 
       454 
452 
     | 
    
         
             
            // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
         
     | 
    
        data/jslint/node.coffee
    ADDED
    
    | 
         @@ -0,0 +1,69 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ###
         
     | 
| 
      
 2 
     | 
    
         
            +
              (c) 2010 Geraud Boyer
         
     | 
| 
      
 3 
     | 
    
         
            +
              Adapted from rhino.js from Douglas Crockford  (www.JSLint.com)
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              This is the node companion to fulljslint.js.
         
     | 
| 
      
 6 
     | 
    
         
            +
            ###
         
     | 
| 
      
 7 
     | 
    
         
            +
            ###global JSLINT
         
     | 
| 
      
 8 
     | 
    
         
            +
            ###
         
     | 
| 
      
 9 
     | 
    
         
            +
            ###jslint rhino: false, node: true, strict: false
         
     | 
| 
      
 10 
     | 
    
         
            +
            ###
         
     | 
| 
      
 11 
     | 
    
         
            +
            ###global require,sys,__filename,process
         
     | 
| 
      
 12 
     | 
    
         
            +
            ###
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            ((args) ->
         
     | 
| 
      
 15 
     | 
    
         
            +
              sys = require 'sys'
         
     | 
| 
      
 16 
     | 
    
         
            +
              fs = require 'fs'
         
     | 
| 
      
 17 
     | 
    
         
            +
              path = require 'path'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              print_syntax = () ->
         
     | 
| 
      
 20 
     | 
    
         
            +
                sys.puts 'Usage: jslint.js [options] file.js'
         
     | 
| 
      
 21 
     | 
    
         
            +
                process.exit 1
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              print_syntax() if args.length is 0
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              filename = path.join path.dirname(__filename), 'jslint.js'
         
     | 
| 
      
 26 
     | 
    
         
            +
              JSLINT = fs.readFileSync(filename).toString 'UTF8'
         
     | 
| 
      
 27 
     | 
    
         
            +
              eval JSLINT
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              # Sensible defaults
         
     | 
| 
      
 30 
     | 
    
         
            +
              options =
         
     | 
| 
      
 31 
     | 
    
         
            +
                rhino: no, node: no, passfail: no, bitwise: yes, immed: yes, newcap: yes,
         
     | 
| 
      
 32 
     | 
    
         
            +
                nomen: yes, onevar: yes, plusplus: yes, regexp: yes, undef: yes, white: yes
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              input = null
         
     | 
| 
      
 35 
     | 
    
         
            +
              input_filename = null
         
     | 
| 
      
 36 
     | 
    
         
            +
              args.forEach (arg, index) ->
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                if arg.match /^--no-(\w+)$/
         
     | 
| 
      
 39 
     | 
    
         
            +
                  options[RegExp.$1] = no
         
     | 
| 
      
 40 
     | 
    
         
            +
                else if arg.match /^--(\w+)=(\S.*)$/
         
     | 
| 
      
 41 
     | 
    
         
            +
                  options[RegExp.$1] = JSON.parse(RegExp.$2)
         
     | 
| 
      
 42 
     | 
    
         
            +
                else if arg.match /^--(\w+)$/
         
     | 
| 
      
 43 
     | 
    
         
            +
                  options[RegExp.$1] = yes
         
     | 
| 
      
 44 
     | 
    
         
            +
                else
         
     | 
| 
      
 45 
     | 
    
         
            +
                  input_filename = arg
         
     | 
| 
      
 46 
     | 
    
         
            +
                  input = fs.readFileSync input_filename
         
     | 
| 
      
 47 
     | 
    
         
            +
                  if not input
         
     | 
| 
      
 48 
     | 
    
         
            +
                    sys.puts "jslint: Couldn't open file '#{input_filename}'."
         
     | 
| 
      
 49 
     | 
    
         
            +
                    process.exit 1
         
     | 
| 
      
 50 
     | 
    
         
            +
                  else
         
     | 
| 
      
 51 
     | 
    
         
            +
                    # sys.debug('opening input');
         
     | 
| 
      
 52 
     | 
    
         
            +
                    input = input.toString 'UTF8'
         
     | 
| 
      
 53 
     | 
    
         
            +
                return
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              print_syntax() if not input
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
              if not JSLINT input, options
         
     | 
| 
      
 58 
     | 
    
         
            +
                JSLINT.errors.forEach (error) ->
         
     | 
| 
      
 59 
     | 
    
         
            +
                  if error
         
     | 
| 
      
 60 
     | 
    
         
            +
                    sys.puts "Lint at line #{error.line} character #{error.character}: #{error.reason}"
         
     | 
| 
      
 61 
     | 
    
         
            +
                    sys.puts (error.evidence or '').replace /^\s*(\S*(\s+\S+)*)\s*$/, "$1"
         
     | 
| 
      
 62 
     | 
    
         
            +
                    sys.puts ''
         
     | 
| 
      
 63 
     | 
    
         
            +
                process.exit 2
         
     | 
| 
      
 64 
     | 
    
         
            +
              else
         
     | 
| 
      
 65 
     | 
    
         
            +
                sys.puts "jslint: No problems found in #{input_filename}"
         
     | 
| 
      
 66 
     | 
    
         
            +
                process.exit 0
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
              return
         
     | 
| 
      
 69 
     | 
    
         
            +
            ) process.ARGV.slice 2
         
     | 
    
        data/jslint/node.js
    CHANGED
    
    | 
         @@ -1,72 +1,77 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            /*
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
            */
         
     | 
| 
       5 
     | 
    
         
            -
            // This is the node companion to fulljslint.js.
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            /*global JSLINT */
         
     | 
| 
       8 
     | 
    
         
            -
            /*jslint rhino: false, strict: false */
         
     | 
| 
       9 
     | 
    
         
            -
            /*global require,sys,__filename,process */
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            (function (args) {
         
     | 
| 
       12 
     | 
    
         
            -
                var sys = require('sys'),
         
     | 
| 
       13 
     | 
    
         
            -
                    fs = require('fs'),
         
     | 
| 
       14 
     | 
    
         
            -
                    path = require('path'),
         
     | 
| 
       15 
     | 
    
         
            -
                    JSLINT = fs.readFileSync(path.join(path.dirname(__filename), 'fulljslint.js')).toString('UTF8'),
         
     | 
| 
       16 
     | 
    
         
            -
                    options = {
         
     | 
| 
       17 
     | 
    
         
            -
                        rhino: true, passfail: false, bitwise: true,
         
     | 
| 
       18 
     | 
    
         
            -
                        eqeqeq: true, immed: true, newcap: true,
         
     | 
| 
       19 
     | 
    
         
            -
                        nomen: true, onevar: true, plusplus: true,
         
     | 
| 
       20 
     | 
    
         
            -
                        regexp: true, undef: true, white: true
         
     | 
| 
       21 
     | 
    
         
            -
                    },
         
     | 
| 
       22 
     | 
    
         
            -
                    filename, input;
         
     | 
| 
      
 2 
     | 
    
         
            +
              (c) 2010 Geraud Boyer
         
     | 
| 
      
 3 
     | 
    
         
            +
              Adapted from rhino.js from Douglas Crockford  (www.JSLint.com)
         
     | 
| 
       23 
4 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
              This is the node companion to fulljslint.js.
         
     | 
| 
      
 6 
     | 
    
         
            +
            */
         
     | 
| 
      
 7 
     | 
    
         
            +
            /*global JSLINT
         
     | 
| 
      
 8 
     | 
    
         
            +
            */
         
     | 
| 
      
 9 
     | 
    
         
            +
            /*jslint rhino: false, node: true, strict: false
         
     | 
| 
      
 10 
     | 
    
         
            +
            */
         
     | 
| 
      
 11 
     | 
    
         
            +
            /*global require,sys,__filename,process
         
     | 
| 
      
 12 
     | 
    
         
            +
            */(function(args) {
         
     | 
| 
      
 13 
     | 
    
         
            +
              var JSLINT, filename, fs, input, input_filename, options, path, print_syntax, sys;
         
     | 
| 
      
 14 
     | 
    
         
            +
              sys = require('sys');
         
     | 
| 
      
 15 
     | 
    
         
            +
              fs = require('fs');
         
     | 
| 
      
 16 
     | 
    
         
            +
              path = require('path');
         
     | 
| 
      
 17 
     | 
    
         
            +
              print_syntax = function() {
         
     | 
| 
      
 18 
     | 
    
         
            +
                sys.puts('Usage: jslint.js [options] file.js');
         
     | 
| 
      
 19 
     | 
    
         
            +
                return process.exit(1);
         
     | 
| 
      
 20 
     | 
    
         
            +
              };
         
     | 
| 
      
 21 
     | 
    
         
            +
              if (args.length === 0) {
         
     | 
| 
      
 22 
     | 
    
         
            +
                print_syntax();
         
     | 
| 
      
 23 
     | 
    
         
            +
              }
         
     | 
| 
      
 24 
     | 
    
         
            +
              filename = path.join(path.dirname(__filename), 'jslint.js');
         
     | 
| 
      
 25 
     | 
    
         
            +
              JSLINT = fs.readFileSync(filename).toString('UTF8');
         
     | 
| 
      
 26 
     | 
    
         
            +
              eval(JSLINT);
         
     | 
| 
      
 27 
     | 
    
         
            +
              options = {
         
     | 
| 
      
 28 
     | 
    
         
            +
                rhino: false,
         
     | 
| 
      
 29 
     | 
    
         
            +
                node: false,
         
     | 
| 
      
 30 
     | 
    
         
            +
                passfail: false,
         
     | 
| 
      
 31 
     | 
    
         
            +
                bitwise: true,
         
     | 
| 
      
 32 
     | 
    
         
            +
                immed: true,
         
     | 
| 
      
 33 
     | 
    
         
            +
                newcap: true,
         
     | 
| 
      
 34 
     | 
    
         
            +
                nomen: true,
         
     | 
| 
      
 35 
     | 
    
         
            +
                onevar: true,
         
     | 
| 
      
 36 
     | 
    
         
            +
                plusplus: true,
         
     | 
| 
      
 37 
     | 
    
         
            +
                regexp: true,
         
     | 
| 
      
 38 
     | 
    
         
            +
                undef: true,
         
     | 
| 
      
 39 
     | 
    
         
            +
                white: true
         
     | 
| 
      
 40 
     | 
    
         
            +
              };
         
     | 
| 
      
 41 
     | 
    
         
            +
              input = null;
         
     | 
| 
      
 42 
     | 
    
         
            +
              input_filename = null;
         
     | 
| 
      
 43 
     | 
    
         
            +
              args.forEach(function(arg, index) {
         
     | 
| 
      
 44 
     | 
    
         
            +
                if (arg.match(/^--no-(\w+)$/)) {
         
     | 
| 
      
 45 
     | 
    
         
            +
                  options[RegExp.$1] = false;
         
     | 
| 
      
 46 
     | 
    
         
            +
                } else if (arg.match(/^--(\w+)=(\S.*)$/)) {
         
     | 
| 
      
 47 
     | 
    
         
            +
                  options[RegExp.$1] = JSON.parse(RegExp.$2);
         
     | 
| 
      
 48 
     | 
    
         
            +
                } else if (arg.match(/^--(\w+)$/)) {
         
     | 
| 
      
 49 
     | 
    
         
            +
                  options[RegExp.$1] = true;
         
     | 
| 
      
 50 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 51 
     | 
    
         
            +
                  input_filename = arg;
         
     | 
| 
      
 52 
     | 
    
         
            +
                  input = fs.readFileSync(input_filename);
         
     | 
| 
      
 53 
     | 
    
         
            +
                  if (!input) {
         
     | 
| 
      
 54 
     | 
    
         
            +
                    sys.puts("jslint: Couldn't open file '" + input_filename + "'.");
         
     | 
| 
       26 
55 
     | 
    
         
             
                    process.exit(1);
         
     | 
| 
      
 56 
     | 
    
         
            +
                  } else {
         
     | 
| 
      
 57 
     | 
    
         
            +
                    input = input.toString('UTF8');
         
     | 
| 
      
 58 
     | 
    
         
            +
                  }
         
     | 
| 
       27 
59 
     | 
    
         
             
                }
         
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
                 
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
                     
     | 
| 
       36 
     | 
    
         
            -
                     
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                        options[RegExp.$1] = JSON.parse(RegExp.$2);
         
     | 
| 
       40 
     | 
    
         
            -
                    }
         
     | 
| 
       41 
     | 
    
         
            -
                    else if (arg.match(/^--(\w+)$/)) {
         
     | 
| 
       42 
     | 
    
         
            -
                        // sys.debug("a=true");
         
     | 
| 
       43 
     | 
    
         
            -
                        options[RegExp.$1] = true;
         
     | 
| 
       44 
     | 
    
         
            -
                    }
         
     | 
| 
       45 
     | 
    
         
            -
                    else {
         
     | 
| 
       46 
     | 
    
         
            -
                        filename = arg;
         
     | 
| 
       47 
     | 
    
         
            -
                        input = fs.readFileSync(filename);
         
     | 
| 
       48 
     | 
    
         
            -
                        if (!input) {
         
     | 
| 
       49 
     | 
    
         
            -
                            sys.puts("jslint: Couldn't open file '" + filename + "'.");
         
     | 
| 
       50 
     | 
    
         
            -
                            process.exit(1);
         
     | 
| 
       51 
     | 
    
         
            -
                        }
         
     | 
| 
       52 
     | 
    
         
            -
                        else {
         
     | 
| 
       53 
     | 
    
         
            -
                            // sys.debug('opening input');
         
     | 
| 
       54 
     | 
    
         
            -
                            input = input.toString('UTF8');
         
     | 
| 
       55 
     | 
    
         
            -
                        }
         
     | 
| 
       56 
     | 
    
         
            -
                    }
         
     | 
| 
      
 60 
     | 
    
         
            +
              });
         
     | 
| 
      
 61 
     | 
    
         
            +
              if (!input) {
         
     | 
| 
      
 62 
     | 
    
         
            +
                print_syntax();
         
     | 
| 
      
 63 
     | 
    
         
            +
              }
         
     | 
| 
      
 64 
     | 
    
         
            +
              if (!JSLINT(input, options)) {
         
     | 
| 
      
 65 
     | 
    
         
            +
                JSLINT.errors.forEach(function(error) {
         
     | 
| 
      
 66 
     | 
    
         
            +
                  if (error) {
         
     | 
| 
      
 67 
     | 
    
         
            +
                    sys.puts("Lint at line " + error.line + " character " + error.character + ": " + error.reason);
         
     | 
| 
      
 68 
     | 
    
         
            +
                    sys.puts((error.evidence || '').replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
         
     | 
| 
      
 69 
     | 
    
         
            +
                    return sys.puts('');
         
     | 
| 
      
 70 
     | 
    
         
            +
                  }
         
     | 
| 
       57 
71 
     | 
    
         
             
                });
         
     | 
| 
       58 
     | 
    
         
            -
                 
     | 
| 
       59 
     | 
    
         
            -
             
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
             
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
                        }
         
     | 
| 
       65 
     | 
    
         
            -
                    });
         
     | 
| 
       66 
     | 
    
         
            -
                    process.exit(2);
         
     | 
| 
       67 
     | 
    
         
            -
                }
         
     | 
| 
       68 
     | 
    
         
            -
                else {
         
     | 
| 
       69 
     | 
    
         
            -
                    sys.puts("jslint: No problems found in " + filename);
         
     | 
| 
       70 
     | 
    
         
            -
                    process.exit(0);
         
     | 
| 
       71 
     | 
    
         
            -
                }
         
     | 
| 
       72 
     | 
    
         
            -
            }(process.ARGV.slice(2)));
         
     | 
| 
      
 72 
     | 
    
         
            +
                process.exit(2);
         
     | 
| 
      
 73 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 74 
     | 
    
         
            +
                sys.puts("jslint: No problems found in " + input_filename);
         
     | 
| 
      
 75 
     | 
    
         
            +
                process.exit(0);
         
     | 
| 
      
 76 
     | 
    
         
            +
              }
         
     | 
| 
      
 77 
     | 
    
         
            +
            })(process.ARGV.slice(2));
         
     | 
    
        data/jslint/rhino.coffee
    ADDED
    
    | 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ###
         
     | 
| 
      
 2 
     | 
    
         
            +
              rhino.js
         
     | 
| 
      
 3 
     | 
    
         
            +
              2009-09-11
         
     | 
| 
      
 4 
     | 
    
         
            +
              Copyright (c) 2002 Douglas Crockford  (www.JSLint.com) Rhino Edition
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              Converted to CoffeeScript by Geraud Boyer
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              This is the Rhino companion to fulljslint.js.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ###
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ###global JSLINT
         
     | 
| 
      
 13 
     | 
    
         
            +
            ###
         
     | 
| 
      
 14 
     | 
    
         
            +
            ###jslint rhino: true, strict: false
         
     | 
| 
      
 15 
     | 
    
         
            +
            ###
         
     | 
| 
      
 16 
     | 
    
         
            +
            #
         
     | 
| 
      
 17 
     | 
    
         
            +
            do (arguments) ->
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              print_syntax = () ->
         
     | 
| 
      
 20 
     | 
    
         
            +
                sys.puts 'Usage: jslint.js [options] file.js'
         
     | 
| 
      
 21 
     | 
    
         
            +
                quit 1
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              print_syntax() if not arguments[0]
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              options =
         
     | 
| 
      
 26 
     | 
    
         
            +
                rhino: no, node: no, passfail: no, strict: no, bitwise: yes, newcap: yes,
         
     | 
| 
      
 27 
     | 
    
         
            +
                nomen: yes, onevar: yes, plusplus: yes, regexp: yes, undef: yes, white: yes
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              input = null
         
     | 
| 
      
 30 
     | 
    
         
            +
              input_filename = null
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              for arg in arguments
         
     | 
| 
      
 33 
     | 
    
         
            +
                do (arg)->
         
     | 
| 
      
 34 
     | 
    
         
            +
                  if arg.match /^--no-(\w+)$/
         
     | 
| 
      
 35 
     | 
    
         
            +
                    options[RegExp.$1] = no
         
     | 
| 
      
 36 
     | 
    
         
            +
                  else if arg.match /^--(\w+)=(\S.*)$/
         
     | 
| 
      
 37 
     | 
    
         
            +
                    options[RegExp.$1] = JSON.parse RegExp.$2
         
     | 
| 
      
 38 
     | 
    
         
            +
                  else if arg.match /^--(\w+)$/
         
     | 
| 
      
 39 
     | 
    
         
            +
                    options[RegExp.$1] = yes
         
     | 
| 
      
 40 
     | 
    
         
            +
                  else
         
     | 
| 
      
 41 
     | 
    
         
            +
                    input_filename = arg
         
     | 
| 
      
 42 
     | 
    
         
            +
                    input = readFile input_filename
         
     | 
| 
      
 43 
     | 
    
         
            +
                    if not input
         
     | 
| 
      
 44 
     | 
    
         
            +
                      print "jslint: Couldn't open file '#{input_filename}'."
         
     | 
| 
      
 45 
     | 
    
         
            +
                      quit 1
         
     | 
| 
      
 46 
     | 
    
         
            +
                  return
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
              print_syntax() if not input
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              if not JSLINT input, options
         
     | 
| 
      
 51 
     | 
    
         
            +
                JSLINT.errors.forEach (error) ->
         
     | 
| 
      
 52 
     | 
    
         
            +
                  if error
         
     | 
| 
      
 53 
     | 
    
         
            +
                    print "Lint at line #{error.line} character #{error.character}: #{error.reason}"
         
     | 
| 
      
 54 
     | 
    
         
            +
                    print (error.evidence or '').replace /^\s*(\S*(\s+\S+)*)\s*$/, "$1"
         
     | 
| 
      
 55 
     | 
    
         
            +
                    print ''
         
     | 
| 
      
 56 
     | 
    
         
            +
                quit 2
         
     | 
| 
      
 57 
     | 
    
         
            +
              else
         
     | 
| 
      
 58 
     | 
    
         
            +
                print "jslint: No problems found in #{input_filename}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                quit 0
         
     | 
    
        data/jslint/rhino.js
    CHANGED
    
    | 
         @@ -1,59 +1,75 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            // rhino.js
         
     | 
| 
       2 
     | 
    
         
            -
            // 2009-09-11
         
     | 
| 
       3 
1 
     | 
    
         
             
            /*
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 2 
     | 
    
         
            +
              rhino.js
         
     | 
| 
      
 3 
     | 
    
         
            +
              2009-09-11
         
     | 
| 
      
 4 
     | 
    
         
            +
              Copyright (c) 2002 Douglas Crockford  (www.JSLint.com) Rhino Edition
         
     | 
| 
       6 
5 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
              Converted to CoffeeScript by Geraud Boyer
         
     | 
| 
       8 
7 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            /*jslint rhino: true, strict: false */
         
     | 
| 
      
 8 
     | 
    
         
            +
              This is the Rhino companion to fulljslint.js.
         
     | 
| 
       11 
9 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                 
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                 
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
                                    e.character + ': ' + e.reason);
         
     | 
| 
       49 
     | 
    
         
            -
                            print((e.evidence || '').
         
     | 
| 
       50 
     | 
    
         
            -
                                    replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
         
     | 
| 
       51 
     | 
    
         
            -
                            print('');
         
     | 
| 
       52 
     | 
    
         
            -
                        }
         
     | 
| 
       53 
     | 
    
         
            -
                    }
         
     | 
| 
       54 
     | 
    
         
            -
                    quit(2);
         
     | 
| 
      
 10 
     | 
    
         
            +
            */
         
     | 
| 
      
 11 
     | 
    
         
            +
            /*global JSLINT
         
     | 
| 
      
 12 
     | 
    
         
            +
            */
         
     | 
| 
      
 13 
     | 
    
         
            +
            /*jslint rhino: true, strict: false
         
     | 
| 
      
 14 
     | 
    
         
            +
            */(function(arguments) {
         
     | 
| 
      
 15 
     | 
    
         
            +
              var arg, input, input_filename, options, print_syntax, _fn, _i, _len;
         
     | 
| 
      
 16 
     | 
    
         
            +
              print_syntax = function() {
         
     | 
| 
      
 17 
     | 
    
         
            +
                sys.puts('Usage: jslint.js [options] file.js');
         
     | 
| 
      
 18 
     | 
    
         
            +
                return quit(1);
         
     | 
| 
      
 19 
     | 
    
         
            +
              };
         
     | 
| 
      
 20 
     | 
    
         
            +
              if (!arguments[0]) {
         
     | 
| 
      
 21 
     | 
    
         
            +
                print_syntax();
         
     | 
| 
      
 22 
     | 
    
         
            +
              }
         
     | 
| 
      
 23 
     | 
    
         
            +
              options = {
         
     | 
| 
      
 24 
     | 
    
         
            +
                rhino: false,
         
     | 
| 
      
 25 
     | 
    
         
            +
                node: false,
         
     | 
| 
      
 26 
     | 
    
         
            +
                passfail: false,
         
     | 
| 
      
 27 
     | 
    
         
            +
                strict: false,
         
     | 
| 
      
 28 
     | 
    
         
            +
                bitwise: true,
         
     | 
| 
      
 29 
     | 
    
         
            +
                newcap: true,
         
     | 
| 
      
 30 
     | 
    
         
            +
                nomen: true,
         
     | 
| 
      
 31 
     | 
    
         
            +
                onevar: true,
         
     | 
| 
      
 32 
     | 
    
         
            +
                plusplus: true,
         
     | 
| 
      
 33 
     | 
    
         
            +
                regexp: true,
         
     | 
| 
      
 34 
     | 
    
         
            +
                undef: true,
         
     | 
| 
      
 35 
     | 
    
         
            +
                white: true
         
     | 
| 
      
 36 
     | 
    
         
            +
              };
         
     | 
| 
      
 37 
     | 
    
         
            +
              input = null;
         
     | 
| 
      
 38 
     | 
    
         
            +
              input_filename = null;
         
     | 
| 
      
 39 
     | 
    
         
            +
              _fn = function(arg) {
         
     | 
| 
      
 40 
     | 
    
         
            +
                if (arg.match(/^--no-(\w+)$/)) {
         
     | 
| 
      
 41 
     | 
    
         
            +
                  options[RegExp.$1] = false;
         
     | 
| 
      
 42 
     | 
    
         
            +
                } else if (arg.match(/^--(\w+)=(\S.*)$/)) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                  options[RegExp.$1] = JSON.parse(RegExp.$2);
         
     | 
| 
      
 44 
     | 
    
         
            +
                } else if (arg.match(/^--(\w+)$/)) {
         
     | 
| 
      
 45 
     | 
    
         
            +
                  options[RegExp.$1] = true;
         
     | 
| 
       55 
46 
     | 
    
         
             
                } else {
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
      
 47 
     | 
    
         
            +
                  input_filename = arg;
         
     | 
| 
      
 48 
     | 
    
         
            +
                  input = readFile(input_filename);
         
     | 
| 
      
 49 
     | 
    
         
            +
                  if (!input) {
         
     | 
| 
      
 50 
     | 
    
         
            +
                    print("jslint: Couldn't open file '" + input_filename + "'.");
         
     | 
| 
      
 51 
     | 
    
         
            +
                    quit(1);
         
     | 
| 
      
 52 
     | 
    
         
            +
                  }
         
     | 
| 
       58 
53 
     | 
    
         
             
                }
         
     | 
| 
       59 
     | 
    
         
            -
            } 
     | 
| 
      
 54 
     | 
    
         
            +
              };
         
     | 
| 
      
 55 
     | 
    
         
            +
              for (_i = 0, _len = arguments.length; _i < _len; _i++) {
         
     | 
| 
      
 56 
     | 
    
         
            +
                arg = arguments[_i];
         
     | 
| 
      
 57 
     | 
    
         
            +
                _fn(arg);
         
     | 
| 
      
 58 
     | 
    
         
            +
              }
         
     | 
| 
      
 59 
     | 
    
         
            +
              if (!input) {
         
     | 
| 
      
 60 
     | 
    
         
            +
                print_syntax();
         
     | 
| 
      
 61 
     | 
    
         
            +
              }
         
     | 
| 
      
 62 
     | 
    
         
            +
              if (!JSLINT(input, options)) {
         
     | 
| 
      
 63 
     | 
    
         
            +
                JSLINT.errors.forEach(function(error) {
         
     | 
| 
      
 64 
     | 
    
         
            +
                  if (error) {
         
     | 
| 
      
 65 
     | 
    
         
            +
                    print("Lint at line " + error.line + " character " + error.character + ": " + error.reason);
         
     | 
| 
      
 66 
     | 
    
         
            +
                    print((error.evidence || '').replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1"));
         
     | 
| 
      
 67 
     | 
    
         
            +
                    return print('');
         
     | 
| 
      
 68 
     | 
    
         
            +
                  }
         
     | 
| 
      
 69 
     | 
    
         
            +
                });
         
     | 
| 
      
 70 
     | 
    
         
            +
                return quit(2);
         
     | 
| 
      
 71 
     | 
    
         
            +
              } else {
         
     | 
| 
      
 72 
     | 
    
         
            +
                print("jslint: No problems found in " + input_filename);
         
     | 
| 
      
 73 
     | 
    
         
            +
                return quit(0);
         
     | 
| 
      
 74 
     | 
    
         
            +
              }
         
     | 
| 
      
 75 
     | 
    
         
            +
            })(arguments);
         
     |