coffeelint 1.9.1 → 1.10.0.pre.patch.1
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.
- checksums.yaml +7 -0
- data/README.md +2 -2
- data/coffeelint/lib/coffeelint.js +236 -69
- data/lib/coffeelint.rb +3 -3
- data/lib/coffeelint/version.rb +1 -1
- data/lib/tasks/coffeelint.rake +2 -2
- data/spec/config_spec.rb +1 -1
- metadata +23 -35
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 7720f637d2867a5667ef76f393504a66af63150f
         | 
| 4 | 
            +
              data.tar.gz: fccb84fdb0d07e5da9d45787eafca17e88fd533a
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: e1132114822ce18e09c6661b557fde784ffeeb3150a72dd568eb147dddd456d318e8e0b2508eff81ed2f7a5fca1647e28b209e1871dc70590c5b8b5e8ae9dd25
         | 
| 7 | 
            +
              data.tar.gz: 0c6fcb815fca593829c6e05d0edb0f2afdec674299f037b188e8947450ca3ce46700d0a7f4c3a0c644d55eac5274b897b07a4042572af5eadd5253a2b3f75901
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # Coffeelint [](https://travis-ci.org/zmbush/coffeelint-ruby) [](http://badge.fury.io/rb/coffeelint)
         | 
| 2 2 |  | 
| 3 | 
            -
            Using coffeelint version: v1. | 
| 3 | 
            +
            Using coffeelint version: v1.10.0
         | 
| 4 4 |  | 
| 5 5 | 
             
            Coffeelint is a set of simple ruby bindings for [coffeelint](https://github.com/clutchski/coffeelint).
         | 
| 6 6 |  | 
| @@ -36,7 +36,7 @@ Coffeelint.lint_dir(directory, [config_options]) do |filename, lint_report| | |
| 36 36 | 
             
                Coffeelint.display_test_results(filename, lint_report)
         | 
| 37 37 | 
             
            end
         | 
| 38 38 | 
             
            Coffeelint.run_test(filename of coffeescript source, [config_options]) # Run tests and print pretty results (return true/false)
         | 
| 39 | 
            -
            Coffeelint.run_test_suite(directory, [config_options]) # Runs a pretty report recursively for a directory ( | 
| 39 | 
            +
            Coffeelint.run_test_suite(directory, [config_options]) # Runs a pretty report recursively for a directory (returns/exits with number of errors if any or 0)
         | 
| 40 40 | 
             
            ```
         | 
| 41 41 |  | 
| 42 42 | 
             
            ### Config Options
         | 
| @@ -6,7 +6,7 @@ CoffeeLint | |
| 6 6 | 
             
            Copyright (c) 2011 Matthew Perpick.
         | 
| 7 7 | 
             
            CoffeeLint is freely distributable under the MIT license.
         | 
| 8 8 | 
             
             */
         | 
| 9 | 
            -
            var ASTLinter, CoffeeScript, ERROR, ErrorReport, IGNORE, LexicalLinter, LineLinter, RULES, WARN, _rules, cache, coffeelint, defaults, difference, extend, hasSyntaxError, mergeDefaultConfig, nodeRequire, packageJSON,
         | 
| 9 | 
            +
            var ASTLinter, CoffeeScript, ERROR, ErrorReport, IGNORE, LexicalLinter, LineLinter, RULES, WARN, _rules, cache, coffeelint, defaults, difference, extend, hasSyntaxError, mergeDefaultConfig, nodeRequire, packageJSON, sameJSON,
         | 
| 10 10 | 
             
              slice = [].slice,
         | 
| 11 11 | 
             
              indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
         | 
| 12 12 |  | 
| @@ -78,8 +78,15 @@ ASTLinter = require('./ast_linter.coffee'); | |
| 78 78 | 
             
            cache = null;
         | 
| 79 79 |  | 
| 80 80 | 
             
            mergeDefaultConfig = function(userConfig) {
         | 
| 81 | 
            -
              var config, rule, ruleConfig;
         | 
| 81 | 
            +
              var config, rule, ruleConfig, ruleLoader;
         | 
| 82 | 
            +
              try {
         | 
| 83 | 
            +
                ruleLoader = nodeRequire('./ruleLoader');
         | 
| 84 | 
            +
                ruleLoader.loadFromConfig(coffeelint, userConfig);
         | 
| 85 | 
            +
              } catch (_error) {}
         | 
| 82 86 | 
             
              config = {};
         | 
| 87 | 
            +
              if (userConfig.coffeelint) {
         | 
| 88 | 
            +
                config.coffeelint = userConfig.coffeelint;
         | 
| 89 | 
            +
              }
         | 
| 83 90 | 
             
              for (rule in RULES) {
         | 
| 84 91 | 
             
                ruleConfig = RULES[rule];
         | 
| 85 92 | 
             
                config[rule] = defaults(userConfig[rule], ruleConfig);
         | 
| @@ -87,6 +94,50 @@ mergeDefaultConfig = function(userConfig) { | |
| 87 94 | 
             
              return config;
         | 
| 88 95 | 
             
            };
         | 
| 89 96 |  | 
| 97 | 
            +
            sameJSON = function(a, b) {
         | 
| 98 | 
            +
              return JSON.stringify(a) === JSON.stringify(b);
         | 
| 99 | 
            +
            };
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            coffeelint.trimConfig = function(userConfig) {
         | 
| 102 | 
            +
              var config, dConfig, dValue, key, newConfig, ref, rule, value;
         | 
| 103 | 
            +
              newConfig = {};
         | 
| 104 | 
            +
              userConfig = mergeDefaultConfig(userConfig);
         | 
| 105 | 
            +
              for (rule in userConfig) {
         | 
| 106 | 
            +
                config = userConfig[rule];
         | 
| 107 | 
            +
                dConfig = RULES[rule];
         | 
| 108 | 
            +
                if (rule === 'coffeelint') {
         | 
| 109 | 
            +
                  config.transforms = config._transforms;
         | 
| 110 | 
            +
                  delete config._transforms;
         | 
| 111 | 
            +
                  config.coffeescript = config._coffeescript;
         | 
| 112 | 
            +
                  delete config._coffeescript;
         | 
| 113 | 
            +
                  newConfig[rule] = config;
         | 
| 114 | 
            +
                } else if ((config.level === (ref = dConfig.level) && ref === 'ignore')) {
         | 
| 115 | 
            +
                  void 0;
         | 
| 116 | 
            +
                } else if (config.level === 'ignore') {
         | 
| 117 | 
            +
                  newConfig[rule] = {
         | 
| 118 | 
            +
                    level: 'ignore'
         | 
| 119 | 
            +
                  };
         | 
| 120 | 
            +
                } else {
         | 
| 121 | 
            +
                  config.module = config._module;
         | 
| 122 | 
            +
                  delete config._module;
         | 
| 123 | 
            +
                  for (key in config) {
         | 
| 124 | 
            +
                    value = config[key];
         | 
| 125 | 
            +
                    if (key === 'message' || key === 'description' || key === 'name') {
         | 
| 126 | 
            +
                      continue;
         | 
| 127 | 
            +
                    }
         | 
| 128 | 
            +
                    dValue = dConfig[key];
         | 
| 129 | 
            +
                    if (value !== dValue && !sameJSON(value, dValue)) {
         | 
| 130 | 
            +
                      if (newConfig[rule] == null) {
         | 
| 131 | 
            +
                        newConfig[rule] = {};
         | 
| 132 | 
            +
                      }
         | 
| 133 | 
            +
                      newConfig[rule][key] = value;
         | 
| 134 | 
            +
                    }
         | 
| 135 | 
            +
                  }
         | 
| 136 | 
            +
                }
         | 
| 137 | 
            +
              }
         | 
| 138 | 
            +
              return newConfig;
         | 
| 139 | 
            +
            };
         | 
| 140 | 
            +
             | 
| 90 141 | 
             
            coffeelint.invertLiterate = function(source) {
         | 
| 91 142 | 
             
              var len, line, n, newSource, ref;
         | 
| 92 143 | 
             
              source = CoffeeScript.helpers.invertLiterate(source);
         | 
| @@ -221,6 +272,10 @@ coffeelint.registerRule(require('./rules/transform_messes_up_line_numbers.coffee | |
| 221 272 |  | 
| 222 273 | 
             
            coffeelint.registerRule(require('./rules/ensure_comprehensions.coffee'));
         | 
| 223 274 |  | 
| 275 | 
            +
            coffeelint.registerRule(require('./rules/no_this.coffee'));
         | 
| 276 | 
            +
             | 
| 277 | 
            +
            coffeelint.registerRule(require('./rules/eol_last.coffee'));
         | 
| 278 | 
            +
             | 
| 224 279 | 
             
            hasSyntaxError = function(source) {
         | 
| 225 280 | 
             
              try {
         | 
| 226 281 | 
             
                CoffeeScript.tokens(source);
         | 
| @@ -244,10 +299,6 @@ coffeelint.lint = function(source, userConfig, literate) { | |
| 244 299 | 
             
                literate = false;
         | 
| 245 300 | 
             
              }
         | 
| 246 301 | 
             
              errors = [];
         | 
| 247 | 
            -
              try {
         | 
| 248 | 
            -
                ruleLoader = nodeRequire('./ruleLoader');
         | 
| 249 | 
            -
                ruleLoader.loadFromConfig(this, userConfig);
         | 
| 250 | 
            -
              } catch (_error) {}
         | 
| 251 302 | 
             
              if (cache != null) {
         | 
| 252 303 | 
             
                cache.setConfig(userConfig);
         | 
| 253 304 | 
             
              }
         | 
| @@ -263,15 +314,17 @@ coffeelint.lint = function(source, userConfig, literate) { | |
| 263 314 | 
             
                ref2 = userConfig != null ? (ref1 = userConfig.coffeelint) != null ? ref1.transforms : void 0 : void 0;
         | 
| 264 315 | 
             
                for (n = 0, len = ref2.length; n < len; n++) {
         | 
| 265 316 | 
             
                  m = ref2[n];
         | 
| 266 | 
            -
                   | 
| 267 | 
            -
             | 
| 317 | 
            +
                  try {
         | 
| 318 | 
            +
                    ruleLoader = nodeRequire('./ruleLoader');
         | 
| 319 | 
            +
                    transform = ruleLoader.require(m);
         | 
| 320 | 
            +
                    source = transform(source);
         | 
| 321 | 
            +
                  } catch (_error) {}
         | 
| 268 322 | 
             
                }
         | 
| 269 323 | 
             
                if (sourceLength !== source.split("\n").length && config.transform_messes_up_line_numbers.level !== 'ignore') {
         | 
| 270 324 | 
             
                  errors.push(extend({
         | 
| 271 325 | 
             
                    lineNumber: 1,
         | 
| 272 326 | 
             
                    context: "File was transformed from " + sourceLength + " lines to " + (source.split("\n").length) + " lines"
         | 
| 273 327 | 
             
                  }, config.transform_messes_up_line_numbers));
         | 
| 274 | 
            -
                  console.log(errors);
         | 
| 275 328 | 
             
                }
         | 
| 276 329 | 
             
              }
         | 
| 277 330 | 
             
              if ((userConfig != null ? (ref3 = userConfig.coffeelint) != null ? ref3.coffeescript : void 0 : void 0) != null) {
         | 
| @@ -368,11 +421,11 @@ coffeelint.setCache = function(obj) { | |
| 368 421 |  | 
| 369 422 |  | 
| 370 423 |  | 
| 371 | 
            -
            },{"./../package.json":2,"./ast_linter.coffee":3,"./error_report.coffee":5,"./lexical_linter.coffee":6,"./line_linter.coffee":7,"./rules.coffee":8,"./rules/arrow_spacing.coffee":9,"./rules/braces_spacing.coffee":10,"./rules/camel_case_classes.coffee":11,"./rules/colon_assignment_spacing.coffee":12,"./rules/cyclomatic_complexity.coffee":13,"./rules/duplicate_key.coffee":14,"./rules/empty_constructor_needs_parens.coffee":15,"./rules/ensure_comprehensions.coffee":16,"./rules/ | 
| 424 | 
            +
            },{"./../package.json":2,"./ast_linter.coffee":3,"./error_report.coffee":5,"./lexical_linter.coffee":6,"./line_linter.coffee":7,"./rules.coffee":8,"./rules/arrow_spacing.coffee":9,"./rules/braces_spacing.coffee":10,"./rules/camel_case_classes.coffee":11,"./rules/colon_assignment_spacing.coffee":12,"./rules/cyclomatic_complexity.coffee":13,"./rules/duplicate_key.coffee":14,"./rules/empty_constructor_needs_parens.coffee":15,"./rules/ensure_comprehensions.coffee":16,"./rules/eol_last.coffee":17,"./rules/indentation.coffee":18,"./rules/line_endings.coffee":19,"./rules/max_line_length.coffee":20,"./rules/missing_fat_arrows.coffee":21,"./rules/newlines_after_classes.coffee":22,"./rules/no_backticks.coffee":23,"./rules/no_debugger.coffee":24,"./rules/no_empty_functions.coffee":25,"./rules/no_empty_param_list.coffee":26,"./rules/no_implicit_braces.coffee":27,"./rules/no_implicit_parens.coffee":28,"./rules/no_interpolation_in_single_quotes.coffee":29,"./rules/no_plusplus.coffee":30,"./rules/no_stand_alone_at.coffee":31,"./rules/no_tabs.coffee":32,"./rules/no_this.coffee":33,"./rules/no_throwing_strings.coffee":34,"./rules/no_trailing_semicolons.coffee":35,"./rules/no_trailing_whitespace.coffee":36,"./rules/no_unnecessary_double_quotes.coffee":37,"./rules/no_unnecessary_fat_arrows.coffee":38,"./rules/non_empty_constructor_needs_parens.coffee":39,"./rules/prefer_english_operator.coffee":40,"./rules/space_operators.coffee":41,"./rules/spacing_after_comma.coffee":42,"./rules/transform_messes_up_line_numbers.coffee":43}],2:[function(require,module,exports){
         | 
| 372 425 | 
             
            module.exports={
         | 
| 373 426 | 
             
              "name": "coffeelint",
         | 
| 374 427 | 
             
              "description": "Lint your CoffeeScript",
         | 
| 375 | 
            -
              "version": "1. | 
| 428 | 
            +
              "version": "1.10.0",
         | 
| 376 429 | 
             
              "homepage": "http://www.coffeelint.org",
         | 
| 377 430 | 
             
              "keywords": [
         | 
| 378 431 | 
             
                "lint",
         | 
| @@ -399,21 +452,18 @@ module.exports={ | |
| 399 452 | 
             
                "glob": "^4.0.0",
         | 
| 400 453 | 
             
                "ignore": "^2.2.15",
         | 
| 401 454 | 
             
                "optimist": "^0.6.1",
         | 
| 402 | 
            -
                "resolve": "^0.6.3"
         | 
| 455 | 
            +
                "resolve": "^0.6.3",
         | 
| 456 | 
            +
                "strip-json-comments": "^1.0.2"
         | 
| 403 457 | 
             
              },
         | 
| 404 458 | 
             
              "devDependencies": {
         | 
| 405 459 | 
             
                "vows": ">=0.6.0",
         | 
| 406 460 | 
             
                "underscore": ">=1.4.4"
         | 
| 407 461 | 
             
              },
         | 
| 408 | 
            -
              " | 
| 409 | 
            -
                {
         | 
| 410 | 
            -
                  "type": "MIT",
         | 
| 411 | 
            -
                  "url": "http://github.com/clutchski/coffeelint/raw/master/LICENSE"
         | 
| 412 | 
            -
                }
         | 
| 413 | 
            -
              ],
         | 
| 462 | 
            +
              "license": "MIT",
         | 
| 414 463 | 
             
              "scripts": {
         | 
| 415 464 | 
             
                "pretest": "cake compile",
         | 
| 416 465 | 
             
                "test": "./vowsrunner.js --spec test/*.coffee test/*.litcoffee",
         | 
| 466 | 
            +
                "testrule": "npm run compile && ./vowsrunner.js --spec",
         | 
| 417 467 | 
             
                "posttest": "npm run lint",
         | 
| 418 468 | 
             
                "prepublish": "cake prepublish",
         | 
| 419 469 | 
             
                "publish": "cake publish",
         | 
| @@ -1053,11 +1103,11 @@ module.exports = ArrowSpacing = (function() { | |
| 1053 1103 | 
             
              ArrowSpacing.prototype.rule = {
         | 
| 1054 1104 | 
             
                name: 'arrow_spacing',
         | 
| 1055 1105 | 
             
                level: 'ignore',
         | 
| 1056 | 
            -
                message: 'Function  | 
| 1106 | 
            +
                message: 'Function arrows (-> and =>) must be spaced properly',
         | 
| 1057 1107 | 
             
                description: "<p>This rule checks to see that there is spacing before and after\nthe arrow operator that declares a function. This rule is disabled\nby default.</p> <p>Note that if arrow_spacing is enabled, and you\npass an empty function as a parameter, arrow_spacing will accept\neither a space or no space in-between the arrow operator and the\nparenthesis</p>\n<pre><code># Both of this will not trigger an error,\n# even with arrow_spacing enabled.\nx(-> 3)\nx( -> 3)\n\n# However, this will trigger an error\nx((a,b)-> 3)\n</code>\n</pre>"
         | 
| 1058 1108 | 
             
              };
         | 
| 1059 1109 |  | 
| 1060 | 
            -
              ArrowSpacing.prototype.tokens = ['->'];
         | 
| 1110 | 
            +
              ArrowSpacing.prototype.tokens = ['->', '=>'];
         | 
| 1061 1111 |  | 
| 1062 1112 | 
             
              ArrowSpacing.prototype.lintToken = function(token, tokenApi) {
         | 
| 1063 1113 | 
             
                var pp;
         | 
| @@ -1100,8 +1150,9 @@ module.exports = BracesSpacing = (function() { | |
| 1100 1150 | 
             
                name: 'braces_spacing',
         | 
| 1101 1151 | 
             
                level: 'ignore',
         | 
| 1102 1152 | 
             
                spaces: 0,
         | 
| 1153 | 
            +
                empty_object_spaces: 0,
         | 
| 1103 1154 | 
             
                message: 'Curly braces must have the proper spacing',
         | 
| 1104 | 
            -
                description: 'This rule checks to see that there is the proper spacing inside\ncurly braces. The spacing amount is specified by "spaces".\n\n<pre><code>\n# Spaces is 0\n{a: b}     # Good\n{a: b }    # Bad\n{ a: b}    # Bad\n{ a: b }   # Bad\n\n# Spaces is 1\n{a: b}     # Bad\n{a: b }    # Bad\n{ a: b}    # Bad\n{ a: b }   # Good\n{ a: b  }  # Bad\n{  a: b }  # Bad\n{  a: b  } # Bad\n</code></pre>\n\nThis rule is disabled by default.'
         | 
| 1155 | 
            +
                description: 'This rule checks to see that there is the proper spacing inside\ncurly braces. The spacing amount is specified by "spaces".\nThe spacing amount for empty objects is specified by\n"empty_object_spaces".\n\n<pre><code>\n# Spaces is 0\n{a: b}     # Good\n{a: b }    # Bad\n{ a: b}    # Bad\n{ a: b }   # Bad\n\n# Spaces is 1\n{a: b}     # Bad\n{a: b }    # Bad\n{ a: b}    # Bad\n{ a: b }   # Good\n{ a: b  }  # Bad\n{  a: b }  # Bad\n{  a: b  } # Bad\n\n# Empty Object Spaces is 0\n{}         # Good\n{ }        # Bad\n\n# Empty Object Spaces is 1\n{}         # Bad\n{ }        # Good\n</code></pre>\n\nThis rule is disabled by default.'
         | 
| 1105 1156 | 
             
              };
         | 
| 1106 1157 |  | 
| 1107 1158 | 
             
              BracesSpacing.prototype.tokens = ['{', '}'];
         | 
| @@ -1127,6 +1178,16 @@ module.exports = BracesSpacing = (function() { | |
| 1127 1178 | 
             
                return firstToken[2].first_line === secondToken[2].first_line;
         | 
| 1128 1179 | 
             
              };
         | 
| 1129 1180 |  | 
| 1181 | 
            +
              BracesSpacing.prototype.getExpectedSpaces = function(tokenApi, firstToken, secondToken) {
         | 
| 1182 | 
            +
                var config, ref;
         | 
| 1183 | 
            +
                config = tokenApi.config[this.rule.name];
         | 
| 1184 | 
            +
                if (firstToken[0] === '{' && secondToken[0] === '}') {
         | 
| 1185 | 
            +
                  return (ref = config.empty_object_spaces) != null ? ref : config.spaces;
         | 
| 1186 | 
            +
                } else {
         | 
| 1187 | 
            +
                  return config.spaces;
         | 
| 1188 | 
            +
                }
         | 
| 1189 | 
            +
              };
         | 
| 1190 | 
            +
             | 
| 1130 1191 | 
             
              BracesSpacing.prototype.lintToken = function(token, tokenApi) {
         | 
| 1131 1192 | 
             
                var actual, expected, firstToken, msg, ref, secondToken;
         | 
| 1132 1193 | 
             
                if (token.generated) {
         | 
| @@ -1136,7 +1197,7 @@ module.exports = BracesSpacing = (function() { | |
| 1136 1197 | 
             
                if (!this.tokensOnSameLine(firstToken, secondToken)) {
         | 
| 1137 1198 | 
             
                  return null;
         | 
| 1138 1199 | 
             
                }
         | 
| 1139 | 
            -
                expected =  | 
| 1200 | 
            +
                expected = this.getExpectedSpaces(tokenApi, firstToken, secondToken);
         | 
| 1140 1201 | 
             
                actual = this.distanceBetweenTokens(firstToken, secondToken);
         | 
| 1141 1202 | 
             
                if (actual === expected) {
         | 
| 1142 1203 | 
             
                  return null;
         | 
| @@ -1162,7 +1223,7 @@ module.exports = BracesSpacing = (function() { | |
| 1162 1223 | 
             
            var CamelCaseClasses, regexes;
         | 
| 1163 1224 |  | 
| 1164 1225 | 
             
            regexes = {
         | 
| 1165 | 
            -
              camelCase: /^[A- | 
| 1226 | 
            +
              camelCase: /^[A-Z_][a-zA-Z\d]*$/
         | 
| 1166 1227 | 
             
            };
         | 
| 1167 1228 |  | 
| 1168 1229 | 
             
            module.exports = CamelCaseClasses = (function() {
         | 
| @@ -1171,8 +1232,8 @@ module.exports = CamelCaseClasses = (function() { | |
| 1171 1232 | 
             
              CamelCaseClasses.prototype.rule = {
         | 
| 1172 1233 | 
             
                name: 'camel_case_classes',
         | 
| 1173 1234 | 
             
                level: 'error',
         | 
| 1174 | 
            -
                message: 'Class  | 
| 1175 | 
            -
                description: "This rule mandates that all class names are  | 
| 1235 | 
            +
                message: 'Class name should be UpperCamelCased',
         | 
| 1236 | 
            +
                description: "This rule mandates that all class names are UpperCamelCased.\nCamel casing class names is a generally accepted way of\ndistinguishing constructor functions - which require the 'new'\nprefix to behave properly - from plain old functions.\n<pre>\n<code># Good!\nclass BoaConstrictor\n\n# Bad!\nclass boaConstrictor\n</code>\n</pre>\nThis rule is enabled by default."
         | 
| 1176 1237 | 
             
              };
         | 
| 1177 1238 |  | 
| 1178 1239 | 
             
              CamelCaseClasses.prototype.tokens = ['CLASS'];
         | 
| @@ -1407,17 +1468,24 @@ module.exports = EmptyConstructorNeedsParens = (function() { | |
| 1407 1468 | 
             
              EmptyConstructorNeedsParens.prototype.tokens = ['UNARY'];
         | 
| 1408 1469 |  | 
| 1409 1470 | 
             
              EmptyConstructorNeedsParens.prototype.lintToken = function(token, tokenApi) {
         | 
| 1410 | 
            -
                var expectedCallStart, expectedIdentifier, identifierIndex;
         | 
| 1471 | 
            +
                var expectedCallStart, expectedIdentifier, identifierIndex, peek, ref;
         | 
| 1411 1472 | 
             
                if (token[1] === 'new') {
         | 
| 1473 | 
            +
                  peek = tokenApi.peek.bind(tokenApi);
         | 
| 1412 1474 | 
             
                  identifierIndex = 1;
         | 
| 1413 1475 | 
             
                  while (true) {
         | 
| 1414 | 
            -
                    expectedIdentifier =  | 
| 1415 | 
            -
                    expectedCallStart =  | 
| 1476 | 
            +
                    expectedIdentifier = peek(identifierIndex);
         | 
| 1477 | 
            +
                    expectedCallStart = peek(identifierIndex + 1);
         | 
| 1416 1478 | 
             
                    if ((expectedIdentifier != null ? expectedIdentifier[0] : void 0) === 'IDENTIFIER') {
         | 
| 1417 1479 | 
             
                      if ((expectedCallStart != null ? expectedCallStart[0] : void 0) === '.') {
         | 
| 1418 1480 | 
             
                        identifierIndex += 2;
         | 
| 1419 1481 | 
             
                        continue;
         | 
| 1420 1482 | 
             
                      }
         | 
| 1483 | 
            +
                      if ((expectedCallStart != null ? expectedCallStart[0] : void 0) === 'INDEX_START') {
         | 
| 1484 | 
            +
                        while (((ref = peek(identifierIndex)) != null ? ref[0] : void 0) !== 'INDEX_END') {
         | 
| 1485 | 
            +
                          identifierIndex++;
         | 
| 1486 | 
            +
                        }
         | 
| 1487 | 
            +
                        continue;
         | 
| 1488 | 
            +
                      }
         | 
| 1421 1489 | 
             
                    }
         | 
| 1422 1490 | 
             
                    break;
         | 
| 1423 1491 | 
             
                  }
         | 
| @@ -1507,6 +1575,34 @@ module.exports = EnsureComprehensions = (function() { | |
| 1507 1575 |  | 
| 1508 1576 |  | 
| 1509 1577 | 
             
            },{}],17:[function(require,module,exports){
         | 
| 1578 | 
            +
            var EOLLast;
         | 
| 1579 | 
            +
             | 
| 1580 | 
            +
            module.exports = EOLLast = (function() {
         | 
| 1581 | 
            +
              function EOLLast() {}
         | 
| 1582 | 
            +
             | 
| 1583 | 
            +
              EOLLast.prototype.rule = {
         | 
| 1584 | 
            +
                name: 'eol_last',
         | 
| 1585 | 
            +
                level: 'ignore',
         | 
| 1586 | 
            +
                message: 'File does not end with a single newline',
         | 
| 1587 | 
            +
                description: "Checks that the file ends with a single newline"
         | 
| 1588 | 
            +
              };
         | 
| 1589 | 
            +
             | 
| 1590 | 
            +
              EOLLast.prototype.lintLine = function(line, lineApi) {
         | 
| 1591 | 
            +
                if (!lineApi.isLastLine()) {
         | 
| 1592 | 
            +
                  return null;
         | 
| 1593 | 
            +
                }
         | 
| 1594 | 
            +
                if (line.length) {
         | 
| 1595 | 
            +
                  return true;
         | 
| 1596 | 
            +
                }
         | 
| 1597 | 
            +
              };
         | 
| 1598 | 
            +
             | 
| 1599 | 
            +
              return EOLLast;
         | 
| 1600 | 
            +
             | 
| 1601 | 
            +
            })();
         | 
| 1602 | 
            +
             | 
| 1603 | 
            +
             | 
| 1604 | 
            +
             | 
| 1605 | 
            +
            },{}],18:[function(require,module,exports){
         | 
| 1510 1606 | 
             
            var Indentation;
         | 
| 1511 1607 |  | 
| 1512 1608 | 
             
            module.exports = Indentation = (function() {
         | 
| @@ -1631,7 +1727,7 @@ module.exports = Indentation = (function() { | |
| 1631 1727 |  | 
| 1632 1728 |  | 
| 1633 1729 |  | 
| 1634 | 
            -
            },{}], | 
| 1730 | 
            +
            },{}],19:[function(require,module,exports){
         | 
| 1635 1731 | 
             
            var LineEndings;
         | 
| 1636 1732 |  | 
| 1637 1733 | 
             
            module.exports = LineEndings = (function() {
         | 
| @@ -1676,7 +1772,7 @@ module.exports = LineEndings = (function() { | |
| 1676 1772 |  | 
| 1677 1773 |  | 
| 1678 1774 |  | 
| 1679 | 
            -
            },{}], | 
| 1775 | 
            +
            },{}],20:[function(require,module,exports){
         | 
| 1680 1776 | 
             
            var MaxLineLength, regexes;
         | 
| 1681 1777 |  | 
| 1682 1778 | 
             
            regexes = {
         | 
| @@ -1700,7 +1796,7 @@ module.exports = MaxLineLength = (function() { | |
| 1700 1796 | 
             
                var limitComments, lineLength, max, ref, ref1;
         | 
| 1701 1797 | 
             
                max = (ref = lineApi.config[this.rule.name]) != null ? ref.value : void 0;
         | 
| 1702 1798 | 
             
                limitComments = (ref1 = lineApi.config[this.rule.name]) != null ? ref1.limitComments : void 0;
         | 
| 1703 | 
            -
                lineLength = line. | 
| 1799 | 
            +
                lineLength = line.replace(/\s+$/, '').length;
         | 
| 1704 1800 | 
             
                if (lineApi.isLiterate() && regexes.literateComment.test(line)) {
         | 
| 1705 1801 | 
             
                  lineLength -= 2;
         | 
| 1706 1802 | 
             
                }
         | 
| @@ -1722,7 +1818,7 @@ module.exports = MaxLineLength = (function() { | |
| 1722 1818 |  | 
| 1723 1819 |  | 
| 1724 1820 |  | 
| 1725 | 
            -
            },{}], | 
| 1821 | 
            +
            },{}],21:[function(require,module,exports){
         | 
| 1726 1822 | 
             
            var MissingFatArrows, any, containsButIsnt,
         | 
| 1727 1823 | 
             
              bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
         | 
| 1728 1824 | 
             
              indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
         | 
| @@ -1761,8 +1857,9 @@ module.exports = MissingFatArrows = (function() { | |
| 1761 1857 | 
             
              MissingFatArrows.prototype.rule = {
         | 
| 1762 1858 | 
             
                name: 'missing_fat_arrows',
         | 
| 1763 1859 | 
             
                level: 'ignore',
         | 
| 1860 | 
            +
                is_strict: false,
         | 
| 1764 1861 | 
             
                message: 'Used `this` in a function without a fat arrow',
         | 
| 1765 | 
            -
                description: "Warns when you use `this` inside a function that wasn't defined\nwith a fat arrow. This rule does not apply to methods defined in a\nclass, since they have `this` bound to the class instance (or the\nclass itself, for class methods).\n\nIt is impossible to statically determine whether a function using\n`this` will be bound with the correct `this` value due to language\nfeatures like `Function.prototype.call` and\n`Function.prototype.bind`, so this rule may produce false positives."
         | 
| 1862 | 
            +
                description: "Warns when you use `this` inside a function that wasn't defined\nwith a fat arrow. This rule does not apply to methods defined in a\nclass, since they have `this` bound to the class instance (or the\nclass itself, for class methods). The option `is_strict` is\navailable for checking bindings of class methods.\n\nIt is impossible to statically determine whether a function using\n`this` will be bound with the correct `this` value due to language\nfeatures like `Function.prototype.call` and\n`Function.prototype.bind`, so this rule may produce false positives."
         | 
| 1766 1863 | 
             
              };
         | 
| 1767 1864 |  | 
| 1768 1865 | 
             
              MissingFatArrows.prototype.lintAST = function(node, astApi) {
         | 
| @@ -1772,11 +1869,15 @@ module.exports = MissingFatArrows = (function() { | |
| 1772 1869 | 
             
              };
         | 
| 1773 1870 |  | 
| 1774 1871 | 
             
              MissingFatArrows.prototype.lintNode = function(node, methods) {
         | 
| 1775 | 
            -
                var error;
         | 
| 1872 | 
            +
                var error, is_strict, ref;
         | 
| 1776 1873 | 
             
                if (methods == null) {
         | 
| 1777 1874 | 
             
                  methods = [];
         | 
| 1778 1875 | 
             
                }
         | 
| 1779 | 
            -
                 | 
| 1876 | 
            +
                is_strict = (ref = this.astApi.config[this.rule.name]) != null ? ref.is_strict : void 0;
         | 
| 1877 | 
            +
                if (this.isConstructor(node)) {
         | 
| 1878 | 
            +
                  return;
         | 
| 1879 | 
            +
                }
         | 
| 1880 | 
            +
                if ((!this.isFatArrowCode(node)) && (is_strict ? true : indexOf.call(methods, node) < 0) && (this.needsFatArrow(node))) {
         | 
| 1780 1881 | 
             
                  error = this.astApi.createError({
         | 
| 1781 1882 | 
             
                    lineNumber: node.locationData.first_line + 1
         | 
| 1782 1883 | 
             
                  });
         | 
| @@ -1822,6 +1923,11 @@ module.exports = MissingFatArrows = (function() { | |
| 1822 1923 | 
             
                return this.isCode(node) && node.bound;
         | 
| 1823 1924 | 
             
              };
         | 
| 1824 1925 |  | 
| 1926 | 
            +
              MissingFatArrows.prototype.isConstructor = function(node) {
         | 
| 1927 | 
            +
                var ref, ref1;
         | 
| 1928 | 
            +
                return ((ref = node.variable) != null ? (ref1 = ref.base) != null ? ref1.value : void 0 : void 0) === 'constructor';
         | 
| 1929 | 
            +
              };
         | 
| 1930 | 
            +
             | 
| 1825 1931 | 
             
              MissingFatArrows.prototype.needsFatArrow = function(node) {
         | 
| 1826 1932 | 
             
                return this.isCode(node) && (any(node.params, (function(_this) {
         | 
| 1827 1933 | 
             
                  return function(param) {
         | 
| @@ -1849,7 +1955,7 @@ module.exports = MissingFatArrows = (function() { | |
| 1849 1955 |  | 
| 1850 1956 |  | 
| 1851 1957 |  | 
| 1852 | 
            -
            },{}], | 
| 1958 | 
            +
            },{}],22:[function(require,module,exports){
         | 
| 1853 1959 | 
             
            var NewlinesAfterClasses;
         | 
| 1854 1960 |  | 
| 1855 1961 | 
             
            module.exports = NewlinesAfterClasses = (function() {
         | 
| @@ -1860,7 +1966,7 @@ module.exports = NewlinesAfterClasses = (function() { | |
| 1860 1966 | 
             
                value: 3,
         | 
| 1861 1967 | 
             
                level: 'ignore',
         | 
| 1862 1968 | 
             
                message: 'Wrong count of newlines between a class and other code',
         | 
| 1863 | 
            -
                description: "Checks the number of newlines between classes and other code"
         | 
| 1969 | 
            +
                description: "<p>Checks the number of newlines between classes and other code.</p>\n\nOptions:\n- <pre><code>value</code></pre> - The number of required newlines\nafter class definitions. Defaults to 3."
         | 
| 1864 1970 | 
             
              };
         | 
| 1865 1971 |  | 
| 1866 1972 | 
             
              NewlinesAfterClasses.prototype.lintLine = function(line, lineApi) {
         | 
| @@ -1885,7 +1991,7 @@ module.exports = NewlinesAfterClasses = (function() { | |
| 1885 1991 |  | 
| 1886 1992 |  | 
| 1887 1993 |  | 
| 1888 | 
            -
            },{}], | 
| 1994 | 
            +
            },{}],23:[function(require,module,exports){
         | 
| 1889 1995 | 
             
            var NoBackticks;
         | 
| 1890 1996 |  | 
| 1891 1997 | 
             
            module.exports = NoBackticks = (function() {
         | 
| @@ -1910,7 +2016,7 @@ module.exports = NoBackticks = (function() { | |
| 1910 2016 |  | 
| 1911 2017 |  | 
| 1912 2018 |  | 
| 1913 | 
            -
            },{}], | 
| 2019 | 
            +
            },{}],24:[function(require,module,exports){
         | 
| 1914 2020 | 
             
            var NoDebugger;
         | 
| 1915 2021 |  | 
| 1916 2022 | 
             
            module.exports = NoDebugger = (function() {
         | 
| @@ -1919,16 +2025,28 @@ module.exports = NoDebugger = (function() { | |
| 1919 2025 | 
             
              NoDebugger.prototype.rule = {
         | 
| 1920 2026 | 
             
                name: 'no_debugger',
         | 
| 1921 2027 | 
             
                level: 'warn',
         | 
| 1922 | 
            -
                message: ' | 
| 1923 | 
            -
                 | 
| 2028 | 
            +
                message: 'Found debugging code',
         | 
| 2029 | 
            +
                console: false,
         | 
| 2030 | 
            +
                description: "This rule detects `debugger` and optionally `console` calls\nThis rule is `warn` by default."
         | 
| 1924 2031 | 
             
              };
         | 
| 1925 2032 |  | 
| 1926 | 
            -
              NoDebugger.prototype.tokens = ["DEBUGGER"];
         | 
| 2033 | 
            +
              NoDebugger.prototype.tokens = ["DEBUGGER", "IDENTIFIER"];
         | 
| 1927 2034 |  | 
| 1928 2035 | 
             
              NoDebugger.prototype.lintToken = function(token, tokenApi) {
         | 
| 1929 | 
            -
                 | 
| 1930 | 
            -
             | 
| 1931 | 
            -
             | 
| 2036 | 
            +
                var method, ref, ref1;
         | 
| 2037 | 
            +
                if (token[0] === 'DEBUGGER') {
         | 
| 2038 | 
            +
                  return {
         | 
| 2039 | 
            +
                    context: "found '" + token[0] + "'"
         | 
| 2040 | 
            +
                  };
         | 
| 2041 | 
            +
                }
         | 
| 2042 | 
            +
                if ((ref = tokenApi.config[this.rule.name]) != null ? ref.console : void 0) {
         | 
| 2043 | 
            +
                  if (token[1] === 'console' && ((ref1 = tokenApi.peek(1)) != null ? ref1[0] : void 0) === '.') {
         | 
| 2044 | 
            +
                    method = tokenApi.peek(2);
         | 
| 2045 | 
            +
                    return {
         | 
| 2046 | 
            +
                      context: "found 'console." + method[1] + "'"
         | 
| 2047 | 
            +
                    };
         | 
| 2048 | 
            +
                  }
         | 
| 2049 | 
            +
                }
         | 
| 1932 2050 | 
             
              };
         | 
| 1933 2051 |  | 
| 1934 2052 | 
             
              return NoDebugger;
         | 
| @@ -1937,7 +2055,7 @@ module.exports = NoDebugger = (function() { | |
| 1937 2055 |  | 
| 1938 2056 |  | 
| 1939 2057 |  | 
| 1940 | 
            -
            },{}], | 
| 2058 | 
            +
            },{}],25:[function(require,module,exports){
         | 
| 1941 2059 | 
             
            var NoEmptyFunctions, isEmptyCode;
         | 
| 1942 2060 |  | 
| 1943 2061 | 
             
            isEmptyCode = function(node, astApi) {
         | 
| @@ -1982,7 +2100,7 @@ module.exports = NoEmptyFunctions = (function() { | |
| 1982 2100 |  | 
| 1983 2101 |  | 
| 1984 2102 |  | 
| 1985 | 
            -
            },{}], | 
| 2103 | 
            +
            },{}],26:[function(require,module,exports){
         | 
| 1986 2104 | 
             
            var NoEmptyParamList;
         | 
| 1987 2105 |  | 
| 1988 2106 | 
             
            module.exports = NoEmptyParamList = (function() {
         | 
| @@ -2009,7 +2127,7 @@ module.exports = NoEmptyParamList = (function() { | |
| 2009 2127 |  | 
| 2010 2128 |  | 
| 2011 2129 |  | 
| 2012 | 
            -
            },{}], | 
| 2130 | 
            +
            },{}],27:[function(require,module,exports){
         | 
| 2013 2131 | 
             
            var NoImplicitBraces;
         | 
| 2014 2132 |  | 
| 2015 2133 | 
             
            module.exports = NoImplicitBraces = (function() {
         | 
| @@ -2069,7 +2187,7 @@ module.exports = NoImplicitBraces = (function() { | |
| 2069 2187 |  | 
| 2070 2188 |  | 
| 2071 2189 |  | 
| 2072 | 
            -
            },{}], | 
| 2190 | 
            +
            },{}],28:[function(require,module,exports){
         | 
| 2073 2191 | 
             
            var NoImplicitParens;
         | 
| 2074 2192 |  | 
| 2075 2193 | 
             
            module.exports = NoImplicitParens = (function() {
         | 
| @@ -2112,7 +2230,7 @@ module.exports = NoImplicitParens = (function() { | |
| 2112 2230 |  | 
| 2113 2231 |  | 
| 2114 2232 |  | 
| 2115 | 
            -
            },{}], | 
| 2233 | 
            +
            },{}],29:[function(require,module,exports){
         | 
| 2116 2234 | 
             
            var NoInterpolationInSingleQuotes;
         | 
| 2117 2235 |  | 
| 2118 2236 | 
             
            module.exports = NoInterpolationInSingleQuotes = (function() {
         | 
| @@ -2130,7 +2248,7 @@ module.exports = NoInterpolationInSingleQuotes = (function() { | |
| 2130 2248 | 
             
              NoInterpolationInSingleQuotes.prototype.lintToken = function(token, tokenApi) {
         | 
| 2131 2249 | 
             
                var hasInterpolation, tokenValue;
         | 
| 2132 2250 | 
             
                tokenValue = token[1];
         | 
| 2133 | 
            -
                hasInterpolation = tokenValue.match( | 
| 2251 | 
            +
                hasInterpolation = tokenValue.match(/^\'.*#\{[^}]+\}.*\'$/);
         | 
| 2134 2252 | 
             
                return hasInterpolation;
         | 
| 2135 2253 | 
             
              };
         | 
| 2136 2254 |  | 
| @@ -2140,7 +2258,7 @@ module.exports = NoInterpolationInSingleQuotes = (function() { | |
| 2140 2258 |  | 
| 2141 2259 |  | 
| 2142 2260 |  | 
| 2143 | 
            -
            },{}], | 
| 2261 | 
            +
            },{}],30:[function(require,module,exports){
         | 
| 2144 2262 | 
             
            var NoPlusPlus;
         | 
| 2145 2263 |  | 
| 2146 2264 | 
             
            module.exports = NoPlusPlus = (function() {
         | 
| @@ -2167,7 +2285,7 @@ module.exports = NoPlusPlus = (function() { | |
| 2167 2285 |  | 
| 2168 2286 |  | 
| 2169 2287 |  | 
| 2170 | 
            -
            },{}], | 
| 2288 | 
            +
            },{}],31:[function(require,module,exports){
         | 
| 2171 2289 | 
             
            var NoStandAloneAt;
         | 
| 2172 2290 |  | 
| 2173 2291 | 
             
            module.exports = NoStandAloneAt = (function() {
         | 
| @@ -2204,7 +2322,7 @@ module.exports = NoStandAloneAt = (function() { | |
| 2204 2322 |  | 
| 2205 2323 |  | 
| 2206 2324 |  | 
| 2207 | 
            -
            },{}], | 
| 2325 | 
            +
            },{}],32:[function(require,module,exports){
         | 
| 2208 2326 | 
             
            var NoTabs, indentationRegex,
         | 
| 2209 2327 | 
             
              indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
         | 
| 2210 2328 |  | 
| @@ -2236,7 +2354,32 @@ module.exports = NoTabs = (function() { | |
| 2236 2354 |  | 
| 2237 2355 |  | 
| 2238 2356 |  | 
| 2239 | 
            -
            },{}], | 
| 2357 | 
            +
            },{}],33:[function(require,module,exports){
         | 
| 2358 | 
            +
            var NoThis;
         | 
| 2359 | 
            +
             | 
| 2360 | 
            +
            module.exports = NoThis = (function() {
         | 
| 2361 | 
            +
              function NoThis() {}
         | 
| 2362 | 
            +
             | 
| 2363 | 
            +
              NoThis.prototype.rule = {
         | 
| 2364 | 
            +
                name: 'no_this',
         | 
| 2365 | 
            +
                description: 'This rule prohibits \'this\'.\nUse \'@\' instead.',
         | 
| 2366 | 
            +
                level: 'ignore',
         | 
| 2367 | 
            +
                message: "Don't use 'this', use '@' instead"
         | 
| 2368 | 
            +
              };
         | 
| 2369 | 
            +
             | 
| 2370 | 
            +
              NoThis.prototype.tokens = ['THIS'];
         | 
| 2371 | 
            +
             | 
| 2372 | 
            +
              NoThis.prototype.lintToken = function(token, tokenApi) {
         | 
| 2373 | 
            +
                return true;
         | 
| 2374 | 
            +
              };
         | 
| 2375 | 
            +
             | 
| 2376 | 
            +
              return NoThis;
         | 
| 2377 | 
            +
             | 
| 2378 | 
            +
            })();
         | 
| 2379 | 
            +
             | 
| 2380 | 
            +
             | 
| 2381 | 
            +
             | 
| 2382 | 
            +
            },{}],34:[function(require,module,exports){
         | 
| 2240 2383 | 
             
            var NoThrowingStrings;
         | 
| 2241 2384 |  | 
| 2242 2385 | 
             
            module.exports = NoThrowingStrings = (function() {
         | 
| @@ -2264,7 +2407,7 @@ module.exports = NoThrowingStrings = (function() { | |
| 2264 2407 |  | 
| 2265 2408 |  | 
| 2266 2409 |  | 
| 2267 | 
            -
            },{}], | 
| 2410 | 
            +
            },{}],35:[function(require,module,exports){
         | 
| 2268 2411 | 
             
            var NoTrailingSemicolons, regexes,
         | 
| 2269 2412 | 
             
              indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
         | 
| 2270 2413 | 
             
              slice = [].slice;
         | 
| @@ -2317,7 +2460,7 @@ module.exports = NoTrailingSemicolons = (function() { | |
| 2317 2460 |  | 
| 2318 2461 |  | 
| 2319 2462 |  | 
| 2320 | 
            -
            },{}], | 
| 2463 | 
            +
            },{}],36:[function(require,module,exports){
         | 
| 2321 2464 | 
             
            var NoTrailingWhitespace, regexes;
         | 
| 2322 2465 |  | 
| 2323 2466 | 
             
            regexes = {
         | 
| @@ -2381,7 +2524,7 @@ module.exports = NoTrailingWhitespace = (function() { | |
| 2381 2524 |  | 
| 2382 2525 |  | 
| 2383 2526 |  | 
| 2384 | 
            -
            },{}], | 
| 2527 | 
            +
            },{}],37:[function(require,module,exports){
         | 
| 2385 2528 | 
             
            var NoUnnecessaryDoubleQuotes;
         | 
| 2386 2529 |  | 
| 2387 2530 | 
             
            module.exports = NoUnnecessaryDoubleQuotes = (function() {
         | 
| @@ -2400,7 +2543,7 @@ module.exports = NoUnnecessaryDoubleQuotes = (function() { | |
| 2400 2543 | 
             
              NoUnnecessaryDoubleQuotes.prototype.tokens = ['STRING', 'STRING_START', 'STRING_END'];
         | 
| 2401 2544 |  | 
| 2402 2545 | 
             
              NoUnnecessaryDoubleQuotes.prototype.lintToken = function(token, tokenApi) {
         | 
| 2403 | 
            -
                var hasLegalConstructs, stringValue, tokenValue, type;
         | 
| 2546 | 
            +
                var hasLegalConstructs, ref, stringValue, tokenValue, type;
         | 
| 2404 2547 | 
             
                type = token[0], tokenValue = token[1];
         | 
| 2405 2548 | 
             
                if (type === 'STRING_START' || type === 'STRING_END') {
         | 
| 2406 2549 | 
             
                  return this.trackParens.apply(this, arguments);
         | 
| @@ -2409,6 +2552,9 @@ module.exports = NoUnnecessaryDoubleQuotes = (function() { | |
| 2409 2552 | 
             
                if (!stringValue) {
         | 
| 2410 2553 | 
             
                  return false;
         | 
| 2411 2554 | 
             
                }
         | 
| 2555 | 
            +
                if (((ref = tokenApi.peek(2)) != null ? ref[0] : void 0) === 'REGEX_END') {
         | 
| 2556 | 
            +
                  return false;
         | 
| 2557 | 
            +
                }
         | 
| 2412 2558 | 
             
                hasLegalConstructs = this.isInterpolation || this.hasSingleQuote(tokenValue);
         | 
| 2413 2559 | 
             
                return !hasLegalConstructs;
         | 
| 2414 2560 | 
             
              };
         | 
| @@ -2432,7 +2578,7 @@ module.exports = NoUnnecessaryDoubleQuotes = (function() { | |
| 2432 2578 |  | 
| 2433 2579 |  | 
| 2434 2580 |  | 
| 2435 | 
            -
            },{}], | 
| 2581 | 
            +
            },{}],38:[function(require,module,exports){
         | 
| 2436 2582 | 
             
            var NoUnnecessaryFatArrows, any,
         | 
| 2437 2583 | 
             
              bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
         | 
| 2438 2584 |  | 
| @@ -2514,7 +2660,7 @@ module.exports = NoUnnecessaryFatArrows = (function() { | |
| 2514 2660 |  | 
| 2515 2661 |  | 
| 2516 2662 |  | 
| 2517 | 
            -
            },{}], | 
| 2663 | 
            +
            },{}],39:[function(require,module,exports){
         | 
| 2518 2664 | 
             
            var NonEmptyConstructorNeedsParens, ParentClass,
         | 
| 2519 2665 | 
             
              extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
         | 
| 2520 2666 | 
             
              hasProp = {}.hasOwnProperty;
         | 
| @@ -2547,7 +2693,7 @@ module.exports = NonEmptyConstructorNeedsParens = (function(superClass) { | |
| 2547 2693 |  | 
| 2548 2694 |  | 
| 2549 2695 |  | 
| 2550 | 
            -
            },{"./empty_constructor_needs_parens.coffee":15}], | 
| 2696 | 
            +
            },{"./empty_constructor_needs_parens.coffee":15}],40:[function(require,module,exports){
         | 
| 2551 2697 | 
             
            var RuleProcessor;
         | 
| 2552 2698 |  | 
| 2553 2699 | 
             
            module.exports = RuleProcessor = (function() {
         | 
| @@ -2609,7 +2755,7 @@ module.exports = RuleProcessor = (function() { | |
| 2609 2755 |  | 
| 2610 2756 |  | 
| 2611 2757 |  | 
| 2612 | 
            -
            },{}], | 
| 2758 | 
            +
            },{}],41:[function(require,module,exports){
         | 
| 2613 2759 | 
             
            var SpaceOperators,
         | 
| 2614 2760 | 
             
              indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
         | 
| 2615 2761 |  | 
| @@ -2714,12 +2860,10 @@ module.exports = SpaceOperators = (function() { | |
| 2714 2860 |  | 
| 2715 2861 |  | 
| 2716 2862 |  | 
| 2717 | 
            -
            },{}], | 
| 2863 | 
            +
            },{}],42:[function(require,module,exports){
         | 
| 2718 2864 | 
             
            var RuleProcessor;
         | 
| 2719 2865 |  | 
| 2720 2866 | 
             
            module.exports = RuleProcessor = (function() {
         | 
| 2721 | 
            -
              function RuleProcessor() {}
         | 
| 2722 | 
            -
             | 
| 2723 2867 | 
             
              RuleProcessor.prototype.rule = {
         | 
| 2724 2868 | 
             
                name: 'spacing_after_comma',
         | 
| 2725 2869 | 
             
                description: 'This rule requires a space after commas.',
         | 
| @@ -2727,23 +2871,46 @@ module.exports = RuleProcessor = (function() { | |
| 2727 2871 | 
             
                message: 'Spaces are required after commas'
         | 
| 2728 2872 | 
             
              };
         | 
| 2729 2873 |  | 
| 2730 | 
            -
              RuleProcessor.prototype.tokens = [','];
         | 
| 2874 | 
            +
              RuleProcessor.prototype.tokens = [',', 'REGEX_START', 'REGEX_END'];
         | 
| 2875 | 
            +
             | 
| 2876 | 
            +
              function RuleProcessor() {
         | 
| 2877 | 
            +
                this.inRegex = false;
         | 
| 2878 | 
            +
              }
         | 
| 2731 2879 |  | 
| 2732 2880 | 
             
              RuleProcessor.prototype.lintToken = function(token, tokenApi) {
         | 
| 2733 | 
            -
                 | 
| 2881 | 
            +
                var type;
         | 
| 2882 | 
            +
                type = token[0];
         | 
| 2883 | 
            +
                if (type === 'REGEX_START') {
         | 
| 2884 | 
            +
                  this.inRegex = true;
         | 
| 2885 | 
            +
                  return;
         | 
| 2886 | 
            +
                }
         | 
| 2887 | 
            +
                if (type === 'REGEX_END') {
         | 
| 2888 | 
            +
                  this.inRegex = false;
         | 
| 2889 | 
            +
                  return;
         | 
| 2890 | 
            +
                }
         | 
| 2891 | 
            +
                if (!(token.spaced || token.newLine || token.generated || this.isRegexFlag(token, tokenApi))) {
         | 
| 2734 2892 | 
             
                  return {
         | 
| 2735 2893 | 
             
                    context: token[1]
         | 
| 2736 2894 | 
             
                  };
         | 
| 2737 2895 | 
             
                }
         | 
| 2738 2896 | 
             
              };
         | 
| 2739 2897 |  | 
| 2898 | 
            +
              RuleProcessor.prototype.isRegexFlag = function(token, tokenApi) {
         | 
| 2899 | 
            +
                var maybeEnd;
         | 
| 2900 | 
            +
                if (!this.inRegex) {
         | 
| 2901 | 
            +
                  return false;
         | 
| 2902 | 
            +
                }
         | 
| 2903 | 
            +
                maybeEnd = tokenApi.peek(3);
         | 
| 2904 | 
            +
                return (maybeEnd != null ? maybeEnd[0] : void 0) === 'REGEX_END';
         | 
| 2905 | 
            +
              };
         | 
| 2906 | 
            +
             | 
| 2740 2907 | 
             
              return RuleProcessor;
         | 
| 2741 2908 |  | 
| 2742 2909 | 
             
            })();
         | 
| 2743 2910 |  | 
| 2744 2911 |  | 
| 2745 2912 |  | 
| 2746 | 
            -
            },{}], | 
| 2913 | 
            +
            },{}],43:[function(require,module,exports){
         | 
| 2747 2914 | 
             
            var CamelCaseClasses;
         | 
| 2748 2915 |  | 
| 2749 2916 | 
             
            module.exports = CamelCaseClasses = (function() {
         | 
    
        data/lib/coffeelint.rb
    CHANGED
    
    | @@ -107,11 +107,11 @@ module Coffeelint | |
| 107 107 |  | 
| 108 108 | 
             
              def self.run_test_suite(directory, config = {})
         | 
| 109 109 | 
             
                pretty_output = config.has_key?(:pretty_output) ? config.delete(:pretty_output) : true
         | 
| 110 | 
            -
                 | 
| 110 | 
            +
                errors_count = 0
         | 
| 111 111 | 
             
                Coffeelint.lint_dir(directory, config) do |name, errors|
         | 
| 112 | 
            +
                  errors_count += errors.count
         | 
| 112 113 | 
             
                  result = Coffeelint.display_test_results(name, errors, pretty_output)
         | 
| 113 | 
            -
                  success = false if not result
         | 
| 114 114 | 
             
                end
         | 
| 115 | 
            -
                 | 
| 115 | 
            +
                errors_count
         | 
| 116 116 | 
             
              end
         | 
| 117 117 | 
             
            end
         | 
    
        data/lib/coffeelint/version.rb
    CHANGED
    
    
    
        data/lib/tasks/coffeelint.rake
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 1 | 
             
            desc "lint application javascript"
         | 
| 2 2 | 
             
            task :coffeelint do
         | 
| 3 | 
            -
               | 
| 4 | 
            -
              fail "Lint!" unless  | 
| 3 | 
            +
              failures = Coffeelint.run_test_suite('app') + Coffeelint.run_test_suite('spec')
         | 
| 4 | 
            +
              fail "Lint!" unless failures == 0
         | 
| 5 5 | 
             
            end
         | 
    
        data/spec/config_spec.rb
    CHANGED
    
    | @@ -51,7 +51,7 @@ module CoffeeLint | |
| 51 51 | 
             
                      expect(Config.send(:config_files_in_path, [''])).to eq(result)
         | 
| 52 52 | 
             
                    end
         | 
| 53 53 |  | 
| 54 | 
            -
                    it 'builds  | 
| 54 | 
            +
                    it 'builds useful path segements' do
         | 
| 55 55 | 
             
                      result = %w(config/coffeelint.json config/.coffeelint.json)
         | 
| 56 56 | 
             
                      expect(Config.send(:config_files_in_path, 'config')).to eq(result)
         | 
| 57 57 | 
             
                      expect(Config.send(:config_files_in_path, ['config'])).to eq(result)
         | 
    
        metadata
    CHANGED
    
    | @@ -1,94 +1,83 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: coffeelint
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 1.10.0.pre.patch.1
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Zachary Bush
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 9 | 
             
            bindir: bin
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-08-19 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: coffee-script
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 | 
            -
                - -  | 
| 17 | 
            +
                - - ">="
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 19 | 
             
                    version: '0'
         | 
| 22 20 | 
             
              type: :runtime
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 | 
            -
                - -  | 
| 24 | 
            +
                - - ">="
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 26 | 
             
                    version: '0'
         | 
| 30 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 31 28 | 
             
              name: json
         | 
| 32 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 33 | 
            -
                none: false
         | 
| 34 30 | 
             
                requirements:
         | 
| 35 | 
            -
                - -  | 
| 31 | 
            +
                - - ">="
         | 
| 36 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 33 | 
             
                    version: '0'
         | 
| 38 34 | 
             
              type: :runtime
         | 
| 39 35 | 
             
              prerelease: false
         | 
| 40 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 | 
            -
                none: false
         | 
| 42 37 | 
             
                requirements:
         | 
| 43 | 
            -
                - -  | 
| 38 | 
            +
                - - ">="
         | 
| 44 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 45 40 | 
             
                    version: '0'
         | 
| 46 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 47 42 | 
             
              name: execjs
         | 
| 48 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 49 | 
            -
                none: false
         | 
| 50 44 | 
             
                requirements:
         | 
| 51 | 
            -
                - -  | 
| 45 | 
            +
                - - ">="
         | 
| 52 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 53 47 | 
             
                    version: '0'
         | 
| 54 48 | 
             
              type: :runtime
         | 
| 55 49 | 
             
              prerelease: false
         | 
| 56 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 57 | 
            -
                none: false
         | 
| 58 51 | 
             
                requirements:
         | 
| 59 | 
            -
                - -  | 
| 52 | 
            +
                - - ">="
         | 
| 60 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 54 | 
             
                    version: '0'
         | 
| 62 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 63 56 | 
             
              name: rspec
         | 
| 64 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 65 | 
            -
                none: false
         | 
| 66 58 | 
             
                requirements:
         | 
| 67 | 
            -
                - - ~>
         | 
| 59 | 
            +
                - - "~>"
         | 
| 68 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 69 61 | 
             
                    version: 3.1.0
         | 
| 70 62 | 
             
              type: :development
         | 
| 71 63 | 
             
              prerelease: false
         | 
| 72 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 73 | 
            -
                none: false
         | 
| 74 65 | 
             
                requirements:
         | 
| 75 | 
            -
                - - ~>
         | 
| 66 | 
            +
                - - "~>"
         | 
| 76 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 77 68 | 
             
                    version: 3.1.0
         | 
| 78 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 79 70 | 
             
              name: rake
         | 
| 80 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 81 | 
            -
                none: false
         | 
| 82 72 | 
             
                requirements:
         | 
| 83 | 
            -
                - -  | 
| 73 | 
            +
                - - ">="
         | 
| 84 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 85 75 | 
             
                    version: '0'
         | 
| 86 76 | 
             
              type: :development
         | 
| 87 77 | 
             
              prerelease: false
         | 
| 88 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 89 | 
            -
                none: false
         | 
| 90 79 | 
             
                requirements:
         | 
| 91 | 
            -
                - -  | 
| 80 | 
            +
                - - ">="
         | 
| 92 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 93 82 | 
             
                    version: '0'
         | 
| 94 83 | 
             
            description: Ruby bindings for coffeelint
         | 
| @@ -99,16 +88,17 @@ executables: | |
| 99 88 | 
             
            extensions: []
         | 
| 100 89 | 
             
            extra_rdoc_files: []
         | 
| 101 90 | 
             
            files:
         | 
| 102 | 
            -
            - .gitignore
         | 
| 103 | 
            -
            - .gitmodules
         | 
| 104 | 
            -
            - .rspec
         | 
| 105 | 
            -
            - .travis.yml
         | 
| 91 | 
            +
            - ".gitignore"
         | 
| 92 | 
            +
            - ".gitmodules"
         | 
| 93 | 
            +
            - ".rspec"
         | 
| 94 | 
            +
            - ".travis.yml"
         | 
| 106 95 | 
             
            - Gemfile
         | 
| 107 96 | 
             
            - LICENSE.txt
         | 
| 108 97 | 
             
            - README.md
         | 
| 109 98 | 
             
            - Rakefile
         | 
| 110 99 | 
             
            - bin/coffeelint.rb
         | 
| 111 100 | 
             
            - coffeelint.gemspec
         | 
| 101 | 
            +
            - coffeelint/lib/coffeelint.js
         | 
| 112 102 | 
             
            - lib/coffeelint.rb
         | 
| 113 103 | 
             
            - lib/coffeelint/cmd.rb
         | 
| 114 104 | 
             
            - lib/coffeelint/config.rb
         | 
| @@ -119,31 +109,29 @@ files: | |
| 119 109 | 
             
            - spec/coffeelint_spec.rb
         | 
| 120 110 | 
             
            - spec/config_spec.rb
         | 
| 121 111 | 
             
            - spec/spec_helper.rb
         | 
| 122 | 
            -
            - coffeelint/lib/coffeelint.js
         | 
| 123 112 | 
             
            homepage: https://github.com/zipcodeman/coffeelint-ruby
         | 
| 124 113 | 
             
            licenses:
         | 
| 125 114 | 
             
            - MIT
         | 
| 115 | 
            +
            metadata: {}
         | 
| 126 116 | 
             
            post_install_message: 
         | 
| 127 117 | 
             
            rdoc_options: []
         | 
| 128 118 | 
             
            require_paths:
         | 
| 129 119 | 
             
            - lib
         | 
| 130 120 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 131 | 
            -
              none: false
         | 
| 132 121 | 
             
              requirements:
         | 
| 133 | 
            -
              - -  | 
| 122 | 
            +
              - - ">="
         | 
| 134 123 | 
             
                - !ruby/object:Gem::Version
         | 
| 135 124 | 
             
                  version: '0'
         | 
| 136 125 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 137 | 
            -
              none: false
         | 
| 138 126 | 
             
              requirements:
         | 
| 139 | 
            -
              - -  | 
| 127 | 
            +
              - - ">"
         | 
| 140 128 | 
             
                - !ruby/object:Gem::Version
         | 
| 141 | 
            -
                  version:  | 
| 129 | 
            +
                  version: 1.3.1
         | 
| 142 130 | 
             
            requirements: []
         | 
| 143 131 | 
             
            rubyforge_project: 
         | 
| 144 | 
            -
            rubygems_version:  | 
| 132 | 
            +
            rubygems_version: 2.4.5
         | 
| 145 133 | 
             
            signing_key: 
         | 
| 146 | 
            -
            specification_version:  | 
| 134 | 
            +
            specification_version: 4
         | 
| 147 135 | 
             
            summary: Ruby bindings for coffeelint along with railtie to add rake task to rails
         | 
| 148 136 | 
             
            test_files:
         | 
| 149 137 | 
             
            - spec/assets/.coffeelint.json
         |