coffeelint 1.8.1 → 1.9.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Coffeelint [![Build Status](https://travis-ci.org/zmbush/coffeelint-ruby.svg?branch=master)](https://travis-ci.org/zmbush/coffeelint-ruby) [![Gem Version](https://badge.fury.io/rb/coffeelint.png)](http://badge.fury.io/rb/coffeelint)
2
2
 
3
- Using coffeelint version: v1.8.1
3
+ Using coffeelint version: v1.9.1
4
4
 
5
5
  Coffeelint is a set of simple ruby bindings for [coffeelint](https://github.com/clutchski/coffeelint).
6
6
 
@@ -50,6 +50,13 @@ Coffeelint.run_test_suite(directory, :config_file => 'coffeelint_config.json')
50
50
 
51
51
  Then it will load the config options from that file.
52
52
 
53
+ Alternatively you can create a config file in your project, coffeelint will load these by default:
54
+
55
+ * coffeelint.json
56
+ * .coffeelint.json
57
+ * config/coffeelint.json
58
+ * config/.coffeelint.json
59
+
53
60
  To use a local version of coffeelint instead of the one bundled with the gem, You can set the path with `Coffeelint.set_path(/path/to/coffeelint.js)`
54
61
 
55
62
  Additionally, if you are using rails you also get the rake task:
data/coffeelint.gemspec CHANGED
@@ -13,9 +13,7 @@ Gem::Specification.new do |gem|
13
13
  gem.homepage = "https://github.com/zipcodeman/coffeelint-ruby"
14
14
  gem.licenses = ["MIT"]
15
15
 
16
- gem.files = `git ls-files`.split($/)
17
- gem.files -= ['bin/coffeelint']
18
- gem.files << 'coffeelint/lib/coffeelint.js'
16
+ gem.files = `git ls-files`.split($/) + %w(coffeelint/lib/coffeelint.js) - %w(bin/coffeelint)
19
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
19
  gem.require_paths = ["lib"]
@@ -1,278 +1,4 @@
1
- !function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.coffeelint=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
2
- module.exports={
3
- "name": "coffeelint",
4
- "description": "Lint your CoffeeScript",
5
- "version": "1.8.1",
6
- "homepage": "http://www.coffeelint.org",
7
- "keywords": [
8
- "lint",
9
- "coffeescript",
10
- "coffee-script"
11
- ],
12
- "author": "Matthew Perpick <clutchski@gmail.com>",
13
- "main": "./lib/coffeelint.js",
14
- "engines": {
15
- "npm": ">=1.3.7",
16
- "node": ">=0.8.0"
17
- },
18
- "repository": {
19
- "type": "git",
20
- "url": "git://github.com/clutchski/coffeelint.git"
21
- },
22
- "bin": {
23
- "coffeelint": "./bin/coffeelint"
24
- },
25
- "dependencies": {
26
- "browserify": "~3.37",
27
- "coffee-script": "~1.7",
28
- "coffeeify": "~0.6.0",
29
- "glob": "^4.0.0",
30
- "ignore": "^2.2.15",
31
- "optimist": "^0.6.1",
32
- "resolve": "^0.6.3"
33
- },
34
- "devDependencies": {
35
- "vows": ">=0.6.0",
36
- "underscore": ">=1.4.4"
37
- },
38
- "licenses": [
39
- {
40
- "type": "MIT",
41
- "url": "http://github.com/clutchski/coffeelint/raw/master/LICENSE"
42
- }
43
- ],
44
- "scripts": {
45
- "pretest": "cake compile",
46
- "test": "./vowsrunner.js --spec test/*.coffee test/*.litcoffee",
47
- "posttest": "npm run lint",
48
- "prepublish": "cake prepublish",
49
- "publish": "cake publish",
50
- "install": "cake install",
51
- "lint": "cake compile && ./bin/coffeelint .",
52
- "lint-csv": "cake compile && ./bin/coffeelint --csv .",
53
- "lint-jslint": "cake compile && ./bin/coffeelint --jslint .",
54
- "compile": "cake compile"
55
- }
56
- }
57
-
58
- },{}],2:[function(_dereq_,module,exports){
59
- var ASTApi, ASTLinter, BaseLinter, hasChildren, node_children,
60
- __hasProp = {}.hasOwnProperty,
61
- __extends = 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; };
62
-
63
- BaseLinter = _dereq_('./base_linter.coffee');
64
-
65
- node_children = {
66
- Class: ['variable', 'parent', 'body'],
67
- Code: ['params', 'body'],
68
- For: ['body', 'source', 'guard', 'step'],
69
- If: ['condition', 'body', 'elseBody'],
70
- Obj: ['properties'],
71
- Op: ['first', 'second'],
72
- Switch: ['subject', 'cases', 'otherwise'],
73
- Try: ['attempt', 'recovery', 'ensure'],
74
- Value: ['base', 'properties'],
75
- While: ['condition', 'guard', 'body']
76
- };
77
-
78
- hasChildren = function(node, children) {
79
- var _ref;
80
- return (node != null ? (_ref = node.children) != null ? _ref.length : void 0 : void 0) === children.length && (node != null ? node.children.every(function(elem, i) {
81
- return elem === children[i];
82
- }) : void 0);
83
- };
84
-
85
- ASTApi = (function() {
86
- function ASTApi(config) {
87
- this.config = config;
88
- }
89
-
90
- ASTApi.prototype.getNodeName = function(node) {
91
- var children, name, _ref;
92
- name = node != null ? (_ref = node.constructor) != null ? _ref.name : void 0 : void 0;
93
- if (node_children[name]) {
94
- return name;
95
- } else {
96
- for (name in node_children) {
97
- if (!__hasProp.call(node_children, name)) continue;
98
- children = node_children[name];
99
- if (hasChildren(node, children)) {
100
- return name;
101
- }
102
- }
103
- }
104
- };
105
-
106
- return ASTApi;
107
-
108
- })();
109
-
110
- module.exports = ASTLinter = (function(_super) {
111
- __extends(ASTLinter, _super);
112
-
113
- function ASTLinter(source, config, rules, CoffeeScript) {
114
- this.CoffeeScript = CoffeeScript;
115
- ASTLinter.__super__.constructor.call(this, source, config, rules);
116
- this.astApi = new ASTApi(this.config);
117
- }
118
-
119
- ASTLinter.prototype.acceptRule = function(rule) {
120
- return typeof rule.lintAST === 'function';
121
- };
122
-
123
- ASTLinter.prototype.lint = function() {
124
- var coffeeError, err, errors, rule, v, _i, _len, _ref;
125
- errors = [];
126
- try {
127
- this.node = this.CoffeeScript.nodes(this.source);
128
- } catch (_error) {
129
- coffeeError = _error;
130
- err = this._parseCoffeeScriptError(coffeeError);
131
- if (err != null) {
132
- errors.push(err);
133
- }
134
- return errors;
135
- }
136
- _ref = this.rules;
137
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
138
- rule = _ref[_i];
139
- this.astApi.createError = (function(_this) {
140
- return function(attrs) {
141
- if (attrs == null) {
142
- attrs = {};
143
- }
144
- return _this.createError(rule.rule.name, attrs);
145
- };
146
- })(this);
147
- rule.errors = errors;
148
- v = this.normalizeResult(rule, rule.lintAST(this.node, this.astApi));
149
- if (v != null) {
150
- return v;
151
- }
152
- }
153
- return errors;
154
- };
155
-
156
- ASTLinter.prototype._parseCoffeeScriptError = function(coffeeError) {
157
- var attrs, lineNumber, match, message, rule;
158
- rule = this.config['coffeescript_error'];
159
- message = coffeeError.toString();
160
- lineNumber = -1;
161
- if (coffeeError.location != null) {
162
- lineNumber = coffeeError.location.first_line + 1;
163
- } else {
164
- match = /line (\d+)/.exec(message);
165
- if ((match != null ? match.length : void 0) > 1) {
166
- lineNumber = parseInt(match[1], 10);
167
- }
168
- }
169
- attrs = {
170
- message: message,
171
- level: rule.level,
172
- lineNumber: lineNumber
173
- };
174
- return this.createError('coffeescript_error', attrs);
175
- };
176
-
177
- return ASTLinter;
178
-
179
- })(BaseLinter);
180
-
181
-
182
- },{"./base_linter.coffee":3}],3:[function(_dereq_,module,exports){
183
- var BaseLinter, defaults, extend,
184
- __slice = [].slice;
185
-
186
- extend = function() {
187
- var destination, k, source, sources, v, _i, _len;
188
- destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
189
- for (_i = 0, _len = sources.length; _i < _len; _i++) {
190
- source = sources[_i];
191
- for (k in source) {
192
- v = source[k];
193
- destination[k] = v;
194
- }
195
- }
196
- return destination;
197
- };
198
-
199
- defaults = function(source, defaults) {
200
- return extend({}, defaults, source);
201
- };
202
-
203
- module.exports = BaseLinter = (function() {
204
- function BaseLinter(source, config, rules) {
205
- this.source = source;
206
- this.config = config;
207
- this.setupRules(rules);
208
- }
209
-
210
- BaseLinter.prototype.isObject = function(obj) {
211
- return obj === Object(obj);
212
- };
213
-
214
- BaseLinter.prototype.createError = function(ruleName, attrs) {
215
- var level;
216
- if (attrs == null) {
217
- attrs = {};
218
- }
219
- if (attrs.level == null) {
220
- attrs.level = this.config[ruleName].level;
221
- }
222
- level = attrs.level;
223
- if (level !== 'ignore' && level !== 'warn' && level !== 'error') {
224
- throw new Error("unknown level " + level);
225
- }
226
- if (level === 'error' || level === 'warn') {
227
- attrs.rule = ruleName;
228
- return defaults(attrs, this.config[ruleName]);
229
- } else {
230
- return null;
231
- }
232
- };
233
-
234
- BaseLinter.prototype.acceptRule = function(rule) {
235
- throw new Error("acceptRule needs to be overridden in the subclass");
236
- };
237
-
238
- BaseLinter.prototype.setupRules = function(rules) {
239
- var RuleConstructor, level, name, rule, _results;
240
- this.rules = [];
241
- _results = [];
242
- for (name in rules) {
243
- RuleConstructor = rules[name];
244
- level = this.config[name].level;
245
- if (level === 'error' || level === 'warn') {
246
- rule = new RuleConstructor(this, this.config);
247
- if (this.acceptRule(rule)) {
248
- _results.push(this.rules.push(rule));
249
- } else {
250
- _results.push(void 0);
251
- }
252
- } else if (level !== 'ignore') {
253
- throw new Error("unknown level " + level);
254
- } else {
255
- _results.push(void 0);
256
- }
257
- }
258
- return _results;
259
- };
260
-
261
- BaseLinter.prototype.normalizeResult = function(p, result) {
262
- if (result === true) {
263
- return this.createError(p.rule.name);
264
- }
265
- if (this.isObject(result)) {
266
- return this.createError(p.rule.name, result);
267
- }
268
- };
269
-
270
- return BaseLinter;
271
-
272
- })();
273
-
274
-
275
- },{}],4:[function(_dereq_,module,exports){
1
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.coffeelint=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
276
2
 
277
3
  /*
278
4
  CoffeeLint
@@ -280,21 +6,27 @@ CoffeeLint
280
6
  Copyright (c) 2011 Matthew Perpick.
281
7
  CoffeeLint is freely distributable under the MIT license.
282
8
  */
283
- var ASTLinter, CoffeeScript, ERROR, ErrorReport, IGNORE, LexicalLinter, LineLinter, RULES, WARN, cache, coffeelint, defaults, difference, extend, hasSyntaxError, mergeDefaultConfig, nodeRequire, packageJSON, _rules,
284
- __slice = [].slice,
285
- __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; };
9
+ var ASTLinter, CoffeeScript, ERROR, ErrorReport, IGNORE, LexicalLinter, LineLinter, RULES, WARN, _rules, cache, coffeelint, defaults, difference, extend, hasSyntaxError, mergeDefaultConfig, nodeRequire, packageJSON,
10
+ slice = [].slice,
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; };
286
12
 
287
13
  coffeelint = exports;
288
14
 
289
- nodeRequire = _dereq_;
15
+ nodeRequire = require;
290
16
 
291
17
  if (typeof window !== "undefined" && window !== null) {
292
18
  CoffeeScript = window.CoffeeScript;
293
- } else {
19
+ }
20
+
21
+ if (CoffeeScript == null) {
294
22
  CoffeeScript = nodeRequire('coffee-script');
295
23
  }
296
24
 
297
- packageJSON = _dereq_('./../package.json');
25
+ if (CoffeeScript == null) {
26
+ throw new Error('Unable to find CoffeeScript');
27
+ }
28
+
29
+ packageJSON = require('./../package.json');
298
30
 
299
31
  coffeelint.VERSION = packageJSON.version;
300
32
 
@@ -304,13 +36,13 @@ WARN = 'warn';
304
36
 
305
37
  IGNORE = 'ignore';
306
38
 
307
- coffeelint.RULES = RULES = _dereq_('./rules.coffee');
39
+ coffeelint.RULES = RULES = require('./rules.coffee');
308
40
 
309
41
  extend = function() {
310
- var destination, k, source, sources, v, _i, _len;
311
- destination = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
312
- for (_i = 0, _len = sources.length; _i < _len; _i++) {
313
- source = sources[_i];
42
+ var destination, k, len, n, source, sources, v;
43
+ destination = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];
44
+ for (n = 0, len = sources.length; n < len; n++) {
45
+ source = sources[n];
314
46
  for (k in source) {
315
47
  v = source[k];
316
48
  destination[k] = v;
@@ -324,24 +56,24 @@ defaults = function(source, defaults) {
324
56
  };
325
57
 
326
58
  difference = function(a, b) {
327
- var j, _ref, _results;
59
+ var j, ref, results;
328
60
  j = 0;
329
- _results = [];
61
+ results = [];
330
62
  while (j < a.length) {
331
- if (_ref = a[j], __indexOf.call(b, _ref) >= 0) {
332
- _results.push(a.splice(j, 1));
63
+ if (ref = a[j], indexOf.call(b, ref) >= 0) {
64
+ results.push(a.splice(j, 1));
333
65
  } else {
334
- _results.push(j++);
66
+ results.push(j++);
335
67
  }
336
68
  }
337
- return _results;
69
+ return results;
338
70
  };
339
71
 
340
- LineLinter = _dereq_('./line_linter.coffee');
72
+ LineLinter = require('./line_linter.coffee');
341
73
 
342
- LexicalLinter = _dereq_('./lexical_linter.coffee');
74
+ LexicalLinter = require('./lexical_linter.coffee');
343
75
 
344
- ASTLinter = _dereq_('./ast_linter.coffee');
76
+ ASTLinter = require('./ast_linter.coffee');
345
77
 
346
78
  cache = null;
347
79
 
@@ -356,17 +88,17 @@ mergeDefaultConfig = function(userConfig) {
356
88
  };
357
89
 
358
90
  coffeelint.invertLiterate = function(source) {
359
- var line, newSource, _i, _len, _ref;
91
+ var len, line, n, newSource, ref;
360
92
  source = CoffeeScript.helpers.invertLiterate(source);
361
93
  newSource = "";
362
- _ref = source.split("\n");
363
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
364
- line = _ref[_i];
94
+ ref = source.split("\n");
95
+ for (n = 0, len = ref.length; n < len; n++) {
96
+ line = ref[n];
365
97
  if (line.match(/^#/)) {
366
98
  line = line.replace(/\s*$/, '');
367
99
  }
368
100
  line = line.replace(/^\s{4}/g, '');
369
- newSource += "" + line + "\n";
101
+ newSource += line + "\n";
370
102
  }
371
103
  return newSource;
372
104
  };
@@ -374,12 +106,12 @@ coffeelint.invertLiterate = function(source) {
374
106
  _rules = {};
375
107
 
376
108
  coffeelint.registerRule = function(RuleConstructor, ruleName) {
377
- var e, name, p, _ref, _ref1;
109
+ var e, name, p, ref, ref1;
378
110
  if (ruleName == null) {
379
111
  ruleName = void 0;
380
112
  }
381
113
  p = new RuleConstructor;
382
- name = (p != null ? (_ref = p.rule) != null ? _ref.name : void 0 : void 0) || "(unknown)";
114
+ name = (p != null ? (ref = p.rule) != null ? ref.name : void 0 : void 0) || "(unknown)";
383
115
  e = function(msg) {
384
116
  throw new Error("Invalid rule: " + name + " " + msg);
385
117
  };
@@ -398,7 +130,7 @@ coffeelint.registerRule = function(RuleConstructor, ruleName) {
398
130
  if (p.rule.description == null) {
399
131
  e("Rule defaults require a description");
400
132
  }
401
- if ((_ref1 = p.rule.level) !== 'ignore' && _ref1 !== 'warn' && _ref1 !== 'error') {
133
+ if ((ref1 = p.rule.level) !== 'ignore' && ref1 !== 'warn' && ref1 !== 'error') {
402
134
  e("Default level must be 'ignore', 'warn', or 'error'");
403
135
  }
404
136
  if (typeof p.lintToken === 'function') {
@@ -413,79 +145,81 @@ coffeelint.registerRule = function(RuleConstructor, ruleName) {
413
145
  };
414
146
 
415
147
  coffeelint.getRules = function() {
416
- var key, output, _i, _len, _ref;
148
+ var key, len, n, output, ref;
417
149
  output = {};
418
- _ref = Object.keys(RULES).sort();
419
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
420
- key = _ref[_i];
150
+ ref = Object.keys(RULES).sort();
151
+ for (n = 0, len = ref.length; n < len; n++) {
152
+ key = ref[n];
421
153
  output[key] = RULES[key];
422
154
  }
423
155
  return output;
424
156
  };
425
157
 
426
- coffeelint.registerRule(_dereq_('./rules/arrow_spacing.coffee'));
158
+ coffeelint.registerRule(require('./rules/arrow_spacing.coffee'));
159
+
160
+ coffeelint.registerRule(require('./rules/braces_spacing.coffee'));
427
161
 
428
- coffeelint.registerRule(_dereq_('./rules/no_tabs.coffee'));
162
+ coffeelint.registerRule(require('./rules/no_tabs.coffee'));
429
163
 
430
- coffeelint.registerRule(_dereq_('./rules/no_trailing_whitespace.coffee'));
164
+ coffeelint.registerRule(require('./rules/no_trailing_whitespace.coffee'));
431
165
 
432
- coffeelint.registerRule(_dereq_('./rules/max_line_length.coffee'));
166
+ coffeelint.registerRule(require('./rules/max_line_length.coffee'));
433
167
 
434
- coffeelint.registerRule(_dereq_('./rules/line_endings.coffee'));
168
+ coffeelint.registerRule(require('./rules/line_endings.coffee'));
435
169
 
436
- coffeelint.registerRule(_dereq_('./rules/no_trailing_semicolons.coffee'));
170
+ coffeelint.registerRule(require('./rules/no_trailing_semicolons.coffee'));
437
171
 
438
- coffeelint.registerRule(_dereq_('./rules/indentation.coffee'));
172
+ coffeelint.registerRule(require('./rules/indentation.coffee'));
439
173
 
440
- coffeelint.registerRule(_dereq_('./rules/camel_case_classes.coffee'));
174
+ coffeelint.registerRule(require('./rules/camel_case_classes.coffee'));
441
175
 
442
- coffeelint.registerRule(_dereq_('./rules/colon_assignment_spacing.coffee'));
176
+ coffeelint.registerRule(require('./rules/colon_assignment_spacing.coffee'));
443
177
 
444
- coffeelint.registerRule(_dereq_('./rules/no_implicit_braces.coffee'));
178
+ coffeelint.registerRule(require('./rules/no_implicit_braces.coffee'));
445
179
 
446
- coffeelint.registerRule(_dereq_('./rules/no_plusplus.coffee'));
180
+ coffeelint.registerRule(require('./rules/no_plusplus.coffee'));
447
181
 
448
- coffeelint.registerRule(_dereq_('./rules/no_throwing_strings.coffee'));
182
+ coffeelint.registerRule(require('./rules/no_throwing_strings.coffee'));
449
183
 
450
- coffeelint.registerRule(_dereq_('./rules/no_backticks.coffee'));
184
+ coffeelint.registerRule(require('./rules/no_backticks.coffee'));
451
185
 
452
- coffeelint.registerRule(_dereq_('./rules/no_implicit_parens.coffee'));
186
+ coffeelint.registerRule(require('./rules/no_implicit_parens.coffee'));
453
187
 
454
- coffeelint.registerRule(_dereq_('./rules/no_empty_param_list.coffee'));
188
+ coffeelint.registerRule(require('./rules/no_empty_param_list.coffee'));
455
189
 
456
- coffeelint.registerRule(_dereq_('./rules/no_stand_alone_at.coffee'));
190
+ coffeelint.registerRule(require('./rules/no_stand_alone_at.coffee'));
457
191
 
458
- coffeelint.registerRule(_dereq_('./rules/space_operators.coffee'));
192
+ coffeelint.registerRule(require('./rules/space_operators.coffee'));
459
193
 
460
- coffeelint.registerRule(_dereq_('./rules/duplicate_key.coffee'));
194
+ coffeelint.registerRule(require('./rules/duplicate_key.coffee'));
461
195
 
462
- coffeelint.registerRule(_dereq_('./rules/empty_constructor_needs_parens.coffee'));
196
+ coffeelint.registerRule(require('./rules/empty_constructor_needs_parens.coffee'));
463
197
 
464
- coffeelint.registerRule(_dereq_('./rules/cyclomatic_complexity.coffee'));
198
+ coffeelint.registerRule(require('./rules/cyclomatic_complexity.coffee'));
465
199
 
466
- coffeelint.registerRule(_dereq_('./rules/newlines_after_classes.coffee'));
200
+ coffeelint.registerRule(require('./rules/newlines_after_classes.coffee'));
467
201
 
468
- coffeelint.registerRule(_dereq_('./rules/no_unnecessary_fat_arrows.coffee'));
202
+ coffeelint.registerRule(require('./rules/no_unnecessary_fat_arrows.coffee'));
469
203
 
470
- coffeelint.registerRule(_dereq_('./rules/missing_fat_arrows.coffee'));
204
+ coffeelint.registerRule(require('./rules/missing_fat_arrows.coffee'));
471
205
 
472
- coffeelint.registerRule(_dereq_('./rules/non_empty_constructor_needs_parens.coffee'));
206
+ coffeelint.registerRule(require('./rules/non_empty_constructor_needs_parens.coffee'));
473
207
 
474
- coffeelint.registerRule(_dereq_('./rules/no_unnecessary_double_quotes.coffee'));
208
+ coffeelint.registerRule(require('./rules/no_unnecessary_double_quotes.coffee'));
475
209
 
476
- coffeelint.registerRule(_dereq_('./rules/no_debugger.coffee'));
210
+ coffeelint.registerRule(require('./rules/no_debugger.coffee'));
477
211
 
478
- coffeelint.registerRule(_dereq_('./rules/no_interpolation_in_single_quotes.coffee'));
212
+ coffeelint.registerRule(require('./rules/no_interpolation_in_single_quotes.coffee'));
479
213
 
480
- coffeelint.registerRule(_dereq_('./rules/no_empty_functions.coffee'));
214
+ coffeelint.registerRule(require('./rules/no_empty_functions.coffee'));
481
215
 
482
- coffeelint.registerRule(_dereq_('./rules/prefer_english_operator.coffee'));
216
+ coffeelint.registerRule(require('./rules/prefer_english_operator.coffee'));
483
217
 
484
- coffeelint.registerRule(_dereq_('./rules/spacing_after_comma.coffee'));
218
+ coffeelint.registerRule(require('./rules/spacing_after_comma.coffee'));
485
219
 
486
- coffeelint.registerRule(_dereq_('./rules/transform_messes_up_line_numbers.coffee'));
220
+ coffeelint.registerRule(require('./rules/transform_messes_up_line_numbers.coffee'));
487
221
 
488
- coffeelint.registerRule(_dereq_('./rules/ensure_comprehensions.coffee'));
222
+ coffeelint.registerRule(require('./rules/ensure_comprehensions.coffee'));
489
223
 
490
224
  hasSyntaxError = function(source) {
491
225
  try {
@@ -495,14 +229,14 @@ hasSyntaxError = function(source) {
495
229
  return true;
496
230
  };
497
231
 
498
- ErrorReport = _dereq_('./error_report.coffee');
232
+ ErrorReport = require('./error_report.coffee');
499
233
 
500
234
  coffeelint.getErrorReport = function() {
501
235
  return new ErrorReport(coffeelint);
502
236
  };
503
237
 
504
238
  coffeelint.lint = function(source, userConfig, literate) {
505
- var all_errors, astErrors, block_config, cmd, config, disabled, disabled_initially, e, errors, i, l, lexErrors, lexicalLinter, lineErrors, lineLinter, m, name, next_line, r, ruleLoader, rules, s, sourceLength, tokensByLine, transform, _i, _j, _k, _l, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
239
+ var all_errors, astErrors, block_config, cmd, config, disabled, disabled_initially, e, errors, i, l, len, len1, len2, lexErrors, lexicalLinter, lineErrors, lineLinter, m, n, name, next_line, o, q, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ruleLoader, rules, s, sourceLength, t, tokensByLine, transform;
506
240
  if (userConfig == null) {
507
241
  userConfig = {};
508
242
  }
@@ -524,11 +258,11 @@ coffeelint.lint = function(source, userConfig, literate) {
524
258
  if (literate) {
525
259
  source = this.invertLiterate(source);
526
260
  }
527
- if ((userConfig != null ? (_ref = userConfig.coffeelint) != null ? _ref.transforms : void 0 : void 0) != null) {
261
+ if ((userConfig != null ? (ref = userConfig.coffeelint) != null ? ref.transforms : void 0 : void 0) != null) {
528
262
  sourceLength = source.split("\n").length;
529
- _ref2 = userConfig != null ? (_ref1 = userConfig.coffeelint) != null ? _ref1.transforms : void 0 : void 0;
530
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
531
- m = _ref2[_i];
263
+ ref2 = userConfig != null ? (ref1 = userConfig.coffeelint) != null ? ref1.transforms : void 0 : void 0;
264
+ for (n = 0, len = ref2.length; n < len; n++) {
265
+ m = ref2[n];
532
266
  transform = ruleLoader.require(m);
533
267
  source = transform(source);
534
268
  }
@@ -540,100 +274,377 @@ coffeelint.lint = function(source, userConfig, literate) {
540
274
  console.log(errors);
541
275
  }
542
276
  }
543
- if ((userConfig != null ? (_ref3 = userConfig.coffeelint) != null ? _ref3.coffeescript : void 0 : void 0) != null) {
544
- CoffeeScript = ruleLoader.require(userConfig.coffeelint.coffeescript);
277
+ if ((userConfig != null ? (ref3 = userConfig.coffeelint) != null ? ref3.coffeescript : void 0 : void 0) != null) {
278
+ CoffeeScript = ruleLoader.require(userConfig.coffeelint.coffeescript);
279
+ }
280
+ for (name in userConfig) {
281
+ if (name !== 'coffeescript_error' && name !== '_comment') {
282
+ if (_rules[name] == null) {
283
+ void 0;
284
+ }
285
+ }
286
+ }
287
+ disabled_initially = [];
288
+ ref4 = source.split('\n');
289
+ for (o = 0, len1 = ref4.length; o < len1; o++) {
290
+ l = ref4[o];
291
+ s = LineLinter.configStatement.exec(l);
292
+ if ((s != null ? s.length : void 0) > 2 && indexOf.call(s, 'enable') >= 0) {
293
+ ref5 = s.slice(1);
294
+ for (q = 0, len2 = ref5.length; q < len2; q++) {
295
+ r = ref5[q];
296
+ if (r !== 'enable' && r !== 'disable') {
297
+ if (!(r in config && ((ref6 = config[r].level) === 'warn' || ref6 === 'error'))) {
298
+ disabled_initially.push(r);
299
+ config[r] = {
300
+ level: 'error'
301
+ };
302
+ }
303
+ }
304
+ }
305
+ }
306
+ }
307
+ astErrors = new ASTLinter(source, config, _rules, CoffeeScript).lint();
308
+ errors = errors.concat(astErrors);
309
+ if (!hasSyntaxError(source)) {
310
+ lexicalLinter = new LexicalLinter(source, config, _rules, CoffeeScript);
311
+ lexErrors = lexicalLinter.lint();
312
+ errors = errors.concat(lexErrors);
313
+ tokensByLine = lexicalLinter.tokensByLine;
314
+ lineLinter = new LineLinter(source, config, _rules, tokensByLine, literate);
315
+ lineErrors = lineLinter.lint();
316
+ errors = errors.concat(lineErrors);
317
+ block_config = lineLinter.block_config;
318
+ } else {
319
+ block_config = {
320
+ enable: {},
321
+ disable: {}
322
+ };
323
+ }
324
+ errors.sort(function(a, b) {
325
+ return a.lineNumber - b.lineNumber;
326
+ });
327
+ all_errors = errors;
328
+ errors = [];
329
+ disabled = disabled_initially;
330
+ next_line = 0;
331
+ for (i = t = 0, ref7 = source.split('\n').length; 0 <= ref7 ? t < ref7 : t > ref7; i = 0 <= ref7 ? ++t : --t) {
332
+ for (cmd in block_config) {
333
+ rules = block_config[cmd][i];
334
+ if (rules != null) {
335
+ ({
336
+ 'disable': function() {
337
+ return disabled = disabled.concat(rules);
338
+ },
339
+ 'enable': function() {
340
+ difference(disabled, rules);
341
+ if (rules.length === 0) {
342
+ return disabled = disabled_initially;
343
+ }
344
+ }
345
+ })[cmd]();
346
+ }
347
+ }
348
+ while (next_line === i && all_errors.length > 0) {
349
+ next_line = all_errors[0].lineNumber - 1;
350
+ e = all_errors[0];
351
+ if (e.lineNumber === i + 1 || (e.lineNumber == null)) {
352
+ e = all_errors.shift();
353
+ if (ref8 = e.rule, indexOf.call(disabled, ref8) < 0) {
354
+ errors.push(e);
355
+ }
356
+ }
357
+ }
358
+ }
359
+ if (cache != null) {
360
+ cache.set(source, errors);
361
+ }
362
+ return errors;
363
+ };
364
+
365
+ coffeelint.setCache = function(obj) {
366
+ return cache = obj;
367
+ };
368
+
369
+
370
+
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/indentation.coffee":17,"./rules/line_endings.coffee":18,"./rules/max_line_length.coffee":19,"./rules/missing_fat_arrows.coffee":20,"./rules/newlines_after_classes.coffee":21,"./rules/no_backticks.coffee":22,"./rules/no_debugger.coffee":23,"./rules/no_empty_functions.coffee":24,"./rules/no_empty_param_list.coffee":25,"./rules/no_implicit_braces.coffee":26,"./rules/no_implicit_parens.coffee":27,"./rules/no_interpolation_in_single_quotes.coffee":28,"./rules/no_plusplus.coffee":29,"./rules/no_stand_alone_at.coffee":30,"./rules/no_tabs.coffee":31,"./rules/no_throwing_strings.coffee":32,"./rules/no_trailing_semicolons.coffee":33,"./rules/no_trailing_whitespace.coffee":34,"./rules/no_unnecessary_double_quotes.coffee":35,"./rules/no_unnecessary_fat_arrows.coffee":36,"./rules/non_empty_constructor_needs_parens.coffee":37,"./rules/prefer_english_operator.coffee":38,"./rules/space_operators.coffee":39,"./rules/spacing_after_comma.coffee":40,"./rules/transform_messes_up_line_numbers.coffee":41}],2:[function(require,module,exports){
372
+ module.exports={
373
+ "name": "coffeelint",
374
+ "description": "Lint your CoffeeScript",
375
+ "version": "1.9.1",
376
+ "homepage": "http://www.coffeelint.org",
377
+ "keywords": [
378
+ "lint",
379
+ "coffeescript",
380
+ "coffee-script"
381
+ ],
382
+ "author": "Matthew Perpick <clutchski@gmail.com>",
383
+ "main": "./lib/coffeelint.js",
384
+ "engines": {
385
+ "npm": ">=1.3.7",
386
+ "node": ">=0.8.0"
387
+ },
388
+ "repository": {
389
+ "type": "git",
390
+ "url": "git://github.com/clutchski/coffeelint.git"
391
+ },
392
+ "bin": {
393
+ "coffeelint": "./bin/coffeelint"
394
+ },
395
+ "dependencies": {
396
+ "browserify": "~8.1.0",
397
+ "coffee-script": "^1.9.1",
398
+ "coffeeify": "~1.0.0",
399
+ "glob": "^4.0.0",
400
+ "ignore": "^2.2.15",
401
+ "optimist": "^0.6.1",
402
+ "resolve": "^0.6.3"
403
+ },
404
+ "devDependencies": {
405
+ "vows": ">=0.6.0",
406
+ "underscore": ">=1.4.4"
407
+ },
408
+ "licenses": [
409
+ {
410
+ "type": "MIT",
411
+ "url": "http://github.com/clutchski/coffeelint/raw/master/LICENSE"
412
+ }
413
+ ],
414
+ "scripts": {
415
+ "pretest": "cake compile",
416
+ "test": "./vowsrunner.js --spec test/*.coffee test/*.litcoffee",
417
+ "posttest": "npm run lint",
418
+ "prepublish": "cake prepublish",
419
+ "publish": "cake publish",
420
+ "install": "cake install",
421
+ "lint": "cake compile && ./bin/coffeelint .",
422
+ "lint-csv": "cake compile && ./bin/coffeelint --csv .",
423
+ "lint-jslint": "cake compile && ./bin/coffeelint --jslint .",
424
+ "compile": "cake compile"
425
+ }
426
+ }
427
+
428
+ },{}],3:[function(require,module,exports){
429
+ var ASTApi, ASTLinter, BaseLinter, hasChildren, node_children,
430
+ hasProp = {}.hasOwnProperty,
431
+ 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; };
432
+
433
+ BaseLinter = require('./base_linter.coffee');
434
+
435
+ node_children = {
436
+ Class: ['variable', 'parent', 'body'],
437
+ Code: ['params', 'body'],
438
+ For: ['body', 'source', 'guard', 'step'],
439
+ If: ['condition', 'body', 'elseBody'],
440
+ Obj: ['properties'],
441
+ Op: ['first', 'second'],
442
+ Switch: ['subject', 'cases', 'otherwise'],
443
+ Try: ['attempt', 'recovery', 'ensure'],
444
+ Value: ['base', 'properties'],
445
+ While: ['condition', 'guard', 'body']
446
+ };
447
+
448
+ hasChildren = function(node, children) {
449
+ var ref;
450
+ return (node != null ? (ref = node.children) != null ? ref.length : void 0 : void 0) === children.length && (node != null ? node.children.every(function(elem, i) {
451
+ return elem === children[i];
452
+ }) : void 0);
453
+ };
454
+
455
+ ASTApi = (function() {
456
+ function ASTApi(config1) {
457
+ this.config = config1;
458
+ }
459
+
460
+ ASTApi.prototype.getNodeName = function(node) {
461
+ var children, name, ref;
462
+ name = node != null ? (ref = node.constructor) != null ? ref.name : void 0 : void 0;
463
+ if (node_children[name]) {
464
+ return name;
465
+ } else {
466
+ for (name in node_children) {
467
+ if (!hasProp.call(node_children, name)) continue;
468
+ children = node_children[name];
469
+ if (hasChildren(node, children)) {
470
+ return name;
471
+ }
472
+ }
473
+ }
474
+ };
475
+
476
+ return ASTApi;
477
+
478
+ })();
479
+
480
+ module.exports = ASTLinter = (function(superClass) {
481
+ extend(ASTLinter, superClass);
482
+
483
+ function ASTLinter(source, config, rules, CoffeeScript) {
484
+ this.CoffeeScript = CoffeeScript;
485
+ ASTLinter.__super__.constructor.call(this, source, config, rules);
486
+ this.astApi = new ASTApi(this.config);
487
+ }
488
+
489
+ ASTLinter.prototype.acceptRule = function(rule) {
490
+ return typeof rule.lintAST === 'function';
491
+ };
492
+
493
+ ASTLinter.prototype.lint = function() {
494
+ var coffeeError, err, errors, j, len, ref, rule, v;
495
+ errors = [];
496
+ try {
497
+ this.node = this.CoffeeScript.nodes(this.source);
498
+ } catch (_error) {
499
+ coffeeError = _error;
500
+ err = this._parseCoffeeScriptError(coffeeError);
501
+ if (err != null) {
502
+ errors.push(err);
503
+ }
504
+ return errors;
505
+ }
506
+ ref = this.rules;
507
+ for (j = 0, len = ref.length; j < len; j++) {
508
+ rule = ref[j];
509
+ this.astApi.createError = (function(_this) {
510
+ return function(attrs) {
511
+ if (attrs == null) {
512
+ attrs = {};
513
+ }
514
+ return _this.createError(rule.rule.name, attrs);
515
+ };
516
+ })(this);
517
+ rule.errors = errors;
518
+ v = this.normalizeResult(rule, rule.lintAST(this.node, this.astApi));
519
+ if (v != null) {
520
+ return v;
521
+ }
522
+ }
523
+ return errors;
524
+ };
525
+
526
+ ASTLinter.prototype._parseCoffeeScriptError = function(coffeeError) {
527
+ var attrs, lineNumber, match, message, rule;
528
+ rule = this.config['coffeescript_error'];
529
+ message = coffeeError.toString();
530
+ lineNumber = -1;
531
+ if (coffeeError.location != null) {
532
+ lineNumber = coffeeError.location.first_line + 1;
533
+ } else {
534
+ match = /line (\d+)/.exec(message);
535
+ if ((match != null ? match.length : void 0) > 1) {
536
+ lineNumber = parseInt(match[1], 10);
537
+ }
538
+ }
539
+ attrs = {
540
+ message: message,
541
+ level: rule.level,
542
+ lineNumber: lineNumber
543
+ };
544
+ return this.createError('coffeescript_error', attrs);
545
+ };
546
+
547
+ return ASTLinter;
548
+
549
+ })(BaseLinter);
550
+
551
+
552
+
553
+ },{"./base_linter.coffee":4}],4:[function(require,module,exports){
554
+ var BaseLinter, defaults, extend,
555
+ slice = [].slice;
556
+
557
+ extend = function() {
558
+ var destination, i, k, len, source, sources, v;
559
+ destination = arguments[0], sources = 2 <= arguments.length ? slice.call(arguments, 1) : [];
560
+ for (i = 0, len = sources.length; i < len; i++) {
561
+ source = sources[i];
562
+ for (k in source) {
563
+ v = source[k];
564
+ destination[k] = v;
565
+ }
566
+ }
567
+ return destination;
568
+ };
569
+
570
+ defaults = function(source, defaults) {
571
+ return extend({}, defaults, source);
572
+ };
573
+
574
+ module.exports = BaseLinter = (function() {
575
+ function BaseLinter(source1, config, rules) {
576
+ this.source = source1;
577
+ this.config = config;
578
+ this.setupRules(rules);
545
579
  }
546
- for (name in userConfig) {
547
- if (name !== 'coffeescript_error' && name !== '_comment') {
548
- if (_rules[name] == null) {
549
- void 0;
550
- }
580
+
581
+ BaseLinter.prototype.isObject = function(obj) {
582
+ return obj === Object(obj);
583
+ };
584
+
585
+ BaseLinter.prototype.createError = function(ruleName, attrs) {
586
+ var level;
587
+ if (attrs == null) {
588
+ attrs = {};
551
589
  }
552
- }
553
- disabled_initially = [];
554
- _ref4 = source.split('\n');
555
- for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
556
- l = _ref4[_j];
557
- s = LineLinter.configStatement.exec(l);
558
- if ((s != null ? s.length : void 0) > 2 && __indexOf.call(s, 'enable') >= 0) {
559
- _ref5 = s.slice(1);
560
- for (_k = 0, _len2 = _ref5.length; _k < _len2; _k++) {
561
- r = _ref5[_k];
562
- if (r !== 'enable' && r !== 'disable') {
563
- if (!(r in config && ((_ref6 = config[r].level) === 'warn' || _ref6 === 'error'))) {
564
- disabled_initially.push(r);
565
- config[r] = {
566
- level: 'error'
567
- };
568
- }
569
- }
570
- }
590
+ if (attrs.level == null) {
591
+ attrs.level = this.config[ruleName].level;
571
592
  }
572
- }
573
- astErrors = new ASTLinter(source, config, _rules, CoffeeScript).lint();
574
- errors = errors.concat(astErrors);
575
- if (!hasSyntaxError(source)) {
576
- lexicalLinter = new LexicalLinter(source, config, _rules, CoffeeScript);
577
- lexErrors = lexicalLinter.lint();
578
- errors = errors.concat(lexErrors);
579
- tokensByLine = lexicalLinter.tokensByLine;
580
- lineLinter = new LineLinter(source, config, _rules, tokensByLine, literate);
581
- lineErrors = lineLinter.lint();
582
- errors = errors.concat(lineErrors);
583
- block_config = lineLinter.block_config;
584
- } else {
585
- block_config = {
586
- enable: {},
587
- disable: {}
588
- };
589
- }
590
- errors.sort(function(a, b) {
591
- return a.lineNumber - b.lineNumber;
592
- });
593
- all_errors = errors;
594
- errors = [];
595
- disabled = disabled_initially;
596
- next_line = 0;
597
- for (i = _l = 0, _ref7 = source.split('\n').length; 0 <= _ref7 ? _l < _ref7 : _l > _ref7; i = 0 <= _ref7 ? ++_l : --_l) {
598
- for (cmd in block_config) {
599
- rules = block_config[cmd][i];
600
- if (rules != null) {
601
- ({
602
- 'disable': function() {
603
- return disabled = disabled.concat(rules);
604
- },
605
- 'enable': function() {
606
- difference(disabled, rules);
607
- if (rules.length === 0) {
608
- return disabled = disabled_initially;
609
- }
610
- }
611
- })[cmd]();
612
- }
593
+ level = attrs.level;
594
+ if (level !== 'ignore' && level !== 'warn' && level !== 'error') {
595
+ throw new Error("unknown level " + level);
613
596
  }
614
- while (next_line === i && all_errors.length > 0) {
615
- next_line = all_errors[0].lineNumber - 1;
616
- e = all_errors[0];
617
- if (e.lineNumber === i + 1 || (e.lineNumber == null)) {
618
- e = all_errors.shift();
619
- if (_ref8 = e.rule, __indexOf.call(disabled, _ref8) < 0) {
620
- errors.push(e);
597
+ if (level === 'error' || level === 'warn') {
598
+ attrs.rule = ruleName;
599
+ return defaults(attrs, this.config[ruleName]);
600
+ } else {
601
+ return null;
602
+ }
603
+ };
604
+
605
+ BaseLinter.prototype.acceptRule = function(rule) {
606
+ throw new Error("acceptRule needs to be overridden in the subclass");
607
+ };
608
+
609
+ BaseLinter.prototype.setupRules = function(rules) {
610
+ var RuleConstructor, level, name, results, rule;
611
+ this.rules = [];
612
+ results = [];
613
+ for (name in rules) {
614
+ RuleConstructor = rules[name];
615
+ level = this.config[name].level;
616
+ if (level === 'error' || level === 'warn') {
617
+ rule = new RuleConstructor(this, this.config);
618
+ if (this.acceptRule(rule)) {
619
+ results.push(this.rules.push(rule));
620
+ } else {
621
+ results.push(void 0);
621
622
  }
623
+ } else if (level !== 'ignore') {
624
+ throw new Error("unknown level " + level);
625
+ } else {
626
+ results.push(void 0);
622
627
  }
623
628
  }
624
- }
625
- if (cache != null) {
626
- cache.set(source, errors);
627
- }
628
- return errors;
629
- };
629
+ return results;
630
+ };
630
631
 
631
- coffeelint.setCache = function(obj) {
632
- return cache = obj;
633
- };
632
+ BaseLinter.prototype.normalizeResult = function(p, result) {
633
+ if (result === true) {
634
+ return this.createError(p.rule.name);
635
+ }
636
+ if (this.isObject(result)) {
637
+ return this.createError(p.rule.name, result);
638
+ }
639
+ };
640
+
641
+ return BaseLinter;
642
+
643
+ })();
634
644
 
635
645
 
636
- },{"./../package.json":1,"./ast_linter.coffee":2,"./error_report.coffee":5,"./lexical_linter.coffee":6,"./line_linter.coffee":7,"./rules.coffee":8,"./rules/arrow_spacing.coffee":9,"./rules/camel_case_classes.coffee":10,"./rules/colon_assignment_spacing.coffee":11,"./rules/cyclomatic_complexity.coffee":12,"./rules/duplicate_key.coffee":13,"./rules/empty_constructor_needs_parens.coffee":14,"./rules/ensure_comprehensions.coffee":15,"./rules/indentation.coffee":16,"./rules/line_endings.coffee":17,"./rules/max_line_length.coffee":18,"./rules/missing_fat_arrows.coffee":19,"./rules/newlines_after_classes.coffee":20,"./rules/no_backticks.coffee":21,"./rules/no_debugger.coffee":22,"./rules/no_empty_functions.coffee":23,"./rules/no_empty_param_list.coffee":24,"./rules/no_implicit_braces.coffee":25,"./rules/no_implicit_parens.coffee":26,"./rules/no_interpolation_in_single_quotes.coffee":27,"./rules/no_plusplus.coffee":28,"./rules/no_stand_alone_at.coffee":29,"./rules/no_tabs.coffee":30,"./rules/no_throwing_strings.coffee":31,"./rules/no_trailing_semicolons.coffee":32,"./rules/no_trailing_whitespace.coffee":33,"./rules/no_unnecessary_double_quotes.coffee":34,"./rules/no_unnecessary_fat_arrows.coffee":35,"./rules/non_empty_constructor_needs_parens.coffee":36,"./rules/prefer_english_operator.coffee":37,"./rules/space_operators.coffee":38,"./rules/spacing_after_comma.coffee":39,"./rules/transform_messes_up_line_numbers.coffee":40}],5:[function(_dereq_,module,exports){
646
+
647
+ },{}],5:[function(require,module,exports){
637
648
  var ErrorReport;
638
649
 
639
650
  module.exports = ErrorReport = (function() {
@@ -663,14 +674,14 @@ module.exports = ErrorReport = (function() {
663
674
  };
664
675
 
665
676
  ErrorReport.prototype.getSummary = function() {
666
- var error, errorCount, errors, path, pathCount, warningCount, _i, _len, _ref;
677
+ var error, errorCount, errors, i, len, path, pathCount, ref, warningCount;
667
678
  pathCount = errorCount = warningCount = 0;
668
- _ref = this.paths;
669
- for (path in _ref) {
670
- errors = _ref[path];
679
+ ref = this.paths;
680
+ for (path in ref) {
681
+ errors = ref[path];
671
682
  pathCount++;
672
- for (_i = 0, _len = errors.length; _i < _len; _i++) {
673
- error = errors[_i];
683
+ for (i = 0, len = errors.length; i < len; i++) {
684
+ error = errors[i];
674
685
  if (error.level === 'error') {
675
686
  errorCount++;
676
687
  }
@@ -709,10 +720,10 @@ module.exports = ErrorReport = (function() {
709
720
  };
710
721
 
711
722
  ErrorReport.prototype._hasLevel = function(path, level) {
712
- var error, _i, _len, _ref;
713
- _ref = this.paths[path];
714
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
715
- error = _ref[_i];
723
+ var error, i, len, ref;
724
+ ref = this.paths[path];
725
+ for (i = 0, len = ref.length; i < len; i++) {
726
+ error = ref[i];
716
727
  if (error.level === level) {
717
728
  return true;
718
729
  }
@@ -725,15 +736,16 @@ module.exports = ErrorReport = (function() {
725
736
  })();
726
737
 
727
738
 
728
- },{}],6:[function(_dereq_,module,exports){
739
+
740
+ },{}],6:[function(require,module,exports){
729
741
  var BaseLinter, LexicalLinter, TokenApi,
730
- __hasProp = {}.hasOwnProperty,
731
- __extends = 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; },
732
- __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; };
742
+ 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; },
743
+ hasProp = {}.hasOwnProperty,
744
+ 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; };
733
745
 
734
746
  TokenApi = (function() {
735
- function TokenApi(CoffeeScript, source, config, tokensByLine) {
736
- this.config = config;
747
+ function TokenApi(CoffeeScript, source, config1, tokensByLine) {
748
+ this.config = config1;
737
749
  this.tokensByLine = tokensByLine;
738
750
  this.tokens = CoffeeScript.tokens(source);
739
751
  this.lines = source.split('\n');
@@ -753,10 +765,10 @@ TokenApi = (function() {
753
765
 
754
766
  })();
755
767
 
756
- BaseLinter = _dereq_('./base_linter.coffee');
768
+ BaseLinter = require('./base_linter.coffee');
757
769
 
758
- module.exports = LexicalLinter = (function(_super) {
759
- __extends(LexicalLinter, _super);
770
+ module.exports = LexicalLinter = (function(superClass) {
771
+ extend(LexicalLinter, superClass);
760
772
 
761
773
  function LexicalLinter(source, config, rules, CoffeeScript) {
762
774
  LexicalLinter.__super__.constructor.call(this, source, config, rules);
@@ -769,15 +781,15 @@ module.exports = LexicalLinter = (function(_super) {
769
781
  };
770
782
 
771
783
  LexicalLinter.prototype.lint = function() {
772
- var error, errors, i, token, _i, _j, _len, _len1, _ref, _ref1;
784
+ var error, errors, i, j, k, len, len1, ref, ref1, token;
773
785
  errors = [];
774
- _ref = this.tokenApi.tokens;
775
- for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {
776
- token = _ref[i];
786
+ ref = this.tokenApi.tokens;
787
+ for (i = j = 0, len = ref.length; j < len; i = ++j) {
788
+ token = ref[i];
777
789
  this.tokenApi.i = i;
778
- _ref1 = this.lintToken(token);
779
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
780
- error = _ref1[_j];
790
+ ref1 = this.lintToken(token);
791
+ for (k = 0, len1 = ref1.length; k < len1; k++) {
792
+ error = ref1[k];
781
793
  errors.push(error);
782
794
  }
783
795
  }
@@ -785,7 +797,7 @@ module.exports = LexicalLinter = (function(_super) {
785
797
  };
786
798
 
787
799
  LexicalLinter.prototype.lintToken = function(token) {
788
- var errors, lineNumber, rule, type, v, value, _base, _i, _len, _ref, _ref1;
800
+ var base, errors, j, len, lineNumber, ref, ref1, rule, type, v, value;
789
801
  type = token[0], value = token[1], lineNumber = token[2];
790
802
  if (typeof lineNumber === "object") {
791
803
  if (type === 'OUTDENT' || type === 'INDENT') {
@@ -794,17 +806,17 @@ module.exports = LexicalLinter = (function(_super) {
794
806
  lineNumber = lineNumber.first_line;
795
807
  }
796
808
  }
797
- if ((_base = this.tokensByLine)[lineNumber] == null) {
798
- _base[lineNumber] = [];
809
+ if ((base = this.tokensByLine)[lineNumber] == null) {
810
+ base[lineNumber] = [];
799
811
  }
800
812
  this.tokensByLine[lineNumber].push(token);
801
813
  this.lineNumber = lineNumber || this.lineNumber || 0;
802
814
  this.tokenApi.lineNumber = this.lineNumber;
803
815
  errors = [];
804
- _ref = this.rules;
805
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
806
- rule = _ref[_i];
807
- if (!(_ref1 = token[0], __indexOf.call(rule.tokens, _ref1) >= 0)) {
816
+ ref = this.rules;
817
+ for (j = 0, len = ref.length; j < len; j++) {
818
+ rule = ref[j];
819
+ if (!(ref1 = token[0], indexOf.call(rule.tokens, ref1) >= 0)) {
808
820
  continue;
809
821
  }
810
822
  v = this.normalizeResult(rule, rule.lintToken(token, this.tokenApi));
@@ -829,16 +841,17 @@ module.exports = LexicalLinter = (function(_super) {
829
841
  })(BaseLinter);
830
842
 
831
843
 
832
- },{"./base_linter.coffee":3}],7:[function(_dereq_,module,exports){
844
+
845
+ },{"./base_linter.coffee":4}],7:[function(require,module,exports){
833
846
  var BaseLinter, LineApi, LineLinter, configStatement,
834
- __hasProp = {}.hasOwnProperty,
835
- __extends = 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; };
847
+ 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; },
848
+ hasProp = {}.hasOwnProperty;
836
849
 
837
850
  LineApi = (function() {
838
- function LineApi(source, config, tokensByLine, literate) {
839
- this.config = config;
840
- this.tokensByLine = tokensByLine;
841
- this.literate = literate;
851
+ function LineApi(source, config1, tokensByLine1, literate1) {
852
+ this.config = config1;
853
+ this.tokensByLine = tokensByLine1;
854
+ this.literate = literate1;
842
855
  this.line = null;
843
856
  this.lines = source.split('\n');
844
857
  this.lineCount = this.lines.length;
@@ -889,7 +902,7 @@ LineApi = (function() {
889
902
  };
890
903
 
891
904
  LineApi.prototype.lineHasToken = function(tokenType, lineNumber) {
892
- var token, tokens, _i, _len;
905
+ var i, len, token, tokens;
893
906
  if (tokenType == null) {
894
907
  tokenType = null;
895
908
  }
@@ -904,8 +917,8 @@ LineApi = (function() {
904
917
  if (tokens == null) {
905
918
  return null;
906
919
  }
907
- for (_i = 0, _len = tokens.length; _i < _len; _i++) {
908
- token = tokens[_i];
920
+ for (i = 0, len = tokens.length; i < len; i++) {
921
+ token = tokens[i];
909
922
  if (token[0] === tokenType) {
910
923
  return true;
911
924
  }
@@ -922,12 +935,12 @@ LineApi = (function() {
922
935
 
923
936
  })();
924
937
 
925
- BaseLinter = _dereq_('./base_linter.coffee');
938
+ BaseLinter = require('./base_linter.coffee');
926
939
 
927
940
  configStatement = /coffeelint:\s*(disable|enable)(?:=([\w\s,]*))?/;
928
941
 
929
- module.exports = LineLinter = (function(_super) {
930
- __extends(LineLinter, _super);
942
+ module.exports = LineLinter = (function(superClass) {
943
+ extend(LineLinter, superClass);
931
944
 
932
945
  LineLinter.configStatement = configStatement;
933
946
 
@@ -948,17 +961,17 @@ module.exports = LineLinter = (function(_super) {
948
961
  };
949
962
 
950
963
  LineLinter.prototype.lint = function() {
951
- var error, errors, line, lineNumber, _i, _j, _len, _len1, _ref, _ref1;
964
+ var error, errors, i, j, len, len1, line, lineNumber, ref, ref1;
952
965
  errors = [];
953
- _ref = this.lineApi.lines;
954
- for (lineNumber = _i = 0, _len = _ref.length; _i < _len; lineNumber = ++_i) {
955
- line = _ref[lineNumber];
966
+ ref = this.lineApi.lines;
967
+ for (lineNumber = i = 0, len = ref.length; i < len; lineNumber = ++i) {
968
+ line = ref[lineNumber];
956
969
  this.lineApi.lineNumber = this.lineNumber = lineNumber;
957
970
  this.lineApi.maintainClassContext(line);
958
971
  this.collectInlineConfig(line);
959
- _ref1 = this.lintLine(line);
960
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
961
- error = _ref1[_j];
972
+ ref1 = this.lintLine(line);
973
+ for (j = 0, len1 = ref1.length; j < len1; j++) {
974
+ error = ref1[j];
962
975
  errors.push(error);
963
976
  }
964
977
  }
@@ -966,11 +979,11 @@ module.exports = LineLinter = (function(_super) {
966
979
  };
967
980
 
968
981
  LineLinter.prototype.lintLine = function(line) {
969
- var errors, rule, v, _i, _len, _ref;
982
+ var errors, i, len, ref, rule, v;
970
983
  errors = [];
971
- _ref = this.rules;
972
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
973
- rule = _ref[_i];
984
+ ref = this.rules;
985
+ for (i = 0, len = ref.length; i < len; i++) {
986
+ rule = ref[i];
974
987
  v = this.normalizeResult(rule, rule.lintLine(line, this.lineApi));
975
988
  if (v != null) {
976
989
  errors.push(v);
@@ -980,15 +993,15 @@ module.exports = LineLinter = (function(_super) {
980
993
  };
981
994
 
982
995
  LineLinter.prototype.collectInlineConfig = function(line) {
983
- var cmd, r, result, rules, _i, _len, _ref;
996
+ var cmd, i, len, r, ref, result, rules;
984
997
  result = configStatement.exec(line);
985
998
  if (result != null) {
986
999
  cmd = result[1];
987
1000
  rules = [];
988
1001
  if (result[2] != null) {
989
- _ref = result[2].split(',');
990
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
991
- r = _ref[_i];
1002
+ ref = result[2].split(',');
1003
+ for (i = 0, len = ref.length; i < len; i++) {
1004
+ r = ref[i];
992
1005
  rules.push(r.replace(/^\s+|\s+$/g, ""));
993
1006
  }
994
1007
  }
@@ -998,12 +1011,12 @@ module.exports = LineLinter = (function(_super) {
998
1011
  };
999
1012
 
1000
1013
  LineLinter.prototype.createError = function(rule, attrs) {
1001
- var _ref;
1014
+ var ref;
1002
1015
  if (attrs == null) {
1003
1016
  attrs = {};
1004
1017
  }
1005
1018
  attrs.lineNumber = this.lineNumber + 1;
1006
- attrs.level = (_ref = this.config[rule]) != null ? _ref.level : void 0;
1019
+ attrs.level = (ref = this.config[rule]) != null ? ref.level : void 0;
1007
1020
  return LineLinter.__super__.createError.call(this, rule, attrs);
1008
1021
  };
1009
1022
 
@@ -1012,7 +1025,8 @@ module.exports = LineLinter = (function(_super) {
1012
1025
  })(BaseLinter);
1013
1026
 
1014
1027
 
1015
- },{"./base_linter.coffee":3}],8:[function(_dereq_,module,exports){
1028
+
1029
+ },{"./base_linter.coffee":4}],8:[function(require,module,exports){
1016
1030
  var ERROR, IGNORE, WARN;
1017
1031
 
1018
1032
  ERROR = 'error';
@@ -1029,7 +1043,8 @@ module.exports = {
1029
1043
  };
1030
1044
 
1031
1045
 
1032
- },{}],9:[function(_dereq_,module,exports){
1046
+
1047
+ },{}],9:[function(require,module,exports){
1033
1048
  var ArrowSpacing;
1034
1049
 
1035
1050
  module.exports = ArrowSpacing = (function() {
@@ -1057,12 +1072,12 @@ module.exports = ArrowSpacing = (function() {
1057
1072
  };
1058
1073
 
1059
1074
  ArrowSpacing.prototype.atEof = function(tokenApi) {
1060
- var i, token, tokens, _i, _len, _ref, _ref1;
1075
+ var i, j, len, ref, ref1, token, tokens;
1061
1076
  tokens = tokenApi.tokens, i = tokenApi.i;
1062
- _ref = tokens.slice(i + 1);
1063
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
1064
- token = _ref[_i];
1065
- if (!(token.generated || ((_ref1 = token[0]) === 'OUTDENT' || _ref1 === 'TERMINATOR'))) {
1077
+ ref = tokens.slice(i + 1);
1078
+ for (j = 0, len = ref.length; j < len; j++) {
1079
+ token = ref[j];
1080
+ if (!(token.generated || ((ref1 = token[0]) === 'OUTDENT' || ref1 === 'TERMINATOR'))) {
1066
1081
  return false;
1067
1082
  }
1068
1083
  }
@@ -1074,7 +1089,76 @@ module.exports = ArrowSpacing = (function() {
1074
1089
  })();
1075
1090
 
1076
1091
 
1077
- },{}],10:[function(_dereq_,module,exports){
1092
+
1093
+ },{}],10:[function(require,module,exports){
1094
+ var BracesSpacing;
1095
+
1096
+ module.exports = BracesSpacing = (function() {
1097
+ function BracesSpacing() {}
1098
+
1099
+ BracesSpacing.prototype.rule = {
1100
+ name: 'braces_spacing',
1101
+ level: 'ignore',
1102
+ spaces: 0,
1103
+ 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.'
1105
+ };
1106
+
1107
+ BracesSpacing.prototype.tokens = ['{', '}'];
1108
+
1109
+ BracesSpacing.prototype.distanceBetweenTokens = function(firstToken, secondToken) {
1110
+ return secondToken[2].first_column - firstToken[2].last_column - 1;
1111
+ };
1112
+
1113
+ BracesSpacing.prototype.findNearestToken = function(token, tokenApi, difference) {
1114
+ var nearestToken, totalDifference;
1115
+ totalDifference = 0;
1116
+ while (true) {
1117
+ totalDifference += difference;
1118
+ nearestToken = tokenApi.peek(totalDifference);
1119
+ if (nearestToken[0] === 'OUTDENT') {
1120
+ continue;
1121
+ }
1122
+ return nearestToken;
1123
+ }
1124
+ };
1125
+
1126
+ BracesSpacing.prototype.tokensOnSameLine = function(firstToken, secondToken) {
1127
+ return firstToken[2].first_line === secondToken[2].first_line;
1128
+ };
1129
+
1130
+ BracesSpacing.prototype.lintToken = function(token, tokenApi) {
1131
+ var actual, expected, firstToken, msg, ref, secondToken;
1132
+ if (token.generated) {
1133
+ return null;
1134
+ }
1135
+ ref = token[0] === '{' ? [token, this.findNearestToken(token, tokenApi, 1)] : [this.findNearestToken(token, tokenApi, -1), token], firstToken = ref[0], secondToken = ref[1];
1136
+ if (!this.tokensOnSameLine(firstToken, secondToken)) {
1137
+ return null;
1138
+ }
1139
+ expected = tokenApi.config[this.rule.name].spaces;
1140
+ actual = this.distanceBetweenTokens(firstToken, secondToken);
1141
+ if (actual === expected) {
1142
+ return null;
1143
+ } else {
1144
+ msg = "There should be " + expected + " space";
1145
+ if (expected !== 1) {
1146
+ msg += 's';
1147
+ }
1148
+ msg += " inside \"" + token[0] + "\"";
1149
+ return {
1150
+ context: msg
1151
+ };
1152
+ }
1153
+ };
1154
+
1155
+ return BracesSpacing;
1156
+
1157
+ })();
1158
+
1159
+
1160
+
1161
+ },{}],11:[function(require,module,exports){
1078
1162
  var CamelCaseClasses, regexes;
1079
1163
 
1080
1164
  regexes = {
@@ -1094,16 +1178,16 @@ module.exports = CamelCaseClasses = (function() {
1094
1178
  CamelCaseClasses.prototype.tokens = ['CLASS'];
1095
1179
 
1096
1180
  CamelCaseClasses.prototype.lintToken = function(token, tokenApi) {
1097
- var className, offset, _ref, _ref1, _ref2;
1098
- if ((token.newLine != null) || ((_ref = tokenApi.peek()[0]) === 'INDENT' || _ref === 'EXTENDS')) {
1181
+ var className, offset, ref, ref1, ref2;
1182
+ if ((token.newLine != null) || ((ref = tokenApi.peek()[0]) === 'INDENT' || ref === 'EXTENDS')) {
1099
1183
  return null;
1100
1184
  }
1101
1185
  className = null;
1102
1186
  offset = 1;
1103
1187
  while (!className) {
1104
- if (((_ref1 = tokenApi.peek(offset + 1)) != null ? _ref1[0] : void 0) === '.') {
1188
+ if (((ref1 = tokenApi.peek(offset + 1)) != null ? ref1[0] : void 0) === '.') {
1105
1189
  offset += 2;
1106
- } else if (((_ref2 = tokenApi.peek(offset)) != null ? _ref2[0] : void 0) === '@') {
1190
+ } else if (((ref2 = tokenApi.peek(offset)) != null ? ref2[0] : void 0) === '@') {
1107
1191
  offset += 1;
1108
1192
  } else {
1109
1193
  className = tokenApi.peek(offset)[1];
@@ -1121,7 +1205,8 @@ module.exports = CamelCaseClasses = (function() {
1121
1205
  })();
1122
1206
 
1123
1207
 
1124
- },{}],11:[function(_dereq_,module,exports){
1208
+
1209
+ },{}],12:[function(require,module,exports){
1125
1210
  var ColonAssignmentSpacing;
1126
1211
 
1127
1212
  module.exports = ColonAssignmentSpacing = (function() {
@@ -1141,7 +1226,7 @@ module.exports = ColonAssignmentSpacing = (function() {
1141
1226
  ColonAssignmentSpacing.prototype.tokens = [':'];
1142
1227
 
1143
1228
  ColonAssignmentSpacing.prototype.lintToken = function(token, tokenApi) {
1144
- var checkSpacing, getSpaceFromToken, isLeftSpaced, isRightSpaced, leftSpacing, nextToken, previousToken, rightSpacing, spaceRules, _ref, _ref1;
1229
+ var checkSpacing, getSpaceFromToken, isLeftSpaced, isRightSpaced, leftSpacing, nextToken, previousToken, ref, ref1, rightSpacing, spaceRules;
1145
1230
  spaceRules = tokenApi.config[this.rule.name].spacing;
1146
1231
  previousToken = tokenApi.peek(-1);
1147
1232
  nextToken = tokenApi.peek(1);
@@ -1159,8 +1244,8 @@ module.exports = ColonAssignmentSpacing = (function() {
1159
1244
  isSpaced = spacing < 0 ? true : spacing === parseInt(spaceRules[direction]);
1160
1245
  return [isSpaced, spacing];
1161
1246
  };
1162
- _ref = checkSpacing('left'), isLeftSpaced = _ref[0], leftSpacing = _ref[1];
1163
- _ref1 = checkSpacing('right'), isRightSpaced = _ref1[0], rightSpacing = _ref1[1];
1247
+ ref = checkSpacing('left'), isLeftSpaced = ref[0], leftSpacing = ref[1];
1248
+ ref1 = checkSpacing('right'), isRightSpaced = ref1[0], rightSpacing = ref1[1];
1164
1249
  if (isLeftSpaced && isRightSpaced) {
1165
1250
  return null;
1166
1251
  } else {
@@ -1175,7 +1260,8 @@ module.exports = ColonAssignmentSpacing = (function() {
1175
1260
  })();
1176
1261
 
1177
1262
 
1178
- },{}],12:[function(_dereq_,module,exports){
1263
+
1264
+ },{}],13:[function(require,module,exports){
1179
1265
  var NoTabs;
1180
1266
 
1181
1267
  module.exports = NoTabs = (function() {
@@ -1190,9 +1276,9 @@ module.exports = NoTabs = (function() {
1190
1276
  };
1191
1277
 
1192
1278
  NoTabs.prototype.getComplexity = function(node) {
1193
- var complexity, name, _ref;
1279
+ var complexity, name, ref;
1194
1280
  name = this.astApi.getNodeName(node);
1195
- complexity = name === 'If' || name === 'While' || name === 'For' || name === 'Try' ? 1 : name === 'Op' && ((_ref = node.operator) === '&&' || _ref === '||') ? 1 : name === 'Switch' ? node.cases.length : 0;
1281
+ complexity = name === 'If' || name === 'While' || name === 'For' || name === 'Try' ? 1 : name === 'Op' && ((ref = node.operator) === '&&' || ref === '||') ? 1 : name === 'Switch' ? node.cases.length : 0;
1196
1282
  return complexity;
1197
1283
  };
1198
1284
 
@@ -1203,8 +1289,8 @@ module.exports = NoTabs = (function() {
1203
1289
  };
1204
1290
 
1205
1291
  NoTabs.prototype.lintNode = function(node, line) {
1206
- var complexity, error, name, rule, _ref;
1207
- name = (_ref = this.astApi) != null ? _ref.getNodeName(node) : void 0;
1292
+ var complexity, error, name, ref, rule;
1293
+ name = (ref = this.astApi) != null ? ref.getNodeName(node) : void 0;
1208
1294
  complexity = this.getComplexity(node);
1209
1295
  node.eachChild((function(_this) {
1210
1296
  return function(childNode) {
@@ -1234,7 +1320,8 @@ module.exports = NoTabs = (function() {
1234
1320
  })();
1235
1321
 
1236
1322
 
1237
- },{}],13:[function(_dereq_,module,exports){
1323
+
1324
+ },{}],14:[function(require,module,exports){
1238
1325
  var DuplicateKey;
1239
1326
 
1240
1327
  module.exports = DuplicateKey = (function() {
@@ -1251,9 +1338,9 @@ module.exports = DuplicateKey = (function() {
1251
1338
  this.braceScopes = [];
1252
1339
  }
1253
1340
 
1254
- DuplicateKey.prototype.lintToken = function(_arg, tokenApi) {
1341
+ DuplicateKey.prototype.lintToken = function(arg, tokenApi) {
1255
1342
  var type;
1256
- type = _arg[0];
1343
+ type = arg[0];
1257
1344
  if (type === '{' || type === '}') {
1258
1345
  this.lintBrace.apply(this, arguments);
1259
1346
  return void 0;
@@ -1303,7 +1390,8 @@ module.exports = DuplicateKey = (function() {
1303
1390
  })();
1304
1391
 
1305
1392
 
1306
- },{}],14:[function(_dereq_,module,exports){
1393
+
1394
+ },{}],15:[function(require,module,exports){
1307
1395
  var EmptyConstructorNeedsParens;
1308
1396
 
1309
1397
  module.exports = EmptyConstructorNeedsParens = (function() {
@@ -1350,9 +1438,10 @@ module.exports = EmptyConstructorNeedsParens = (function() {
1350
1438
  })();
1351
1439
 
1352
1440
 
1353
- },{}],15:[function(_dereq_,module,exports){
1441
+
1442
+ },{}],16:[function(require,module,exports){
1354
1443
  var EnsureComprehensions,
1355
- __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; };
1444
+ 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; };
1356
1445
 
1357
1446
  module.exports = EnsureComprehensions = (function() {
1358
1447
  function EnsureComprehensions() {}
@@ -1367,7 +1456,7 @@ module.exports = EnsureComprehensions = (function() {
1367
1456
  EnsureComprehensions.prototype.tokens = ['FOR'];
1368
1457
 
1369
1458
  EnsureComprehensions.prototype.lintToken = function(token, tokenApi) {
1370
- var atEqual, idents, peeker, prevIdents, prevToken, _ref, _ref1;
1459
+ var atEqual, idents, peeker, prevIdents, prevToken, ref, ref1;
1371
1460
  idents = this.findIdents(tokenApi);
1372
1461
  peeker = -1;
1373
1462
  atEqual = false;
@@ -1376,11 +1465,11 @@ module.exports = EnsureComprehensions = (function() {
1376
1465
  if (prevToken[0] === 'IDENTIFIER') {
1377
1466
  if (!atEqual) {
1378
1467
  prevIdents.push(prevToken[1]);
1379
- } else if (_ref = prevToken[1], __indexOf.call(idents, _ref) >= 0) {
1468
+ } else if (ref = prevToken[1], indexOf.call(idents, ref) >= 0) {
1380
1469
  return;
1381
1470
  }
1382
1471
  }
1383
- if (((_ref1 = prevToken[0]) === '(' || _ref1 === '->' || _ref1 === 'TERMINATOR') || (prevToken.newLine != null)) {
1472
+ if (((ref1 = prevToken[0]) === '(' || ref1 === '->' || ref1 === 'TERMINATOR') || (prevToken.newLine != null)) {
1384
1473
  break;
1385
1474
  }
1386
1475
  if (prevToken[0] === '=') {
@@ -1396,14 +1485,14 @@ module.exports = EnsureComprehensions = (function() {
1396
1485
  };
1397
1486
 
1398
1487
  EnsureComprehensions.prototype.findIdents = function(tokenApi) {
1399
- var idents, nextToken, peeker, _ref;
1488
+ var idents, nextToken, peeker, ref;
1400
1489
  peeker = 1;
1401
1490
  idents = [];
1402
1491
  while ((nextToken = tokenApi.peek(peeker))) {
1403
1492
  if (nextToken[0] === 'IDENTIFIER') {
1404
1493
  idents.push(nextToken[1]);
1405
1494
  }
1406
- if ((_ref = nextToken[0]) === 'FORIN' || _ref === 'FOROF') {
1495
+ if ((ref = nextToken[0]) === 'FORIN' || ref === 'FOROF') {
1407
1496
  break;
1408
1497
  }
1409
1498
  peeker++;
@@ -1416,7 +1505,8 @@ module.exports = EnsureComprehensions = (function() {
1416
1505
  })();
1417
1506
 
1418
1507
 
1419
- },{}],16:[function(_dereq_,module,exports){
1508
+
1509
+ },{}],17:[function(require,module,exports){
1420
1510
  var Indentation;
1421
1511
 
1422
1512
  module.exports = Indentation = (function() {
@@ -1435,13 +1525,13 @@ module.exports = Indentation = (function() {
1435
1525
  }
1436
1526
 
1437
1527
  Indentation.prototype.lintToken = function(token, tokenApi) {
1438
- var currentLine, expected, ignoreIndent, isArrayIndent, isInterpIndent, isMultiline, lineNumber, lines, numIndents, previous, previousSymbol, type, _ref, _ref1, _ref2;
1439
- type = token[0], numIndents = token[1], (_ref = token[2], lineNumber = _ref.first_line);
1528
+ var currentLine, expected, ignoreIndent, isArrayIndent, isInterpIndent, isMultiline, lineNumber, lines, numIndents, previous, previousSymbol, ref, ref1, ref2, type;
1529
+ type = token[0], numIndents = token[1], (ref = token[2], lineNumber = ref.first_line);
1440
1530
  lines = tokenApi.lines, lineNumber = tokenApi.lineNumber;
1441
1531
  expected = tokenApi.config[this.rule.name].value;
1442
1532
  if (type === '.') {
1443
1533
  currentLine = lines[lineNumber];
1444
- if (((_ref1 = currentLine.match(/\S/i)) != null ? _ref1[0] : void 0) === '.') {
1534
+ if (((ref1 = currentLine.match(/\S/i)) != null ? ref1[0] : void 0) === '.') {
1445
1535
  return this.handleChain(tokenApi, expected);
1446
1536
  }
1447
1537
  return void 0;
@@ -1457,7 +1547,7 @@ module.exports = Indentation = (function() {
1457
1547
  isInterpIndent = previous && previous[0] === '+';
1458
1548
  previous = tokenApi.peek(-1);
1459
1549
  isArrayIndent = this.inArray() && (previous != null ? previous.newLine : void 0);
1460
- previousSymbol = (_ref2 = tokenApi.peek(-1)) != null ? _ref2[0] : void 0;
1550
+ previousSymbol = (ref2 = tokenApi.peek(-1)) != null ? ref2[0] : void 0;
1461
1551
  isMultiline = previousSymbol === '=' || previousSymbol === ',';
1462
1552
  ignoreIndent = isInterpIndent || isArrayIndent || isMultiline;
1463
1553
  numIndents = this.getCorrectIndent(tokenApi);
@@ -1482,7 +1572,7 @@ module.exports = Indentation = (function() {
1482
1572
  };
1483
1573
 
1484
1574
  Indentation.prototype.handleChain = function(tokenApi, expected) {
1485
- var callStart, checkNum, currIsIndent, currentLine, currentSpaces, findCallStart, lastCheck, lineNumber, lines, numIndents, prevIsIndent, prevLine, prevNum, prevSpaces, _ref, _ref1;
1575
+ var callStart, checkNum, currIsIndent, currentLine, currentSpaces, findCallStart, lastCheck, lineNumber, lines, numIndents, prevIsIndent, prevLine, prevNum, prevSpaces, ref, ref1;
1486
1576
  lastCheck = 1;
1487
1577
  callStart = 1;
1488
1578
  prevNum = 1;
@@ -1501,8 +1591,8 @@ module.exports = Indentation = (function() {
1501
1591
  if (checkNum >= 0) {
1502
1592
  prevLine = lines[checkNum];
1503
1593
  if (prevLine.match(/\S/i)[0] === '.' || checkNum === lastCheck) {
1504
- currentSpaces = (_ref = currentLine.match(/\S/i)) != null ? _ref.index : void 0;
1505
- prevSpaces = (_ref1 = prevLine.match(/\S/i)) != null ? _ref1.index : void 0;
1594
+ currentSpaces = (ref = currentLine.match(/\S/i)) != null ? ref.index : void 0;
1595
+ prevSpaces = (ref1 = prevLine.match(/\S/i)) != null ? ref1.index : void 0;
1506
1596
  numIndents = currentSpaces - prevSpaces;
1507
1597
  prevIsIndent = prevSpaces % expected !== 0;
1508
1598
  currIsIndent = currentSpaces % expected !== 0;
@@ -1519,17 +1609,17 @@ module.exports = Indentation = (function() {
1519
1609
  };
1520
1610
 
1521
1611
  Indentation.prototype.getCorrectIndent = function(tokenApi) {
1522
- var curIndent, i, lineNumber, lines, prevIndent, prevLine, prevNum, tokens, _ref, _ref1, _ref2;
1612
+ var curIndent, i, lineNumber, lines, prevIndent, prevLine, prevNum, ref, ref1, ref2, tokens;
1523
1613
  lineNumber = tokenApi.lineNumber, lines = tokenApi.lines, tokens = tokenApi.tokens, i = tokenApi.i;
1524
- curIndent = (_ref = lines[lineNumber].match(/\S/)) != null ? _ref.index : void 0;
1614
+ curIndent = (ref = lines[lineNumber].match(/\S/)) != null ? ref.index : void 0;
1525
1615
  prevNum = 1;
1526
1616
  while (/^\s*(#|$)/.test(lines[lineNumber - prevNum])) {
1527
1617
  prevNum += 1;
1528
1618
  }
1529
1619
  prevLine = lines[lineNumber - prevNum];
1530
- prevIndent = (_ref1 = prevLine.match(/^(\s*)\./)) != null ? _ref1[1].length : void 0;
1620
+ prevIndent = (ref1 = prevLine.match(/^(\s*)\./)) != null ? ref1[1].length : void 0;
1531
1621
  if (prevIndent > 0) {
1532
- return curIndent - ((_ref2 = prevLine.match(/\S/)) != null ? _ref2.index : void 0);
1622
+ return curIndent - ((ref2 = prevLine.match(/\S/)) != null ? ref2.index : void 0);
1533
1623
  } else {
1534
1624
  return tokens[i][1];
1535
1625
  }
@@ -1540,7 +1630,8 @@ module.exports = Indentation = (function() {
1540
1630
  })();
1541
1631
 
1542
1632
 
1543
- },{}],17:[function(_dereq_,module,exports){
1633
+
1634
+ },{}],18:[function(require,module,exports){
1544
1635
  var LineEndings;
1545
1636
 
1546
1637
  module.exports = LineEndings = (function() {
@@ -1555,8 +1646,8 @@ module.exports = LineEndings = (function() {
1555
1646
  };
1556
1647
 
1557
1648
  LineEndings.prototype.lintLine = function(line, lineApi) {
1558
- var ending, lastChar, valid, _ref;
1559
- ending = (_ref = lineApi.config[this.rule.name]) != null ? _ref.value : void 0;
1649
+ var ending, lastChar, ref, valid;
1650
+ ending = (ref = lineApi.config[this.rule.name]) != null ? ref.value : void 0;
1560
1651
  if (!ending || lineApi.isLastLine() || !line) {
1561
1652
  return null;
1562
1653
  }
@@ -1584,7 +1675,8 @@ module.exports = LineEndings = (function() {
1584
1675
  })();
1585
1676
 
1586
1677
 
1587
- },{}],18:[function(_dereq_,module,exports){
1678
+
1679
+ },{}],19:[function(require,module,exports){
1588
1680
  var MaxLineLength, regexes;
1589
1681
 
1590
1682
  regexes = {
@@ -1605,9 +1697,9 @@ module.exports = MaxLineLength = (function() {
1605
1697
  };
1606
1698
 
1607
1699
  MaxLineLength.prototype.lintLine = function(line, lineApi) {
1608
- var limitComments, lineLength, max, _ref, _ref1;
1609
- max = (_ref = lineApi.config[this.rule.name]) != null ? _ref.value : void 0;
1610
- limitComments = (_ref1 = lineApi.config[this.rule.name]) != null ? _ref1.limitComments : void 0;
1700
+ var limitComments, lineLength, max, ref, ref1;
1701
+ max = (ref = lineApi.config[this.rule.name]) != null ? ref.value : void 0;
1702
+ limitComments = (ref1 = lineApi.config[this.rule.name]) != null ? ref1.limitComments : void 0;
1611
1703
  lineLength = line.trimRight().length;
1612
1704
  if (lineApi.isLiterate() && regexes.literateComment.test(line)) {
1613
1705
  lineLength -= 2;
@@ -1629,10 +1721,11 @@ module.exports = MaxLineLength = (function() {
1629
1721
  })();
1630
1722
 
1631
1723
 
1632
- },{}],19:[function(_dereq_,module,exports){
1724
+
1725
+ },{}],20:[function(require,module,exports){
1633
1726
  var MissingFatArrows, any, containsButIsnt,
1634
- __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
1635
- __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; };
1727
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
1728
+ 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; };
1636
1729
 
1637
1730
  any = function(arr, test) {
1638
1731
  return arr.reduce((function(res, elt) {
@@ -1657,12 +1750,12 @@ containsButIsnt = function(node, nIsThis, nIsClass) {
1657
1750
 
1658
1751
  module.exports = MissingFatArrows = (function() {
1659
1752
  function MissingFatArrows() {
1660
- this.isFatArrowCode = __bind(this.isFatArrowCode, this);
1661
- this.isThis = __bind(this.isThis, this);
1662
- this.isObject = __bind(this.isObject, this);
1663
- this.isValue = __bind(this.isValue, this);
1664
- this.isClass = __bind(this.isClass, this);
1665
- this.isCode = __bind(this.isCode, this);
1753
+ this.isFatArrowCode = bind(this.isFatArrowCode, this);
1754
+ this.isThis = bind(this.isThis, this);
1755
+ this.isObject = bind(this.isObject, this);
1756
+ this.isValue = bind(this.isValue, this);
1757
+ this.isClass = bind(this.isClass, this);
1758
+ this.isCode = bind(this.isCode, this);
1666
1759
  }
1667
1760
 
1668
1761
  MissingFatArrows.prototype.rule = {
@@ -1683,7 +1776,7 @@ module.exports = MissingFatArrows = (function() {
1683
1776
  if (methods == null) {
1684
1777
  methods = [];
1685
1778
  }
1686
- if ((!this.isFatArrowCode(node)) && (__indexOf.call(methods, node) < 0) && (this.needsFatArrow(node))) {
1779
+ if ((!this.isFatArrowCode(node)) && (indexOf.call(methods, node) < 0) && (this.needsFatArrow(node))) {
1687
1780
  error = this.astApi.createError({
1688
1781
  lineNumber: node.locationData.first_line + 1
1689
1782
  });
@@ -1755,7 +1848,8 @@ module.exports = MissingFatArrows = (function() {
1755
1848
  })();
1756
1849
 
1757
1850
 
1758
- },{}],20:[function(_dereq_,module,exports){
1851
+
1852
+ },{}],21:[function(require,module,exports){
1759
1853
  var NewlinesAfterClasses;
1760
1854
 
1761
1855
  module.exports = NewlinesAfterClasses = (function() {
@@ -1790,7 +1884,8 @@ module.exports = NewlinesAfterClasses = (function() {
1790
1884
  })();
1791
1885
 
1792
1886
 
1793
- },{}],21:[function(_dereq_,module,exports){
1887
+
1888
+ },{}],22:[function(require,module,exports){
1794
1889
  var NoBackticks;
1795
1890
 
1796
1891
  module.exports = NoBackticks = (function() {
@@ -1814,7 +1909,8 @@ module.exports = NoBackticks = (function() {
1814
1909
  })();
1815
1910
 
1816
1911
 
1817
- },{}],22:[function(_dereq_,module,exports){
1912
+
1913
+ },{}],23:[function(require,module,exports){
1818
1914
  var NoDebugger;
1819
1915
 
1820
1916
  module.exports = NoDebugger = (function() {
@@ -1840,7 +1936,8 @@ module.exports = NoDebugger = (function() {
1840
1936
  })();
1841
1937
 
1842
1938
 
1843
- },{}],23:[function(_dereq_,module,exports){
1939
+
1940
+ },{}],24:[function(require,module,exports){
1844
1941
  var NoEmptyFunctions, isEmptyCode;
1845
1942
 
1846
1943
  isEmptyCode = function(node, astApi) {
@@ -1884,7 +1981,8 @@ module.exports = NoEmptyFunctions = (function() {
1884
1981
  })();
1885
1982
 
1886
1983
 
1887
- },{}],24:[function(_dereq_,module,exports){
1984
+
1985
+ },{}],25:[function(require,module,exports){
1888
1986
  var NoEmptyParamList;
1889
1987
 
1890
1988
  module.exports = NoEmptyParamList = (function() {
@@ -1910,48 +2008,59 @@ module.exports = NoEmptyParamList = (function() {
1910
2008
  })();
1911
2009
 
1912
2010
 
1913
- },{}],25:[function(_dereq_,module,exports){
2011
+
2012
+ },{}],26:[function(require,module,exports){
1914
2013
  var NoImplicitBraces;
1915
2014
 
1916
2015
  module.exports = NoImplicitBraces = (function() {
1917
- function NoImplicitBraces() {}
1918
-
1919
2016
  NoImplicitBraces.prototype.rule = {
1920
2017
  name: 'no_implicit_braces',
1921
2018
  level: 'ignore',
1922
2019
  message: 'Implicit braces are forbidden',
1923
2020
  strict: true,
1924
- description: "This rule prohibits implicit braces when declaring object literals.\nImplicit braces can make code more difficult to understand,\nespecially when used in combination with optional parenthesis.\n<pre>\n<code># Do you find this code ambiguous? Is it a\n# function call with three arguments or four?\nmyFunction a, b, 1:2, 3:4\n\n# While the same code written in a more\n# explicit manner has no ambiguity.\nmyFunction(a, b, {1:2, 3:4})\n</code>\n</pre>\nImplicit braces are permitted by default, since their use is\nidiomatic CoffeeScript."
2021
+ description: 'This rule prohibits implicit braces when declaring object literals.\nImplicit braces can make code more difficult to understand,\nespecially when used in combination with optional parenthesis.\n<pre>\n<code># Do you find this code ambiguous? Is it a\n# function call with three arguments or four?\nmyFunction a, b, 1:2, 3:4\n\n# While the same code written in a more\n# explicit manner has no ambiguity.\nmyFunction(a, b, {1:2, 3:4})\n</code>\n</pre>\nImplicit braces are permitted by default, since their use is\nidiomatic CoffeeScript.'
1925
2022
  };
1926
2023
 
1927
- NoImplicitBraces.prototype.tokens = ["{"];
2024
+ NoImplicitBraces.prototype.tokens = ['{', 'OUTDENT', 'CLASS'];
2025
+
2026
+ function NoImplicitBraces() {
2027
+ this.isClass = false;
2028
+ this.classBrace = false;
2029
+ }
1928
2030
 
1929
2031
  NoImplicitBraces.prototype.lintToken = function(token, tokenApi) {
1930
- var previousToken;
2032
+ var lineNum, previousToken, type, val;
2033
+ type = token[0], val = token[1], lineNum = token[2];
2034
+ if (type === 'OUTDENT' || type === 'CLASS') {
2035
+ return this.trackClass.apply(this, arguments);
2036
+ }
1931
2037
  if (token.generated) {
2038
+ if (this.classBrace) {
2039
+ this.classBrace = false;
2040
+ return;
2041
+ }
1932
2042
  if (!tokenApi.config[this.rule.name].strict) {
1933
2043
  previousToken = tokenApi.peek(-1)[0];
1934
2044
  if (previousToken === 'INDENT') {
1935
2045
  return;
1936
2046
  }
1937
2047
  }
1938
- return this.isPartOfClass(tokenApi);
2048
+ return true;
1939
2049
  }
1940
2050
  };
1941
2051
 
1942
- NoImplicitBraces.prototype.isPartOfClass = function(tokenApi) {
1943
- var i, t;
1944
- i = -1;
1945
- while (true) {
1946
- t = tokenApi.peek(i);
1947
- if ((t == null) || t[0] === 'TERMINATOR') {
1948
- return true;
1949
- }
1950
- if (t[0] === 'CLASS') {
1951
- return null;
1952
- }
1953
- i -= 1;
2052
+ NoImplicitBraces.prototype.trackClass = function(token, tokenApi) {
2053
+ var ln, n0, n1, ref, ref1, ref2;
2054
+ ref = [token, tokenApi.peek()], (ref1 = ref[0], n0 = ref1[0], ln = ref1[ref1.length - 1]), (ref2 = ref[1], n1 = ref2[0]);
2055
+ if (n0 === 'OUTDENT' && n1 === 'TERMINATOR') {
2056
+ this.isClass = false;
2057
+ this.classBrace = false;
1954
2058
  }
2059
+ if (n0 === 'CLASS') {
2060
+ this.isClass = true;
2061
+ this.classBrace = true;
2062
+ }
2063
+ return null;
1955
2064
  };
1956
2065
 
1957
2066
  return NoImplicitBraces;
@@ -1959,7 +2068,8 @@ module.exports = NoImplicitBraces = (function() {
1959
2068
  })();
1960
2069
 
1961
2070
 
1962
- },{}],26:[function(_dereq_,module,exports){
2071
+
2072
+ },{}],27:[function(require,module,exports){
1963
2073
  var NoImplicitParens;
1964
2074
 
1965
2075
  module.exports = NoImplicitParens = (function() {
@@ -2001,7 +2111,8 @@ module.exports = NoImplicitParens = (function() {
2001
2111
  })();
2002
2112
 
2003
2113
 
2004
- },{}],27:[function(_dereq_,module,exports){
2114
+
2115
+ },{}],28:[function(require,module,exports){
2005
2116
  var NoInterpolationInSingleQuotes;
2006
2117
 
2007
2118
  module.exports = NoInterpolationInSingleQuotes = (function() {
@@ -2028,7 +2139,8 @@ module.exports = NoInterpolationInSingleQuotes = (function() {
2028
2139
  })();
2029
2140
 
2030
2141
 
2031
- },{}],28:[function(_dereq_,module,exports){
2142
+
2143
+ },{}],29:[function(require,module,exports){
2032
2144
  var NoPlusPlus;
2033
2145
 
2034
2146
  module.exports = NoPlusPlus = (function() {
@@ -2054,7 +2166,8 @@ module.exports = NoPlusPlus = (function() {
2054
2166
  })();
2055
2167
 
2056
2168
 
2057
- },{}],29:[function(_dereq_,module,exports){
2169
+
2170
+ },{}],30:[function(require,module,exports){
2058
2171
  var NoStandAloneAt;
2059
2172
 
2060
2173
  module.exports = NoStandAloneAt = (function() {
@@ -2090,9 +2203,10 @@ module.exports = NoStandAloneAt = (function() {
2090
2203
  })();
2091
2204
 
2092
2205
 
2093
- },{}],30:[function(_dereq_,module,exports){
2206
+
2207
+ },{}],31:[function(require,module,exports){
2094
2208
  var NoTabs, indentationRegex,
2095
- __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; };
2209
+ 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; };
2096
2210
 
2097
2211
  indentationRegex = /\S/;
2098
2212
 
@@ -2109,7 +2223,7 @@ module.exports = NoTabs = (function() {
2109
2223
  NoTabs.prototype.lintLine = function(line, lineApi) {
2110
2224
  var indentation;
2111
2225
  indentation = line.split(indentationRegex)[0];
2112
- if (lineApi.lineHasToken() && __indexOf.call(indentation, '\t') >= 0) {
2226
+ if (lineApi.lineHasToken() && indexOf.call(indentation, '\t') >= 0) {
2113
2227
  return true;
2114
2228
  } else {
2115
2229
  return null;
@@ -2121,7 +2235,8 @@ module.exports = NoTabs = (function() {
2121
2235
  })();
2122
2236
 
2123
2237
 
2124
- },{}],31:[function(_dereq_,module,exports){
2238
+
2239
+ },{}],32:[function(require,module,exports){
2125
2240
  var NoThrowingStrings;
2126
2241
 
2127
2242
  module.exports = NoThrowingStrings = (function() {
@@ -2137,9 +2252,9 @@ module.exports = NoThrowingStrings = (function() {
2137
2252
  NoThrowingStrings.prototype.tokens = ['THROW'];
2138
2253
 
2139
2254
  NoThrowingStrings.prototype.lintToken = function(token, tokenApi) {
2140
- var n1, n2, nextIsString, _ref;
2141
- _ref = [tokenApi.peek(), tokenApi.peek(2)], n1 = _ref[0], n2 = _ref[1];
2142
- nextIsString = n1[0] === 'STRING' || (n1[0] === '(' && n2[0] === 'STRING');
2255
+ var n1, nextIsString, ref;
2256
+ ref = tokenApi.peek(), n1 = ref[0];
2257
+ nextIsString = n1 === 'STRING' || n1 === 'STRING_START';
2143
2258
  return nextIsString;
2144
2259
  };
2145
2260
 
@@ -2148,10 +2263,11 @@ module.exports = NoThrowingStrings = (function() {
2148
2263
  })();
2149
2264
 
2150
2265
 
2151
- },{}],32:[function(_dereq_,module,exports){
2266
+
2267
+ },{}],33:[function(require,module,exports){
2152
2268
  var NoTrailingSemicolons, regexes,
2153
- __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; },
2154
- __slice = [].slice;
2269
+ 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
+ slice = [].slice;
2155
2271
 
2156
2272
  regexes = {
2157
2273
  trailingSemicolon: /;\r?$/
@@ -2168,11 +2284,11 @@ module.exports = NoTrailingSemicolons = (function() {
2168
2284
  };
2169
2285
 
2170
2286
  NoTrailingSemicolons.prototype.lintLine = function(line, lineApi) {
2171
- var endPos, first, hasNewLine, hasSemicolon, last, lineTokens, newLine, startCounter, startPos, stopTokens, tokenLen, _i, _ref, _ref1;
2287
+ var endPos, first, hasNewLine, hasSemicolon, i, last, lineTokens, newLine, ref, ref1, startCounter, startPos, stopTokens, tokenLen;
2172
2288
  lineTokens = lineApi.getLineTokens();
2173
2289
  tokenLen = lineTokens.length;
2174
2290
  stopTokens = ['TERMINATOR', 'HERECOMMENT'];
2175
- if (tokenLen === 1 && (_ref = lineTokens[0][0], __indexOf.call(stopTokens, _ref) >= 0)) {
2291
+ if (tokenLen === 1 && (ref = lineTokens[0][0], indexOf.call(stopTokens, ref) >= 0)) {
2176
2292
  return;
2177
2293
  }
2178
2294
  newLine = line;
@@ -2188,9 +2304,9 @@ module.exports = NoTrailingSemicolons = (function() {
2188
2304
  }
2189
2305
  }
2190
2306
  hasSemicolon = regexes.trailingSemicolon.test(newLine);
2191
- first = 2 <= lineTokens.length ? __slice.call(lineTokens, 0, _i = lineTokens.length - 1) : (_i = 0, []), last = lineTokens[_i++];
2307
+ first = 2 <= lineTokens.length ? slice.call(lineTokens, 0, i = lineTokens.length - 1) : (i = 0, []), last = lineTokens[i++];
2192
2308
  hasNewLine = last && (last.newLine != null);
2193
- if (hasSemicolon && !hasNewLine && lineApi.lineHasToken() && !((_ref1 = last[0]) === 'STRING' || _ref1 === 'IDENTIFIER' || _ref1 === 'CALL_END')) {
2309
+ if (hasSemicolon && !hasNewLine && lineApi.lineHasToken() && !((ref1 = last[0]) === 'STRING' || ref1 === 'IDENTIFIER' || ref1 === 'STRING_END')) {
2194
2310
  return true;
2195
2311
  }
2196
2312
  };
@@ -2200,7 +2316,8 @@ module.exports = NoTrailingSemicolons = (function() {
2200
2316
  })();
2201
2317
 
2202
2318
 
2203
- },{}],33:[function(_dereq_,module,exports){
2319
+
2320
+ },{}],34:[function(require,module,exports){
2204
2321
  var NoTrailingWhitespace, regexes;
2205
2322
 
2206
2323
  regexes = {
@@ -2222,14 +2339,14 @@ module.exports = NoTrailingWhitespace = (function() {
2222
2339
  };
2223
2340
 
2224
2341
  NoTrailingWhitespace.prototype.lintLine = function(line, lineApi) {
2225
- var str, token, tokens, _i, _len, _ref, _ref1, _ref2;
2226
- if (!((_ref = lineApi.config['no_trailing_whitespace']) != null ? _ref.allowed_in_empty_lines : void 0)) {
2342
+ var i, len, ref, ref1, ref2, str, token, tokens;
2343
+ if (!((ref = lineApi.config['no_trailing_whitespace']) != null ? ref.allowed_in_empty_lines : void 0)) {
2227
2344
  if (regexes.onlySpaces.test(line)) {
2228
2345
  return true;
2229
2346
  }
2230
2347
  }
2231
2348
  if (regexes.trailingWhitespace.test(line)) {
2232
- if (!((_ref1 = lineApi.config['no_trailing_whitespace']) != null ? _ref1.allowed_in_comments : void 0)) {
2349
+ if (!((ref1 = lineApi.config['no_trailing_whitespace']) != null ? ref1.allowed_in_comments : void 0)) {
2233
2350
  return true;
2234
2351
  }
2235
2352
  line = line;
@@ -2237,19 +2354,19 @@ module.exports = NoTrailingWhitespace = (function() {
2237
2354
  if (!tokens) {
2238
2355
  return null;
2239
2356
  }
2240
- _ref2 = (function() {
2241
- var _j, _len, _results;
2242
- _results = [];
2243
- for (_j = 0, _len = tokens.length; _j < _len; _j++) {
2244
- token = tokens[_j];
2357
+ ref2 = (function() {
2358
+ var j, len, results;
2359
+ results = [];
2360
+ for (j = 0, len = tokens.length; j < len; j++) {
2361
+ token = tokens[j];
2245
2362
  if (token[0] === 'STRING') {
2246
- _results.push(token[1]);
2363
+ results.push(token[1]);
2247
2364
  }
2248
2365
  }
2249
- return _results;
2366
+ return results;
2250
2367
  })();
2251
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
2252
- str = _ref2[_i];
2368
+ for (i = 0, len = ref2.length; i < len; i++) {
2369
+ str = ref2[i];
2253
2370
  line = line.replace(str, 'STRING');
2254
2371
  }
2255
2372
  if (!regexes.lineHasComment.test(line)) {
@@ -2263,7 +2380,8 @@ module.exports = NoTrailingWhitespace = (function() {
2263
2380
  })();
2264
2381
 
2265
2382
 
2266
- },{}],34:[function(_dereq_,module,exports){
2383
+
2384
+ },{}],35:[function(require,module,exports){
2267
2385
  var NoUnnecessaryDoubleQuotes;
2268
2386
 
2269
2387
  module.exports = NoUnnecessaryDoubleQuotes = (function() {
@@ -2276,90 +2394,35 @@ module.exports = NoUnnecessaryDoubleQuotes = (function() {
2276
2394
 
2277
2395
  function NoUnnecessaryDoubleQuotes() {
2278
2396
  this.regexps = [];
2397
+ this.isInterpolation = false;
2279
2398
  }
2280
2399
 
2281
- NoUnnecessaryDoubleQuotes.prototype.tokens = ['STRING'];
2400
+ NoUnnecessaryDoubleQuotes.prototype.tokens = ['STRING', 'STRING_START', 'STRING_END'];
2282
2401
 
2283
2402
  NoUnnecessaryDoubleQuotes.prototype.lintToken = function(token, tokenApi) {
2284
- var e, hasLegalConstructs, i, notInBlock, s, stringValue, tokenValue;
2285
- tokenValue = token[1];
2286
- i = tokenApi.i;
2403
+ var hasLegalConstructs, stringValue, tokenValue, type;
2404
+ type = token[0], tokenValue = token[1];
2405
+ if (type === 'STRING_START' || type === 'STRING_END') {
2406
+ return this.trackParens.apply(this, arguments);
2407
+ }
2287
2408
  stringValue = tokenValue.match(/^\"(.*)\"$/);
2288
- if (this.regexps.length === 0) {
2289
- this.regexps = this.getBlockRegExps(tokenApi);
2290
- }
2291
- notInBlock = ((function() {
2292
- var _i, _len, _ref, _ref1, _results;
2293
- _ref = this.regexps;
2294
- _results = [];
2295
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
2296
- _ref1 = _ref[_i], s = _ref1[0], e = _ref1[1];
2297
- if ((s < i && i < e)) {
2298
- _results.push(1);
2299
- }
2300
- }
2301
- return _results;
2302
- }).call(this)).length === 0;
2303
- if (!(stringValue && notInBlock)) {
2409
+ if (!stringValue) {
2304
2410
  return false;
2305
2411
  }
2306
- hasLegalConstructs = this.isInterpolated(tokenApi) || this.containsSingleQuote(tokenValue);
2412
+ hasLegalConstructs = this.isInterpolation || this.hasSingleQuote(tokenValue);
2307
2413
  return !hasLegalConstructs;
2308
2414
  };
2309
2415
 
2310
- NoUnnecessaryDoubleQuotes.prototype.getBlockRegExps = function(tokenApi) {
2311
- var callEnds, col, curTok, i, idx, ii, lin, lines, regexps, t, tokens, _i, _j, _len, _len1, _ref;
2312
- lines = tokenApi.lines, tokens = tokenApi.tokens;
2313
- regexps = [];
2314
- for (i = _i = 0, _len = tokens.length; _i < _len; i = ++_i) {
2315
- t = tokens[i];
2316
- if (!(t[0] === 'IDENTIFIER' && t[1] === 'RegExp')) {
2317
- continue;
2318
- }
2319
- _ref = t[2], lin = _ref.first_line, col = _ref.first_column;
2320
- if (lines[lin].slice(col, +(col + 2) + 1 || 9e9) === "///") {
2321
- regexps.push([i, 0]);
2322
- }
2323
- }
2324
- for (idx = _j = 0, _len1 = regexps.length; _j < _len1; idx = ++_j) {
2325
- i = regexps[idx][0];
2326
- ii = 2;
2327
- callEnds = 1;
2328
- while (callEnds > 0 && (curTok = tokens[i + ii][0])) {
2329
- if (curTok === 'CALL_END') {
2330
- callEnds--;
2331
- }
2332
- if (curTok === 'CALL_START') {
2333
- callEnds++;
2334
- }
2335
- ii++;
2336
- }
2337
- regexps[idx][1] = i + ii - 1;
2338
- }
2339
- return regexps;
2340
- };
2341
-
2342
- NoUnnecessaryDoubleQuotes.prototype.isInterpolated = function(tokenApi) {
2343
- var i, idx, isInterpolated, token, tokenName, _i, _ref;
2344
- idx = tokenApi.i;
2345
- isInterpolated = false;
2346
- for (i = _i = 1; 1 <= idx ? _i <= idx : _i >= idx; i = 1 <= idx ? ++_i : --_i) {
2347
- token = tokenApi.peek(-i);
2348
- if (token == null) {
2349
- break;
2350
- }
2351
- tokenName = token[0];
2352
- if (tokenName === ')' && token.stringEnd) {
2353
- break;
2354
- } else if (tokenName === '(' && ((_ref = token.origin) != null ? _ref[1] : void 0) === 'string interpolation') {
2355
- isInterpolated = true;
2356
- break;
2357
- }
2416
+ NoUnnecessaryDoubleQuotes.prototype.trackParens = function(token, tokenApi) {
2417
+ if (token[0] === 'STRING_START') {
2418
+ this.isInterpolation = true;
2419
+ } else if (token[0] === 'STRING_END') {
2420
+ this.isInterpolation = false;
2358
2421
  }
2359
- return isInterpolated;
2422
+ return null;
2360
2423
  };
2361
2424
 
2362
- NoUnnecessaryDoubleQuotes.prototype.containsSingleQuote = function(tokenValue) {
2425
+ NoUnnecessaryDoubleQuotes.prototype.hasSingleQuote = function(tokenValue) {
2363
2426
  return tokenValue.indexOf("'") !== -1;
2364
2427
  };
2365
2428
 
@@ -2368,9 +2431,10 @@ module.exports = NoUnnecessaryDoubleQuotes = (function() {
2368
2431
  })();
2369
2432
 
2370
2433
 
2371
- },{}],35:[function(_dereq_,module,exports){
2434
+
2435
+ },{}],36:[function(require,module,exports){
2372
2436
  var NoUnnecessaryFatArrows, any,
2373
- __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
2437
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
2374
2438
 
2375
2439
  any = function(arr, test) {
2376
2440
  return arr.reduce((function(res, elt) {
@@ -2380,8 +2444,8 @@ any = function(arr, test) {
2380
2444
 
2381
2445
  module.exports = NoUnnecessaryFatArrows = (function() {
2382
2446
  function NoUnnecessaryFatArrows() {
2383
- this.needsFatArrow = __bind(this.needsFatArrow, this);
2384
- this.isThis = __bind(this.isThis, this);
2447
+ this.needsFatArrow = bind(this.needsFatArrow, this);
2448
+ this.isThis = bind(this.isThis, this);
2385
2449
  }
2386
2450
 
2387
2451
  NoUnnecessaryFatArrows.prototype.rule = {
@@ -2449,15 +2513,16 @@ module.exports = NoUnnecessaryFatArrows = (function() {
2449
2513
  })();
2450
2514
 
2451
2515
 
2452
- },{}],36:[function(_dereq_,module,exports){
2516
+
2517
+ },{}],37:[function(require,module,exports){
2453
2518
  var NonEmptyConstructorNeedsParens, ParentClass,
2454
- __hasProp = {}.hasOwnProperty,
2455
- __extends = 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; };
2519
+ 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
+ hasProp = {}.hasOwnProperty;
2456
2521
 
2457
- ParentClass = _dereq_('./empty_constructor_needs_parens.coffee');
2522
+ ParentClass = require('./empty_constructor_needs_parens.coffee');
2458
2523
 
2459
- module.exports = NonEmptyConstructorNeedsParens = (function(_super) {
2460
- __extends(NonEmptyConstructorNeedsParens, _super);
2524
+ module.exports = NonEmptyConstructorNeedsParens = (function(superClass) {
2525
+ extend(NonEmptyConstructorNeedsParens, superClass);
2461
2526
 
2462
2527
  function NonEmptyConstructorNeedsParens() {
2463
2528
  return NonEmptyConstructorNeedsParens.__super__.constructor.apply(this, arguments);
@@ -2481,7 +2546,8 @@ module.exports = NonEmptyConstructorNeedsParens = (function(_super) {
2481
2546
  })(ParentClass);
2482
2547
 
2483
2548
 
2484
- },{"./empty_constructor_needs_parens.coffee":14}],37:[function(_dereq_,module,exports){
2549
+
2550
+ },{"./empty_constructor_needs_parens.coffee":15}],38:[function(require,module,exports){
2485
2551
  var RuleProcessor;
2486
2552
 
2487
2553
  module.exports = RuleProcessor = (function() {
@@ -2498,14 +2564,14 @@ module.exports = RuleProcessor = (function() {
2498
2564
  RuleProcessor.prototype.tokens = ['COMPARE', 'UNARY_MATH', 'LOGIC'];
2499
2565
 
2500
2566
  RuleProcessor.prototype.lintToken = function(token, tokenApi) {
2501
- var actual_token, config, context, first_column, last_column, level, line, _ref;
2567
+ var actual_token, config, context, first_column, last_column, level, line, ref;
2502
2568
  config = tokenApi.config[this.rule.name];
2503
2569
  level = config.level;
2504
- _ref = token[2], first_column = _ref.first_column, last_column = _ref.last_column;
2570
+ ref = token[2], first_column = ref.first_column, last_column = ref.last_column;
2505
2571
  line = tokenApi.lines[tokenApi.lineNumber];
2506
2572
  actual_token = line.slice(first_column, +last_column + 1 || 9e9);
2507
2573
  context = (function() {
2508
- var _ref1, _ref2;
2574
+ var ref1, ref2;
2509
2575
  switch (actual_token) {
2510
2576
  case '==':
2511
2577
  return 'Replace "==" with "is"';
@@ -2516,10 +2582,10 @@ module.exports = RuleProcessor = (function() {
2516
2582
  case '&&':
2517
2583
  return 'Replace "&&" with "and"';
2518
2584
  case '!':
2519
- if (((_ref1 = tokenApi.peek(1)) != null ? _ref1[0] : void 0) === 'UNARY_MATH') {
2585
+ if (((ref1 = tokenApi.peek(1)) != null ? ref1[0] : void 0) === 'UNARY_MATH') {
2520
2586
  level = config.doubleNotLevel;
2521
2587
  return '"?" is usually better than "!!"';
2522
- } else if (((_ref2 = tokenApi.peek(-1)) != null ? _ref2[0] : void 0) === 'UNARY_MATH') {
2588
+ } else if (((ref2 = tokenApi.peek(-1)) != null ? ref2[0] : void 0) === 'UNARY_MATH') {
2523
2589
  return void 0;
2524
2590
  } else {
2525
2591
  return 'Replace "!" with "not"';
@@ -2542,9 +2608,10 @@ module.exports = RuleProcessor = (function() {
2542
2608
  })();
2543
2609
 
2544
2610
 
2545
- },{}],38:[function(_dereq_,module,exports){
2611
+
2612
+ },{}],39:[function(require,module,exports){
2546
2613
  var SpaceOperators,
2547
- __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; };
2614
+ 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; };
2548
2615
 
2549
2616
  module.exports = SpaceOperators = (function() {
2550
2617
  SpaceOperators.prototype.rule = {
@@ -2554,23 +2621,23 @@ module.exports = SpaceOperators = (function() {
2554
2621
  description: "This rule enforces that operators have space around them."
2555
2622
  };
2556
2623
 
2557
- SpaceOperators.prototype.tokens = ['+', '-', '=', '**', 'MATH', 'COMPARE', 'LOGIC', 'COMPOUND_ASSIGN', '(', ')', 'CALL_START', 'CALL_END'];
2624
+ SpaceOperators.prototype.tokens = ['+', '-', '=', '**', 'MATH', 'COMPARE', 'LOGIC', 'COMPOUND_ASSIGN', 'STRING_START', 'STRING_END', 'CALL_START', 'CALL_END'];
2558
2625
 
2559
2626
  function SpaceOperators() {
2560
2627
  this.callTokens = [];
2561
2628
  this.parenTokens = [];
2629
+ this.isInterpolation = false;
2562
2630
  }
2563
2631
 
2564
- SpaceOperators.prototype.lintToken = function(_arg, tokenApi) {
2632
+ SpaceOperators.prototype.lintToken = function(arg, tokenApi) {
2565
2633
  var type;
2566
- type = _arg[0];
2634
+ type = arg[0];
2567
2635
  if (type === 'CALL_START' || type === 'CALL_END') {
2568
- this.lintCall.apply(this, arguments);
2569
- return void 0;
2636
+ this.trackCall.apply(this, arguments);
2637
+ return;
2570
2638
  }
2571
- if (type === '(' || type === ')') {
2572
- this.lintParens.apply(this, arguments);
2573
- return void 0;
2639
+ if (type === 'STRING_START' || type === 'STRING_END') {
2640
+ return this.trackParens.apply(this, arguments);
2574
2641
  }
2575
2642
  if (type === '+' || type === '-') {
2576
2643
  return this.lintPlus.apply(this, arguments);
@@ -2580,14 +2647,14 @@ module.exports = SpaceOperators = (function() {
2580
2647
  };
2581
2648
 
2582
2649
  SpaceOperators.prototype.lintPlus = function(token, tokenApi) {
2583
- var isUnary, p, unaries, _ref;
2584
- if (this.isInInterpolation() || this.isInExtendedRegex()) {
2650
+ var isUnary, p, ref, unaries;
2651
+ if (this.isInterpolation || this.isInExtendedRegex()) {
2585
2652
  return null;
2586
2653
  }
2587
2654
  p = tokenApi.peek(-1);
2588
2655
  unaries = ['TERMINATOR', '(', '=', '-', '+', ',', 'CALL_START', 'INDEX_START', '..', '...', 'COMPARE', 'IF', 'THROW', 'LOGIC', 'POST_IF', ':', '[', 'INDENT', 'COMPOUND_ASSIGN', 'RETURN', 'MATH', 'BY', 'LEADING_WHEN'];
2589
- isUnary = !p ? false : (_ref = p[0], __indexOf.call(unaries, _ref) >= 0);
2590
- if ((isUnary && token.spaced) || (!isUnary && !token.newLine && (!token.spaced || (p && !p.spaced)))) {
2656
+ isUnary = !p ? false : (ref = p[0], indexOf.call(unaries, ref) >= 0);
2657
+ if ((isUnary && (token.spaced != null)) || (!isUnary && !token.newLine && (!token.spaced || (p && !p.spaced)))) {
2591
2658
  return {
2592
2659
  context: token[1]
2593
2660
  };
@@ -2609,10 +2676,10 @@ module.exports = SpaceOperators = (function() {
2609
2676
  };
2610
2677
 
2611
2678
  SpaceOperators.prototype.isInExtendedRegex = function() {
2612
- var t, _i, _len, _ref;
2613
- _ref = this.callTokens;
2614
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
2615
- t = _ref[_i];
2679
+ var i, len, ref, t;
2680
+ ref = this.callTokens;
2681
+ for (i = 0, len = ref.length; i < len; i++) {
2682
+ t = ref[i];
2616
2683
  if (t.isRegex) {
2617
2684
  return true;
2618
2685
  }
@@ -2620,7 +2687,7 @@ module.exports = SpaceOperators = (function() {
2620
2687
  return false;
2621
2688
  };
2622
2689
 
2623
- SpaceOperators.prototype.lintCall = function(token, tokenApi) {
2690
+ SpaceOperators.prototype.trackCall = function(token, tokenApi) {
2624
2691
  var p;
2625
2692
  if (token[0] === 'CALL_START') {
2626
2693
  p = tokenApi.peek(-1);
@@ -2632,29 +2699,11 @@ module.exports = SpaceOperators = (function() {
2632
2699
  return null;
2633
2700
  };
2634
2701
 
2635
- SpaceOperators.prototype.isInInterpolation = function() {
2636
- var t, _i, _len, _ref;
2637
- _ref = this.parenTokens;
2638
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
2639
- t = _ref[_i];
2640
- if (t.isInterpolation) {
2641
- return true;
2642
- }
2643
- }
2644
- return false;
2645
- };
2646
-
2647
- SpaceOperators.prototype.lintParens = function(token, tokenApi) {
2648
- var i, n1, n2, p1;
2649
- if (token[0] === '(') {
2650
- p1 = tokenApi.peek(-1);
2651
- n1 = tokenApi.peek(1);
2652
- n2 = tokenApi.peek(2);
2653
- i = n1 && n2 && n1[0] === 'STRING' && n2[0] === '+';
2654
- token.isInterpolation = i;
2655
- this.parenTokens.push(token);
2656
- } else {
2657
- this.parenTokens.pop();
2702
+ SpaceOperators.prototype.trackParens = function(token, tokenApi) {
2703
+ if (token[0] === 'STRING_START') {
2704
+ this.isInterpolation = true;
2705
+ } else if (token[0] === 'STRING_END') {
2706
+ this.isInterpolation = false;
2658
2707
  }
2659
2708
  return null;
2660
2709
  };
@@ -2664,7 +2713,8 @@ module.exports = SpaceOperators = (function() {
2664
2713
  })();
2665
2714
 
2666
2715
 
2667
- },{}],39:[function(_dereq_,module,exports){
2716
+
2717
+ },{}],40:[function(require,module,exports){
2668
2718
  var RuleProcessor;
2669
2719
 
2670
2720
  module.exports = RuleProcessor = (function() {
@@ -2692,7 +2742,8 @@ module.exports = RuleProcessor = (function() {
2692
2742
  })();
2693
2743
 
2694
2744
 
2695
- },{}],40:[function(_dereq_,module,exports){
2745
+
2746
+ },{}],41:[function(require,module,exports){
2696
2747
  var CamelCaseClasses;
2697
2748
 
2698
2749
  module.exports = CamelCaseClasses = (function() {
@@ -2714,6 +2765,6 @@ module.exports = CamelCaseClasses = (function() {
2714
2765
  })();
2715
2766
 
2716
2767
 
2717
- },{}]},{},[4])
2718
- (4)
2768
+
2769
+ },{}]},{},[1])(1)
2719
2770
  });