eslintrb 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eslintrb/version.rb +2 -2
  3. data/lib/js/eslint.js +1531 -437
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a5809b14dc2b24fb0b80431519d9b10c3982aa50
4
- data.tar.gz: 2855acfb8114de558d639f60a7d5210027d7a86a
3
+ metadata.gz: d399f3d117ed76f5036c69c23a6353403f8e0dd3
4
+ data.tar.gz: 1a969137a9574dc9777e0bd950d88e51ceb0c36d
5
5
  SHA512:
6
- metadata.gz: dbe83ba1523ded6f7dc44e0ae1b4f28338e0a2894ae82367cb11f04a2294f09816641433c9bdf8d46f1170fbdce3a94910c2bb316e7ab5714b1c9720e4aeef81
7
- data.tar.gz: 816ecff047f90034d9ad85bdd7c2a0446e369e583367ad18cbd8b1665381d549915a5a0b678f97e7a23278386f19272c94a3dd8c1cbcf0ee00847fa875603e9d
6
+ metadata.gz: 160d8e7ead8b3cedd4d82fa4514cbb6aafe97b9e373e4e0dc23ce6701628594f40ebbb0f3b03d73918c5886d254d08b068875e284644bb2a24a57aed3d949fe4
7
+ data.tar.gz: 5b6e22012811fab64ae79c142208681b2182dbba9fd15d46ada058026c7b058e3311cf316bcb67eaff772b614b9e903fc9e12bd3b797ca5557725219a2f97ac6
@@ -1,4 +1,4 @@
1
1
  module Eslintrb
2
- VERSION = "2.0.1"
3
- SUBMODULE = "3b9fe1f6aeb95a8b70535de4b9c143869fe53ce1"
2
+ VERSION = "2.0.2"
3
+ SUBMODULE = "641ccd5459f8714f74e0646bda54e257986f5b11"
4
4
  end
data/lib/js/eslint.js CHANGED
@@ -1818,9 +1818,11 @@ pp.parseParenArrowList = function (startPos, startLoc, exprList) {
1818
1818
  return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList);
1819
1819
  };
1820
1820
 
1821
- // New's precedence is slightly tricky. It must allow its argument
1822
- // to be a `[]` or dot subscript expression, but not a call — at
1823
- // least, not without wrapping it in parentheses. Thus, it uses the
1821
+ // New's precedence is slightly tricky. It must allow its argument to
1822
+ // be a `[]` or dot subscript expression, but not a call — at least,
1823
+ // not without wrapping it in parentheses. Thus, it uses the noCalls
1824
+ // argument to parseSubscripts to prevent it from consuming the
1825
+ // argument list.
1824
1826
 
1825
1827
  var empty = [];
1826
1828
 
@@ -1924,6 +1926,7 @@ pp.parsePropertyValue = function (prop, isPattern, isGenerator, startPos, startL
1924
1926
  var start = prop.value.start;
1925
1927
  if (prop.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param");
1926
1928
  }
1929
+ if (prop.kind === "set" && prop.value.params[0].type === "RestElement") this.raise(prop.value.params[0].start, "Setter cannot use rest params");
1927
1930
  } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
1928
1931
  prop.kind = "init";
1929
1932
  if (isPattern) {
@@ -2290,7 +2293,7 @@ var _whitespace = _dereq_("./whitespace");
2290
2293
  exports.isNewLine = _whitespace.isNewLine;
2291
2294
  exports.lineBreak = _whitespace.lineBreak;
2292
2295
  exports.lineBreakG = _whitespace.lineBreakG;
2293
- var version = "2.6.4";
2296
+ var version = "2.7.0";
2294
2297
 
2295
2298
  exports.version = version;
2296
2299
  // The main exported interface (under `self.acorn` when in the
@@ -3518,6 +3521,7 @@ pp.parseClass = function (node, isStatement) {
3518
3521
  var start = method.value.start;
3519
3522
  if (method.kind === "get") this.raise(start, "getter should have no params");else this.raise(start, "setter should have exactly one param");
3520
3523
  }
3524
+ if (method.kind === "set" && method.value.params[0].type === "RestElement") this.raise(method.value.params[0].start, "Setter cannot use rest params");
3521
3525
  }
3522
3526
  }
3523
3527
  node.body = this.finishNode(classBody, "ClassBody");
@@ -3661,7 +3665,13 @@ pp.parseImportSpecifiers = function () {
3661
3665
 
3662
3666
  var node = this.startNode();
3663
3667
  node.imported = this.parseIdent(true);
3664
- node.local = this.eatContextual("as") ? this.parseIdent() : node.imported;
3668
+ if (this.eatContextual("as")) {
3669
+ node.local = this.parseIdent();
3670
+ } else {
3671
+ node.local = node.imported;
3672
+ if (this.isKeyword(node.local.name)) this.unexpected(node.local.start);
3673
+ if (this.reservedWordsStrict.test(node.local.name)) this.raise(node.local.start, "The keyword '" + node.local.name + "' is reserved");
3674
+ }
3665
3675
  this.checkLVal(node.local, true);
3666
3676
  nodes.push(this.finishNode(node, "ImportSpecifier"));
3667
3677
  }
@@ -4232,8 +4242,8 @@ pp.readRegexp = function () {
4232
4242
  var mods = this.readWord1();
4233
4243
  var tmp = content;
4234
4244
  if (mods) {
4235
- var validFlags = /^[gmsiy]*$/;
4236
- if (this.options.ecmaVersion >= 6) validFlags = /^[gmsiyu]*$/;
4245
+ var validFlags = /^[gim]*$/;
4246
+ if (this.options.ecmaVersion >= 6) validFlags = /^[gimuy]*$/;
4237
4247
  if (!validFlags.test(mods)) this.raise(start, "Invalid regular expression flag");
4238
4248
  if (mods.indexOf('u') >= 0 && !regexpUnicodeSupport) {
4239
4249
  // Replace each astral symbol and every Unicode escape sequence that
@@ -4461,7 +4471,7 @@ pp.readEscapedChar = function (inTemplate) {
4461
4471
  octalStr = octalStr.slice(0, -1);
4462
4472
  octal = parseInt(octalStr, 8);
4463
4473
  }
4464
- if (octal > 0 && (this.strict || inTemplate)) {
4474
+ if (octalStr !== "0" && (this.strict || inTemplate)) {
4465
4475
  this.raise(this.pos - 2, "Octal literal in strict mode");
4466
4476
  }
4467
4477
  this.pos += octalStr.length - 1;
@@ -4761,7 +4771,7 @@ module.exports={
4761
4771
  },
4762
4772
  "repository": {
4763
4773
  "type": "git",
4764
- "url": "http://github.com/eslint/espree.git"
4774
+ "url": "git+ssh://git@github.com/eslint/espree.git"
4765
4775
  },
4766
4776
  "bugs": {
4767
4777
  "url": "http://github.com/eslint/espree.git"
@@ -4780,7 +4790,7 @@ module.exports={
4780
4790
  "dateformat": "^1.0.11",
4781
4791
  "eslint": "^1.10.3",
4782
4792
  "eslint-config-eslint": "^1.0.1",
4783
- "esprima": "git://github.com/jquery/esprima",
4793
+ "esprima": "git://github.com/jquery/esprima.git",
4784
4794
  "esprima-fb": "^8001.2001.0-dev-harmony-fb",
4785
4795
  "istanbul": "~0.2.6",
4786
4796
  "json-diff": "~0.3.1",
@@ -4834,7 +4844,8 @@ module.exports={
4834
4844
  "tarball": "http://registry.npmjs.org/espree/-/espree-3.0.0-alpha-3.tgz"
4835
4845
  },
4836
4846
  "directories": {},
4837
- "_resolved": "https://registry.npmjs.org/espree/-/espree-3.0.0-alpha-3.tgz"
4847
+ "_resolved": "https://registry.npmjs.org/espree/-/espree-3.0.0-alpha-3.tgz",
4848
+ "readme": "ERROR: No README data found!"
4838
4849
  }
4839
4850
 
4840
4851
  },{}],"espree":[function(require,module,exports){
@@ -5698,6 +5709,9 @@ module.exports = {
5698
5709
  serviceworker: {
5699
5710
  globals: globals.serviceworker
5700
5711
  },
5712
+ atomtest: {
5713
+ globals: globals.atomtest
5714
+ },
5701
5715
  embertest: {
5702
5716
  globals: globals.embertest
5703
5717
  },
@@ -5762,7 +5776,7 @@ module.exports={
5762
5776
  "no-implicit-globals": 0,
5763
5777
  "no-implied-eval": 0,
5764
5778
  "no-inline-comments": 0,
5765
- "no-inner-declarations": [2, "functions"],
5779
+ "no-inner-declarations": 2,
5766
5780
  "no-invalid-regexp": 2,
5767
5781
  "no-invalid-this": 0,
5768
5782
  "no-irregular-whitespace": 2,
@@ -5772,12 +5786,12 @@ module.exports={
5772
5786
  "no-lone-blocks": 0,
5773
5787
  "no-lonely-if": 0,
5774
5788
  "no-loop-func": 0,
5775
- "no-mixed-requires": [0, false],
5776
- "no-mixed-spaces-and-tabs": [2, false],
5777
- "linebreak-style": [0, "unix"],
5789
+ "no-mixed-requires": 0,
5790
+ "no-mixed-spaces-and-tabs": 2,
5791
+ "linebreak-style": 0,
5778
5792
  "no-multi-spaces": 0,
5779
5793
  "no-multi-str": 0,
5780
- "no-multiple-empty-lines": [0, {"max": 2}],
5794
+ "no-multiple-empty-lines": 0,
5781
5795
  "no-native-reassign": 0,
5782
5796
  "no-negated-condition": 0,
5783
5797
  "no-negated-in-lhs": 2,
@@ -5786,6 +5800,7 @@ module.exports={
5786
5800
  "no-new-func": 0,
5787
5801
  "no-new-object": 0,
5788
5802
  "no-new-require": 0,
5803
+ "no-new-symbol": 0,
5789
5804
  "no-new-wrappers": 0,
5790
5805
  "no-obj-calls": 2,
5791
5806
  "no-octal": 2,
@@ -5807,6 +5822,7 @@ module.exports={
5807
5822
  "no-sequences": 0,
5808
5823
  "no-shadow": 0,
5809
5824
  "no-shadow-restricted-names": 0,
5825
+ "no-whitespace-before-property": 0,
5810
5826
  "no-spaced-func": 0,
5811
5827
  "no-sparse-arrays": 2,
5812
5828
  "no-sync": 0,
@@ -5823,43 +5839,44 @@ module.exports={
5823
5839
  "no-unneeded-ternary": 0,
5824
5840
  "no-unreachable": 2,
5825
5841
  "no-unused-expressions": 0,
5826
- "no-unused-vars": [2, {"vars": "all", "args": "after-used"}],
5842
+ "no-unused-vars": 2,
5827
5843
  "no-use-before-define": 0,
5828
5844
  "no-useless-call": 0,
5829
5845
  "no-useless-concat": 0,
5846
+ "no-useless-constructor": 0,
5830
5847
  "no-void": 0,
5831
5848
  "no-var": 0,
5832
- "no-warning-comments": [0, { "terms": ["todo", "fixme", "xxx"], "location": "start" }],
5849
+ "no-warning-comments": 0,
5833
5850
  "no-with": 0,
5834
5851
  "no-magic-numbers": 0,
5835
5852
 
5836
- "array-bracket-spacing": [0, "never"],
5853
+ "array-bracket-spacing": 0,
5837
5854
  "array-callback-return": 0,
5838
- "arrow-body-style": [0, "as-needed"],
5855
+ "arrow-body-style": 0,
5839
5856
  "arrow-parens": 0,
5840
5857
  "arrow-spacing": 0,
5841
5858
  "accessor-pairs": 0,
5842
5859
  "block-scoped-var": 0,
5843
5860
  "block-spacing": 0,
5844
- "brace-style": [0, "1tbs"],
5861
+ "brace-style": 0,
5845
5862
  "callback-return": 0,
5846
5863
  "camelcase": 0,
5847
- "comma-dangle": [2, "never"],
5864
+ "comma-dangle": 2,
5848
5865
  "comma-spacing": 0,
5849
5866
  "comma-style": 0,
5850
5867
  "complexity": [0, 11],
5851
- "computed-property-spacing": [0, "never"],
5868
+ "computed-property-spacing": 0,
5852
5869
  "consistent-return": 0,
5853
- "consistent-this": [0, "that"],
5870
+ "consistent-this": 0,
5854
5871
  "constructor-super": 0,
5855
- "curly": [0, "all"],
5872
+ "curly": 0,
5856
5873
  "default-case": 0,
5857
5874
  "dot-location": 0,
5858
- "dot-notation": [0, { "allowKeywords": true }],
5875
+ "dot-notation": 0,
5859
5876
  "eol-last": 0,
5860
5877
  "eqeqeq": 0,
5861
5878
  "func-names": 0,
5862
- "func-style": [0, "declaration"],
5879
+ "func-style": 0,
5863
5880
  "generator-star-spacing": 0,
5864
5881
  "global-require": 0,
5865
5882
  "guard-for-in": 0,
@@ -5867,21 +5884,22 @@ module.exports={
5867
5884
  "id-length": 0,
5868
5885
  "indent": 0,
5869
5886
  "init-declarations": 0,
5870
- "jsx-quotes": [0, "prefer-double"],
5871
- "key-spacing": [0, { "beforeColon": false, "afterColon": true }],
5887
+ "jsx-quotes": 0,
5888
+ "key-spacing": 0,
5889
+ "keyword-spacing": 0,
5872
5890
  "lines-around-comment": 0,
5873
- "max-depth": [0, 4],
5874
- "max-len": [0, 80, 4],
5875
- "max-nested-callbacks": [0, 2],
5876
- "max-params": [0, 3],
5877
- "max-statements": [0, 10],
5891
+ "max-depth": 0,
5892
+ "max-len": 0,
5893
+ "max-nested-callbacks": 0,
5894
+ "max-params": 0,
5895
+ "max-statements": 0,
5878
5896
  "new-cap": 0,
5879
5897
  "new-parens": 0,
5880
5898
  "newline-after-var": 0,
5881
- "object-curly-spacing": [0, "never"],
5899
+ "object-curly-spacing": 0,
5882
5900
  "object-shorthand": 0,
5883
- "one-var": [0, "always"],
5884
- "operator-assignment": [0, "always"],
5901
+ "one-var": 0,
5902
+ "operator-assignment": 0,
5885
5903
  "operator-linebreak": 0,
5886
5904
  "padded-blocks": 0,
5887
5905
  "prefer-arrow-callback": 0,
@@ -5891,22 +5909,23 @@ module.exports={
5891
5909
  "prefer-spread": 0,
5892
5910
  "prefer-template": 0,
5893
5911
  "quote-props": 0,
5894
- "quotes": [0, "double"],
5912
+ "quotes": 0,
5895
5913
  "radix": 0,
5896
5914
  "id-match": 0,
5897
5915
  "require-jsdoc": 0,
5898
5916
  "require-yield": 0,
5899
5917
  "semi": 0,
5900
- "semi-spacing": [0, {"before": false, "after": true}],
5918
+ "semi-spacing": 0,
5901
5919
  "sort-vars": 0,
5902
- "space-after-keywords": [0, "always"],
5903
- "space-before-keywords": [0, "always"],
5904
- "space-before-blocks": [0, "always"],
5905
- "space-before-function-paren": [0, "always"],
5906
- "space-in-parens": [0, "never"],
5920
+ "sort-imports": 0,
5921
+ "space-after-keywords": 0,
5922
+ "space-before-keywords": 0,
5923
+ "space-before-blocks": 0,
5924
+ "space-before-function-paren": 0,
5925
+ "space-in-parens": 0,
5907
5926
  "space-infix-ops": 0,
5908
5927
  "space-return-throw-case": 0,
5909
- "space-unary-ops": [0, { "words": true, "nonwords": false }],
5928
+ "space-unary-ops": 0,
5910
5929
  "spaced-comment": 0,
5911
5930
  "strict": 0,
5912
5931
  "use-isnan": 2,
@@ -5916,7 +5935,7 @@ module.exports={
5916
5935
  "wrap-iife": 0,
5917
5936
  "wrap-regex": 0,
5918
5937
  "yield-star-spacing": 0,
5919
- "yoda": [0, "never"]
5938
+ "yoda": 0
5920
5939
  }
5921
5940
  }
5922
5941
 
@@ -5933,8 +5952,11 @@ module.exports={
5933
5952
  "no-space-before-semi": ["semi-spacing"],
5934
5953
  "no-wrap-func": ["no-extra-parens"],
5935
5954
  "space-after-function-name": ["space-before-function-paren"],
5955
+ "space-after-keywords": ["keyword-spacing"],
5936
5956
  "space-before-function-parentheses": ["space-before-function-paren"],
5957
+ "space-before-keywords": ["keyword-spacing"],
5937
5958
  "space-in-brackets": ["object-curly-spacing", "array-bracket-spacing", "computed-property-spacing"],
5959
+ "space-return-throw-case": ["keyword-spacing"],
5938
5960
  "space-unary-word-ops": ["space-unary-ops"],
5939
5961
  "spaced-line-comment": ["spaced-comment"]
5940
5962
  }
@@ -8344,6 +8366,22 @@ function plural(ms, n, name) {
8344
8366
  return true;
8345
8367
  };
8346
8368
 
8369
+ TagParser.prototype.parseCaption = function parseDescription() {
8370
+ var description = trim(sliceSource(source, index, this._last));
8371
+ var captionStartTag = '<caption>';
8372
+ var captionEndTag = '</caption>';
8373
+ var captionStart = description.indexOf(captionStartTag);
8374
+ var captionEnd = description.indexOf(captionEndTag);
8375
+ if (captionStart >= 0 && captionEnd >= 0) {
8376
+ this._tag.caption = trim(description.substring(
8377
+ captionStart + captionStartTag.length, captionEnd));
8378
+ this._tag.description = trim(description.substring(captionEnd + captionEndTag.length));
8379
+ } else {
8380
+ this._tag.description = description;
8381
+ }
8382
+ return true;
8383
+ };
8384
+
8347
8385
  TagParser.prototype.parseKind = function parseKind() {
8348
8386
  var kind, kinds;
8349
8387
  kinds = {
@@ -8381,6 +8419,23 @@ function plural(ms, n, name) {
8381
8419
  return true;
8382
8420
  };
8383
8421
 
8422
+ TagParser.prototype.parseThis = function parseAccess() {
8423
+ // this name may be a name expression (e.g. {foo.bar})
8424
+ // or a name path (e.g. foo.bar)
8425
+ var value = trim(sliceSource(source, index, this._last));
8426
+ if (value && value.charAt(0) === '{') {
8427
+ var gotType = this.parseType();
8428
+ if (gotType && this._tag.type.type === 'NameExpression') {
8429
+ this._tag.name = this._tag.type.name;
8430
+ return true;
8431
+ } else {
8432
+ return this.addError('Invalid name for this');
8433
+ }
8434
+ } else {
8435
+ return this.parseNamePath();
8436
+ }
8437
+ };
8438
+
8384
8439
  TagParser.prototype.parseVariation = function parseVariation() {
8385
8440
  var variation, text;
8386
8441
  text = trim(sliceSource(source, index, this._last));
@@ -8438,6 +8493,8 @@ function plural(ms, n, name) {
8438
8493
  'class': ['parseType', 'parseNamePathOptional', 'ensureEnd'],
8439
8494
  // Synonym: http://usejsdoc.org/tags-extends.html
8440
8495
  'extends': ['parseType', 'parseNamePathOptional', 'ensureEnd'],
8496
+ // http://usejsdoc.org/tags-example.html
8497
+ 'example': ['parseCaption'],
8441
8498
  // http://usejsdoc.org/tags-deprecated.html
8442
8499
  'deprecated': ['parseDescription'],
8443
8500
  // http://usejsdoc.org/tags-global.html
@@ -8485,7 +8542,7 @@ function plural(ms, n, name) {
8485
8542
  // http://usejsdoc.org/tags-summary.html
8486
8543
  'summary': ['parseDescription'],
8487
8544
  // http://usejsdoc.org/tags-this.html
8488
- 'this': ['parseNamePath', 'ensureEnd'],
8545
+ 'this': ['parseThis', 'ensureEnd'],
8489
8546
  // http://usejsdoc.org/tags-todo.html
8490
8547
  'todo': ['parseDescription'],
8491
8548
  // http://usejsdoc.org/tags-typedef.html
@@ -9650,7 +9707,7 @@ function plural(ms, n, name) {
9650
9707
  return expr;
9651
9708
  }
9652
9709
 
9653
- elements = [ expr ];
9710
+ elements = [expr];
9654
9711
  consume(Token.PIPE);
9655
9712
  while (true) {
9656
9713
  elements.push(parseTypeExpression());
@@ -10400,7 +10457,7 @@ module.exports={
10400
10457
  "description": "JSDoc parser",
10401
10458
  "homepage": "https://github.com/eslint/doctrine",
10402
10459
  "main": "lib/doctrine.js",
10403
- "version": "0.7.2",
10460
+ "version": "1.1.0",
10404
10461
  "engines": {
10405
10462
  "node": ">=0.10.0"
10406
10463
  },
@@ -10431,17 +10488,8 @@ module.exports={
10431
10488
  "devDependencies": {
10432
10489
  "coveralls": "^2.11.2",
10433
10490
  "dateformat": "^1.0.11",
10434
- "eslint": "^1.9.0",
10435
- "gulp": "^3.8.10",
10436
- "gulp-bump": "^0.1.13",
10437
- "gulp-eslint": "^0.5.0",
10438
- "gulp-filter": "^2.0.2",
10439
- "gulp-git": "^1.0.0",
10440
- "gulp-istanbul": "^0.6.0",
10441
- "gulp-jshint": "^1.9.0",
10442
- "gulp-mocha": "^2.0.0",
10443
- "gulp-tag-version": "^1.2.1",
10444
- "jshint-stylish": "^1.0.0",
10491
+ "eslint": "^1.10.3",
10492
+ "istanbul": "^0.4.1",
10445
10493
  "linefix": "^0.1.1",
10446
10494
  "mocha": "^2.3.3",
10447
10495
  "npm-license": "^0.3.1",
@@ -10457,32 +10505,30 @@ module.exports={
10457
10505
  }
10458
10506
  ],
10459
10507
  "scripts": {
10460
- "test": "gulp",
10461
- "unit-test": "gulp test",
10462
- "lint": "gulp lint",
10463
- "coveralls": "cat ./coverage/lcov.info | coveralls && rm -rf ./coverage"
10508
+ "test": "node Makefile.js test",
10509
+ "lint": "node Makefile.js lint"
10464
10510
  },
10465
10511
  "dependencies": {
10466
10512
  "esutils": "^1.1.6",
10467
10513
  "isarray": "0.0.1"
10468
10514
  },
10469
- "gitHead": "d78e387ce941880ae97ca768092ee11029bdb916",
10515
+ "gitHead": "165fc189b184b0daa72a2ee2f696e8cf7312d288",
10470
10516
  "bugs": {
10471
10517
  "url": "https://github.com/eslint/doctrine/issues"
10472
10518
  },
10473
- "_id": "doctrine@0.7.2",
10474
- "_shasum": "7cb860359ba3be90e040b26b729ce4bfa654c523",
10475
- "_from": "doctrine@>=0.7.1 <0.8.0",
10476
- "_npmVersion": "1.4.28",
10519
+ "_id": "doctrine@1.1.0",
10520
+ "_shasum": "1c36612937cf7d1596b983e9c5d0c6233eeaa3cf",
10521
+ "_from": "doctrine@>=1.1.0 <2.0.0",
10522
+ "_npmVersion": "1.4.29",
10477
10523
  "_npmUser": {
10478
10524
  "name": "nzakas",
10479
10525
  "email": "nicholas@nczconsulting.com"
10480
10526
  },
10481
10527
  "dist": {
10482
- "shasum": "7cb860359ba3be90e040b26b729ce4bfa654c523",
10483
- "tarball": "http://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz"
10528
+ "shasum": "1c36612937cf7d1596b983e9c5d0c6233eeaa3cf",
10529
+ "tarball": "http://registry.npmjs.org/doctrine/-/doctrine-1.1.0.tgz"
10484
10530
  },
10485
- "_resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz"
10531
+ "_resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.1.0.tgz"
10486
10532
  }
10487
10533
 
10488
10534
  },{}],23:[function(require,module,exports){
@@ -11803,7 +11849,7 @@ module.exports = function (str) {
11803
11849
  throw new TypeError('Expected a string');
11804
11850
  }
11805
11851
 
11806
- return str.replace(matchOperatorsRe, '\\$&');
11852
+ return str.replace(matchOperatorsRe, '\\$&');
11807
11853
  };
11808
11854
 
11809
11855
  },{}],77:[function(require,module,exports){
@@ -15376,7 +15422,7 @@ module.exports={
15376
15422
  ],
15377
15423
  "repository": {
15378
15424
  "type": "git",
15379
- "url": "http://github.com/estools/estraverse.git"
15425
+ "url": "git+ssh://git@github.com/estools/estraverse.git"
15380
15426
  },
15381
15427
  "devDependencies": {
15382
15428
  "chai": "^2.1.1",
@@ -15418,7 +15464,8 @@ module.exports={
15418
15464
  "tarball": "http://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz"
15419
15465
  },
15420
15466
  "directories": {},
15421
- "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz"
15467
+ "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-3.1.0.tgz",
15468
+ "readme": "ERROR: No README data found!"
15422
15469
  }
15423
15470
 
15424
15471
  },{}],133:[function(require,module,exports){
@@ -15443,7 +15490,7 @@ module.exports={
15443
15490
  ],
15444
15491
  "repository": {
15445
15492
  "type": "git",
15446
- "url": "http://github.com/estools/esrecurse.git"
15493
+ "url": "git+ssh://git@github.com/estools/esrecurse.git"
15447
15494
  },
15448
15495
  "dependencies": {
15449
15496
  "estraverse": "~3.1.0"
@@ -15490,7 +15537,8 @@ module.exports={
15490
15537
  "tarball": "http://registry.npmjs.org/esrecurse/-/esrecurse-3.1.1.tgz"
15491
15538
  },
15492
15539
  "directories": {},
15493
- "_resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-3.1.1.tgz"
15540
+ "_resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-3.1.1.tgz",
15541
+ "readme": "ERROR: No README data found!"
15494
15542
  }
15495
15543
 
15496
15544
  },{}],134:[function(require,module,exports){
@@ -15577,7 +15625,8 @@ module.exports={
15577
15625
  "tarball": "http://registry.npmjs.org/escope/-/escope-3.3.0.tgz"
15578
15626
  },
15579
15627
  "directories": {},
15580
- "_resolved": "https://registry.npmjs.org/escope/-/escope-3.3.0.tgz"
15628
+ "_resolved": "https://registry.npmjs.org/escope/-/escope-3.3.0.tgz",
15629
+ "readme": "ERROR: No README data found!"
15581
15630
  }
15582
15631
 
15583
15632
  },{}],135:[function(require,module,exports){
@@ -16547,7 +16596,8 @@ module.exports={
16547
16596
  "tarball": "http://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz"
16548
16597
  },
16549
16598
  "directories": {},
16550
- "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz"
16599
+ "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz",
16600
+ "readme": "ERROR: No README data found!"
16551
16601
  }
16552
16602
 
16553
16603
  },{}],138:[function(require,module,exports){
@@ -17617,6 +17667,7 @@ module.exports={
17617
17667
  "worker": {
17618
17668
  "applicationCache": false,
17619
17669
  "atob": false,
17670
+ "Blob": false,
17620
17671
  "BroadcastChannel": false,
17621
17672
  "btoa": false,
17622
17673
  "Cache": false,
@@ -17704,7 +17755,8 @@ module.exports={
17704
17755
  "commonjs": {
17705
17756
  "exports": true,
17706
17757
  "module": false,
17707
- "require": false
17758
+ "require": false,
17759
+ "global": false
17708
17760
  },
17709
17761
  "amd": {
17710
17762
  "define": false,
@@ -18040,6 +18092,15 @@ module.exports={
18040
18092
  "skipWaiting": false,
18041
18093
  "WindowClient": false
18042
18094
  },
18095
+ "atomtest": {
18096
+ "advanceClock": false,
18097
+ "fakeClearInterval": false,
18098
+ "fakeClearTimeout": false,
18099
+ "fakeSetInterval": false,
18100
+ "fakeSetTimeout": false,
18101
+ "resetTimeouts": false,
18102
+ "waitsForPromise": false
18103
+ },
18043
18104
  "embertest": {
18044
18105
  "andThen": false,
18045
18106
  "click": false,
@@ -21459,7 +21520,7 @@ CodePathState.prototype = {
21459
21520
 
21460
21521
  module.exports = CodePathState;
21461
21522
 
21462
- },{"../util":364,"./code-path-segment":154,"./fork-context":158}],156:[function(require,module,exports){
21523
+ },{"../util":369,"./code-path-segment":154,"./fork-context":158}],156:[function(require,module,exports){
21463
21524
  /**
21464
21525
  * @fileoverview A class of the code path.
21465
21526
  * @author Toru Nagashima
@@ -22272,6 +22333,7 @@ module.exports = {
22272
22333
  * @fileoverview Validates configs.
22273
22334
  * @author Brandon Mills
22274
22335
  * @copyright 2015 Brandon Mills
22336
+ * See LICENSE file in root directory for full license.
22275
22337
  */
22276
22338
 
22277
22339
  "use strict";
@@ -22311,7 +22373,11 @@ function getRuleOptionsSchema(id) {
22311
22373
  "maxItems": schema.length
22312
22374
  };
22313
22375
  } else {
22314
- return null;
22376
+ return {
22377
+ "type": "array",
22378
+ "minItems": 0,
22379
+ "maxItems": 0
22380
+ };
22315
22381
  }
22316
22382
  }
22317
22383
 
@@ -22832,7 +22898,7 @@ function prepareConfig(config) {
22832
22898
  if (typeof config.env === "object") {
22833
22899
  Object.keys(config.env).forEach(function(env) {
22834
22900
  if (config.env[env] && environments[env] && environments[env].parserOptions) {
22835
- assign(parserOptions, environments[env].parserOptions);
22901
+ parserOptions = ConfigOps.merge(parserOptions, environments[env].parserOptions);
22836
22902
  }
22837
22903
  });
22838
22904
  }
@@ -23516,7 +23582,7 @@ module.exports = (function() {
23516
23582
 
23517
23583
  }());
23518
23584
 
23519
- },{"../conf/blank-script.json":1,"../conf/environments":2,"../conf/eslint.json":3,"../conf/replacements.json":4,"./code-path-analysis/code-path-analyzer":153,"./config/config-ops":160,"./config/config-validator":161,"./rule-context":164,"./rules":165,"./timing":362,"./util/comment-event-generator":365,"./util/estraverse":366,"./util/node-event-generator":368,"./util/source-code":370,"assert":5,"escope":78,"events":6,"object-assign":151}],163:[function(require,module,exports){
23585
+ },{"../conf/blank-script.json":1,"../conf/environments":2,"../conf/eslint.json":3,"../conf/replacements.json":4,"./code-path-analysis/code-path-analyzer":153,"./config/config-ops":160,"./config/config-validator":161,"./rule-context":164,"./rules":165,"./timing":367,"./util/comment-event-generator":370,"./util/estraverse":371,"./util/node-event-generator":373,"./util/source-code":375,"assert":5,"escope":78,"events":6,"object-assign":151}],163:[function(require,module,exports){
23520
23586
  module.exports = function() {
23521
23587
  var rules = Object.create(null);
23522
23588
  rules["accessor-pairs"] = require("./rules/accessor-pairs");
@@ -23556,6 +23622,7 @@ module.exports = function() {
23556
23622
  rules["init-declarations"] = require("./rules/init-declarations");
23557
23623
  rules["jsx-quotes"] = require("./rules/jsx-quotes");
23558
23624
  rules["key-spacing"] = require("./rules/key-spacing");
23625
+ rules["keyword-spacing"] = require("./rules/keyword-spacing");
23559
23626
  rules["linebreak-style"] = require("./rules/linebreak-style");
23560
23627
  rules["lines-around-comment"] = require("./rules/lines-around-comment");
23561
23628
  rules["max-depth"] = require("./rules/max-depth");
@@ -23631,6 +23698,7 @@ module.exports = function() {
23631
23698
  rules["no-new-func"] = require("./rules/no-new-func");
23632
23699
  rules["no-new-object"] = require("./rules/no-new-object");
23633
23700
  rules["no-new-require"] = require("./rules/no-new-require");
23701
+ rules["no-new-symbol"] = require("./rules/no-new-symbol");
23634
23702
  rules["no-new-wrappers"] = require("./rules/no-new-wrappers");
23635
23703
  rules["no-new"] = require("./rules/no-new");
23636
23704
  rules["no-obj-calls"] = require("./rules/no-obj-calls");
@@ -23673,9 +23741,11 @@ module.exports = function() {
23673
23741
  rules["no-use-before-define"] = require("./rules/no-use-before-define");
23674
23742
  rules["no-useless-call"] = require("./rules/no-useless-call");
23675
23743
  rules["no-useless-concat"] = require("./rules/no-useless-concat");
23744
+ rules["no-useless-constructor"] = require("./rules/no-useless-constructor");
23676
23745
  rules["no-var"] = require("./rules/no-var");
23677
23746
  rules["no-void"] = require("./rules/no-void");
23678
23747
  rules["no-warning-comments"] = require("./rules/no-warning-comments");
23748
+ rules["no-whitespace-before-property"] = require("./rules/no-whitespace-before-property");
23679
23749
  rules["no-with"] = require("./rules/no-with");
23680
23750
  rules["object-curly-spacing"] = require("./rules/object-curly-spacing");
23681
23751
  rules["object-shorthand"] = require("./rules/object-shorthand");
@@ -23696,6 +23766,7 @@ module.exports = function() {
23696
23766
  rules["require-yield"] = require("./rules/require-yield");
23697
23767
  rules["semi-spacing"] = require("./rules/semi-spacing");
23698
23768
  rules["semi"] = require("./rules/semi");
23769
+ rules["sort-imports"] = require("./rules/sort-imports");
23699
23770
  rules["sort-vars"] = require("./rules/sort-vars");
23700
23771
  rules["space-after-keywords"] = require("./rules/space-after-keywords");
23701
23772
  rules["space-before-blocks"] = require("./rules/space-before-blocks");
@@ -23718,7 +23789,7 @@ module.exports = function() {
23718
23789
 
23719
23790
  return rules;
23720
23791
  };
23721
- },{"./rules/accessor-pairs":166,"./rules/array-bracket-spacing":167,"./rules/array-callback-return":168,"./rules/arrow-body-style":169,"./rules/arrow-parens":170,"./rules/arrow-spacing":171,"./rules/block-scoped-var":172,"./rules/block-spacing":173,"./rules/brace-style":174,"./rules/callback-return":175,"./rules/camelcase":176,"./rules/comma-dangle":177,"./rules/comma-spacing":178,"./rules/comma-style":179,"./rules/complexity":180,"./rules/computed-property-spacing":181,"./rules/consistent-return":182,"./rules/consistent-this":183,"./rules/constructor-super":184,"./rules/curly":185,"./rules/default-case":186,"./rules/dot-location":187,"./rules/dot-notation":188,"./rules/eol-last":189,"./rules/eqeqeq":190,"./rules/func-names":191,"./rules/func-style":192,"./rules/generator-star-spacing":193,"./rules/global-require":194,"./rules/guard-for-in":195,"./rules/handle-callback-err":196,"./rules/id-length":197,"./rules/id-match":198,"./rules/indent":199,"./rules/init-declarations":200,"./rules/jsx-quotes":201,"./rules/key-spacing":202,"./rules/linebreak-style":203,"./rules/lines-around-comment":204,"./rules/max-depth":205,"./rules/max-len":206,"./rules/max-nested-callbacks":207,"./rules/max-params":208,"./rules/max-statements":209,"./rules/new-cap":210,"./rules/new-parens":211,"./rules/newline-after-var":212,"./rules/no-alert":213,"./rules/no-array-constructor":214,"./rules/no-arrow-condition":215,"./rules/no-bitwise":216,"./rules/no-caller":217,"./rules/no-case-declarations":218,"./rules/no-catch-shadow":219,"./rules/no-class-assign":220,"./rules/no-cond-assign":221,"./rules/no-confusing-arrow":222,"./rules/no-console":223,"./rules/no-const-assign":224,"./rules/no-constant-condition":225,"./rules/no-continue":226,"./rules/no-control-regex":227,"./rules/no-debugger":228,"./rules/no-delete-var":229,"./rules/no-div-regex":230,"./rules/no-dupe-args":231,"./rules/no-dupe-class-members":232,"./rules/no-dupe-keys":233,"./rules/no-duplicate-case":234,"./rules/no-else-return":235,"./rules/no-empty":239,"./rules/no-empty-character-class":236,"./rules/no-empty-label":237,"./rules/no-empty-pattern":238,"./rules/no-eq-null":240,"./rules/no-eval":241,"./rules/no-ex-assign":242,"./rules/no-extend-native":243,"./rules/no-extra-bind":244,"./rules/no-extra-boolean-cast":245,"./rules/no-extra-parens":246,"./rules/no-extra-semi":247,"./rules/no-fallthrough":248,"./rules/no-floating-decimal":249,"./rules/no-func-assign":250,"./rules/no-implicit-coercion":251,"./rules/no-implicit-globals":252,"./rules/no-implied-eval":253,"./rules/no-inline-comments":254,"./rules/no-inner-declarations":255,"./rules/no-invalid-regexp":256,"./rules/no-invalid-this":257,"./rules/no-irregular-whitespace":258,"./rules/no-iterator":259,"./rules/no-label-var":260,"./rules/no-labels":261,"./rules/no-lone-blocks":262,"./rules/no-lonely-if":263,"./rules/no-loop-func":264,"./rules/no-magic-numbers":265,"./rules/no-mixed-requires":266,"./rules/no-mixed-spaces-and-tabs":267,"./rules/no-multi-spaces":268,"./rules/no-multi-str":269,"./rules/no-multiple-empty-lines":270,"./rules/no-native-reassign":271,"./rules/no-negated-condition":272,"./rules/no-negated-in-lhs":273,"./rules/no-nested-ternary":274,"./rules/no-new":279,"./rules/no-new-func":275,"./rules/no-new-object":276,"./rules/no-new-require":277,"./rules/no-new-wrappers":278,"./rules/no-obj-calls":280,"./rules/no-octal":282,"./rules/no-octal-escape":281,"./rules/no-param-reassign":283,"./rules/no-path-concat":284,"./rules/no-plusplus":285,"./rules/no-process-env":286,"./rules/no-process-exit":287,"./rules/no-proto":288,"./rules/no-redeclare":289,"./rules/no-regex-spaces":290,"./rules/no-restricted-imports":291,"./rules/no-restricted-modules":292,"./rules/no-restricted-syntax":293,"./rules/no-return-assign":294,"./rules/no-script-url":295,"./rules/no-self-compare":296,"./rules/no-sequences":297,"./rules/no-shadow":299,"./rules/no-shadow-restricted-names":298,"./rules/no-spaced-func":300,"./rules/no-sparse-arrays":301,"./rules/no-sync":302,"./rules/no-ternary":303,"./rules/no-this-before-super":304,"./rules/no-throw-literal":305,"./rules/no-trailing-spaces":306,"./rules/no-undef":308,"./rules/no-undef-init":307,"./rules/no-undefined":309,"./rules/no-underscore-dangle":310,"./rules/no-unexpected-multiline":311,"./rules/no-unmodified-loop-condition":312,"./rules/no-unneeded-ternary":313,"./rules/no-unreachable":314,"./rules/no-unused-expressions":315,"./rules/no-unused-vars":316,"./rules/no-use-before-define":317,"./rules/no-useless-call":318,"./rules/no-useless-concat":319,"./rules/no-var":320,"./rules/no-void":321,"./rules/no-warning-comments":322,"./rules/no-with":323,"./rules/object-curly-spacing":324,"./rules/object-shorthand":325,"./rules/one-var":326,"./rules/operator-assignment":327,"./rules/operator-linebreak":328,"./rules/padded-blocks":329,"./rules/prefer-arrow-callback":330,"./rules/prefer-const":331,"./rules/prefer-reflect":332,"./rules/prefer-rest-params":333,"./rules/prefer-spread":334,"./rules/prefer-template":335,"./rules/quote-props":336,"./rules/quotes":337,"./rules/radix":338,"./rules/require-jsdoc":339,"./rules/require-yield":340,"./rules/semi":342,"./rules/semi-spacing":341,"./rules/sort-vars":343,"./rules/space-after-keywords":344,"./rules/space-before-blocks":345,"./rules/space-before-function-paren":346,"./rules/space-before-keywords":347,"./rules/space-in-parens":348,"./rules/space-infix-ops":349,"./rules/space-return-throw-case":350,"./rules/space-unary-ops":351,"./rules/spaced-comment":352,"./rules/strict":353,"./rules/use-isnan":354,"./rules/valid-jsdoc":355,"./rules/valid-typeof":356,"./rules/vars-on-top":357,"./rules/wrap-iife":358,"./rules/wrap-regex":359,"./rules/yield-star-spacing":360,"./rules/yoda":361}],164:[function(require,module,exports){
23792
+ },{"./rules/accessor-pairs":166,"./rules/array-bracket-spacing":167,"./rules/array-callback-return":168,"./rules/arrow-body-style":169,"./rules/arrow-parens":170,"./rules/arrow-spacing":171,"./rules/block-scoped-var":172,"./rules/block-spacing":173,"./rules/brace-style":174,"./rules/callback-return":175,"./rules/camelcase":176,"./rules/comma-dangle":177,"./rules/comma-spacing":178,"./rules/comma-style":179,"./rules/complexity":180,"./rules/computed-property-spacing":181,"./rules/consistent-return":182,"./rules/consistent-this":183,"./rules/constructor-super":184,"./rules/curly":185,"./rules/default-case":186,"./rules/dot-location":187,"./rules/dot-notation":188,"./rules/eol-last":189,"./rules/eqeqeq":190,"./rules/func-names":191,"./rules/func-style":192,"./rules/generator-star-spacing":193,"./rules/global-require":194,"./rules/guard-for-in":195,"./rules/handle-callback-err":196,"./rules/id-length":197,"./rules/id-match":198,"./rules/indent":199,"./rules/init-declarations":200,"./rules/jsx-quotes":201,"./rules/key-spacing":202,"./rules/keyword-spacing":203,"./rules/linebreak-style":204,"./rules/lines-around-comment":205,"./rules/max-depth":206,"./rules/max-len":207,"./rules/max-nested-callbacks":208,"./rules/max-params":209,"./rules/max-statements":210,"./rules/new-cap":211,"./rules/new-parens":212,"./rules/newline-after-var":213,"./rules/no-alert":214,"./rules/no-array-constructor":215,"./rules/no-arrow-condition":216,"./rules/no-bitwise":217,"./rules/no-caller":218,"./rules/no-case-declarations":219,"./rules/no-catch-shadow":220,"./rules/no-class-assign":221,"./rules/no-cond-assign":222,"./rules/no-confusing-arrow":223,"./rules/no-console":224,"./rules/no-const-assign":225,"./rules/no-constant-condition":226,"./rules/no-continue":227,"./rules/no-control-regex":228,"./rules/no-debugger":229,"./rules/no-delete-var":230,"./rules/no-div-regex":231,"./rules/no-dupe-args":232,"./rules/no-dupe-class-members":233,"./rules/no-dupe-keys":234,"./rules/no-duplicate-case":235,"./rules/no-else-return":236,"./rules/no-empty":240,"./rules/no-empty-character-class":237,"./rules/no-empty-label":238,"./rules/no-empty-pattern":239,"./rules/no-eq-null":241,"./rules/no-eval":242,"./rules/no-ex-assign":243,"./rules/no-extend-native":244,"./rules/no-extra-bind":245,"./rules/no-extra-boolean-cast":246,"./rules/no-extra-parens":247,"./rules/no-extra-semi":248,"./rules/no-fallthrough":249,"./rules/no-floating-decimal":250,"./rules/no-func-assign":251,"./rules/no-implicit-coercion":252,"./rules/no-implicit-globals":253,"./rules/no-implied-eval":254,"./rules/no-inline-comments":255,"./rules/no-inner-declarations":256,"./rules/no-invalid-regexp":257,"./rules/no-invalid-this":258,"./rules/no-irregular-whitespace":259,"./rules/no-iterator":260,"./rules/no-label-var":261,"./rules/no-labels":262,"./rules/no-lone-blocks":263,"./rules/no-lonely-if":264,"./rules/no-loop-func":265,"./rules/no-magic-numbers":266,"./rules/no-mixed-requires":267,"./rules/no-mixed-spaces-and-tabs":268,"./rules/no-multi-spaces":269,"./rules/no-multi-str":270,"./rules/no-multiple-empty-lines":271,"./rules/no-native-reassign":272,"./rules/no-negated-condition":273,"./rules/no-negated-in-lhs":274,"./rules/no-nested-ternary":275,"./rules/no-new":281,"./rules/no-new-func":276,"./rules/no-new-object":277,"./rules/no-new-require":278,"./rules/no-new-symbol":279,"./rules/no-new-wrappers":280,"./rules/no-obj-calls":282,"./rules/no-octal":284,"./rules/no-octal-escape":283,"./rules/no-param-reassign":285,"./rules/no-path-concat":286,"./rules/no-plusplus":287,"./rules/no-process-env":288,"./rules/no-process-exit":289,"./rules/no-proto":290,"./rules/no-redeclare":291,"./rules/no-regex-spaces":292,"./rules/no-restricted-imports":293,"./rules/no-restricted-modules":294,"./rules/no-restricted-syntax":295,"./rules/no-return-assign":296,"./rules/no-script-url":297,"./rules/no-self-compare":298,"./rules/no-sequences":299,"./rules/no-shadow":301,"./rules/no-shadow-restricted-names":300,"./rules/no-spaced-func":302,"./rules/no-sparse-arrays":303,"./rules/no-sync":304,"./rules/no-ternary":305,"./rules/no-this-before-super":306,"./rules/no-throw-literal":307,"./rules/no-trailing-spaces":308,"./rules/no-undef":310,"./rules/no-undef-init":309,"./rules/no-undefined":311,"./rules/no-underscore-dangle":312,"./rules/no-unexpected-multiline":313,"./rules/no-unmodified-loop-condition":314,"./rules/no-unneeded-ternary":315,"./rules/no-unreachable":316,"./rules/no-unused-expressions":317,"./rules/no-unused-vars":318,"./rules/no-use-before-define":319,"./rules/no-useless-call":320,"./rules/no-useless-concat":321,"./rules/no-useless-constructor":322,"./rules/no-var":323,"./rules/no-void":324,"./rules/no-warning-comments":325,"./rules/no-whitespace-before-property":326,"./rules/no-with":327,"./rules/object-curly-spacing":328,"./rules/object-shorthand":329,"./rules/one-var":330,"./rules/operator-assignment":331,"./rules/operator-linebreak":332,"./rules/padded-blocks":333,"./rules/prefer-arrow-callback":334,"./rules/prefer-const":335,"./rules/prefer-reflect":336,"./rules/prefer-rest-params":337,"./rules/prefer-spread":338,"./rules/prefer-template":339,"./rules/quote-props":340,"./rules/quotes":341,"./rules/radix":342,"./rules/require-jsdoc":343,"./rules/require-yield":344,"./rules/semi":346,"./rules/semi-spacing":345,"./rules/sort-imports":347,"./rules/sort-vars":348,"./rules/space-after-keywords":349,"./rules/space-before-blocks":350,"./rules/space-before-function-paren":351,"./rules/space-before-keywords":352,"./rules/space-in-parens":353,"./rules/space-infix-ops":354,"./rules/space-return-throw-case":355,"./rules/space-unary-ops":356,"./rules/spaced-comment":357,"./rules/strict":358,"./rules/use-isnan":359,"./rules/valid-jsdoc":360,"./rules/valid-typeof":361,"./rules/vars-on-top":362,"./rules/wrap-iife":363,"./rules/wrap-regex":364,"./rules/yield-star-spacing":365,"./rules/yoda":366}],164:[function(require,module,exports){
23722
23793
  /**
23723
23794
  * @fileoverview RuleContext utility for rules
23724
23795
  * @author Nicholas C. Zakas
@@ -23759,8 +23830,7 @@ var PASSTHROUGHS = [
23759
23830
  "getTokensAfter",
23760
23831
  "getTokensBefore",
23761
23832
  "getTokensBetween",
23762
- "markVariableAsUsed",
23763
- "isMarkedAsUsed"
23833
+ "markVariableAsUsed"
23764
23834
  ];
23765
23835
 
23766
23836
  //------------------------------------------------------------------------------
@@ -23875,7 +23945,7 @@ PASSTHROUGHS.forEach(function(name) {
23875
23945
 
23876
23946
  module.exports = RuleContext;
23877
23947
 
23878
- },{"./util/rule-fixer":369}],165:[function(require,module,exports){
23948
+ },{"./util/rule-fixer":374}],165:[function(require,module,exports){
23879
23949
  /**
23880
23950
  * @fileoverview Defines a storage for rules.
23881
23951
  * @author Nicholas C. Zakas
@@ -24852,7 +24922,7 @@ module.exports = function(context) {
24852
24922
  var identifier = reference.identifier;
24853
24923
  context.report(
24854
24924
  identifier,
24855
- "\"{{name}}\" used outside of binding context.",
24925
+ "'{{name}}' used outside of binding context.",
24856
24926
  {name: identifier.name});
24857
24927
  }
24858
24928
 
@@ -25003,7 +25073,7 @@ module.exports = function(context) {
25003
25073
  context.report({
25004
25074
  node: node,
25005
25075
  loc: openBrace.loc.start,
25006
- message: message + " after \"{\".",
25076
+ message: message + " after '{'.",
25007
25077
  fix: function(fixer) {
25008
25078
  if (always) {
25009
25079
  return fixer.insertTextBefore(firstToken, " ");
@@ -25017,7 +25087,7 @@ module.exports = function(context) {
25017
25087
  context.report({
25018
25088
  node: node,
25019
25089
  loc: closeBrace.loc.start,
25020
- message: message + " before \"}\".",
25090
+ message: message + " before '}'.",
25021
25091
  fix: function(fixer) {
25022
25092
  if (always) {
25023
25093
  return fixer.insertTextAfter(lastToken, " ");
@@ -25428,6 +25498,9 @@ module.exports = function(context) {
25428
25498
  // Helpers
25429
25499
  //--------------------------------------------------------------------------
25430
25500
 
25501
+ // contains reported nodes to avoid reporting twice on destructuring with shorthand notation
25502
+ var reported = [];
25503
+
25431
25504
  /**
25432
25505
  * Checks if a string contains an underscore and isn't all upper-case
25433
25506
  * @param {String} name The string to check.
@@ -25447,7 +25520,10 @@ module.exports = function(context) {
25447
25520
  * @private
25448
25521
  */
25449
25522
  function report(node) {
25450
- context.report(node, "Identifier '{{name}}' is not in camel case.", { name: node.name });
25523
+ if (reported.indexOf(node) < 0) {
25524
+ reported.push(node);
25525
+ context.report(node, "Identifier '{{name}}' is not in camel case.", { name: node.name });
25526
+ }
25451
25527
  }
25452
25528
 
25453
25529
  var options = context.options[0] || {},
@@ -25460,7 +25536,6 @@ module.exports = function(context) {
25460
25536
  return {
25461
25537
 
25462
25538
  "Identifier": function(node) {
25463
-
25464
25539
  // Leading and trailing underscores are commonly used to flag private/protected identifiers, strip them
25465
25540
  var name = node.name.replace(/^_+|_+$/g, ""),
25466
25541
  effectiveParent = (node.parent.type === "MemberExpression") ? node.parent.parent : node.parent;
@@ -25490,12 +25565,16 @@ module.exports = function(context) {
25490
25565
 
25491
25566
  // Properties have their own rules
25492
25567
  } else if (node.parent.type === "Property") {
25493
-
25494
25568
  // "never" check properties
25495
25569
  if (properties === "never") {
25496
25570
  return;
25497
25571
  }
25498
25572
 
25573
+ if (node.parent.parent && node.parent.parent.type === "ObjectPattern" &&
25574
+ node.parent.key === node && node.parent.value !== node) {
25575
+ return;
25576
+ }
25577
+
25499
25578
  if (isUnderscored(name) && effectiveParent.type !== "CallExpression") {
25500
25579
  report(node);
25501
25580
  }
@@ -25595,7 +25674,7 @@ module.exports = function(context) {
25595
25674
  * This rule handles a given node as multiline when the closing parenthesis
25596
25675
  * and the last element are not on the same line.
25597
25676
  *
25598
- * @param {ASTNode} node - A ndoe to check.
25677
+ * @param {ASTNode} node - A node to check.
25599
25678
  * @returns {boolean} `true` if the node is multiline.
25600
25679
  */
25601
25680
  function isMultiline(node) {
@@ -25606,7 +25685,13 @@ module.exports = function(context) {
25606
25685
 
25607
25686
  var sourceCode = context.getSourceCode(),
25608
25687
  penultimateToken = sourceCode.getLastToken(lastItem),
25609
- lastToken = sourceCode.getLastToken(node);
25688
+ lastToken = sourceCode.getTokenAfter(penultimateToken);
25689
+
25690
+ // parentheses are a pain
25691
+ while (lastToken.value === ")") {
25692
+ penultimateToken = lastToken;
25693
+ lastToken = sourceCode.getTokenAfter(lastToken);
25694
+ }
25610
25695
 
25611
25696
  if (lastToken.value === ",") {
25612
25697
  penultimateToken = lastToken;
@@ -26120,7 +26205,7 @@ module.exports.schema = [
26120
26205
 
26121
26206
  module.exports = function(context) {
26122
26207
 
26123
- var THRESHOLD = context.options[0];
26208
+ var THRESHOLD = (typeof context.options[0] !== "undefined") ? context.options[0] : 20;
26124
26209
 
26125
26210
  //--------------------------------------------------------------------------
26126
26211
  // Helpers
@@ -26511,7 +26596,7 @@ module.exports.schema = [];
26511
26596
  //------------------------------------------------------------------------------
26512
26597
 
26513
26598
  module.exports = function(context) {
26514
- var alias = context.options[0];
26599
+ var alias = context.options[0] || "that";
26515
26600
 
26516
26601
  /**
26517
26602
  * Reports that a variable declarator or assignment expression is assigning
@@ -26734,8 +26819,8 @@ module.exports = function(context) {
26734
26819
  if (!calledInEveryPaths) {
26735
26820
  context.report({
26736
26821
  message: calledInSomePaths ?
26737
- "Lacked a call of \"super()\" in some code paths." :
26738
- "Expected to call \"super()\".",
26822
+ "Lacked a call of 'super()' in some code paths." :
26823
+ "Expected to call 'super()'.",
26739
26824
  node: node.parent
26740
26825
  });
26741
26826
  }
@@ -26802,7 +26887,7 @@ module.exports = function(context) {
26802
26887
 
26803
26888
  if (duplicate) {
26804
26889
  context.report({
26805
- message: "Unexpected duplicate \"super()\".",
26890
+ message: "Unexpected duplicate 'super()'.",
26806
26891
  node: node
26807
26892
  });
26808
26893
  }
@@ -26810,7 +26895,7 @@ module.exports = function(context) {
26810
26895
  // This class does not have a valid `extends` part.
26811
26896
  // Disallow `super()`.
26812
26897
  context.report({
26813
- message: "Unexpected \"super()\".",
26898
+ message: "Unexpected 'super()'.",
26814
26899
  node: node
26815
26900
  });
26816
26901
  }
@@ -27309,7 +27394,7 @@ module.exports.schema = [
27309
27394
  }
27310
27395
  ];
27311
27396
 
27312
- },{"../util/keywords":367}],189:[function(require,module,exports){
27397
+ },{"../util/keywords":372}],189:[function(require,module,exports){
27313
27398
  /**
27314
27399
  * @fileoverview Require file to end with single newline.
27315
27400
  * @author Nodeca Team <https://github.com/nodeca>
@@ -29085,8 +29170,8 @@ function isSingleLine(node) {
29085
29170
  //------------------------------------------------------------------------------
29086
29171
 
29087
29172
  var messages = {
29088
- key: "{{error}} space after {{computed}}key \"{{key}}\".",
29089
- value: "{{error}} space before value for {{computed}}key \"{{key}}\"."
29173
+ key: "{{error}} space after {{computed}}key '{{key}}'.",
29174
+ value: "{{error}} space before value for {{computed}}key '{{key}}'."
29090
29175
  };
29091
29176
 
29092
29177
  module.exports = function(context) {
@@ -29106,6 +29191,20 @@ module.exports = function(context) {
29106
29191
  beforeColon = +!!options.beforeColon, // Defaults to false
29107
29192
  afterColon = +!(options.afterColon === false); // Defaults to true
29108
29193
 
29194
+ /**
29195
+ * Determines if the given property is key-value property.
29196
+ * @param {ASTNode} property Property node to check.
29197
+ * @returns {Boolean} Whether the property is a key-value property.
29198
+ */
29199
+ function isKeyValueProperty(property) {
29200
+ return !(
29201
+ property.method ||
29202
+ property.shorthand ||
29203
+ property.kind !== "init" ||
29204
+ property.type !== "Property" // Could be "ExperimentalSpreadProperty" or "SpreadProperty"
29205
+ );
29206
+ }
29207
+
29109
29208
  /**
29110
29209
  * Starting from the given a node (a property.key node here) looks forward
29111
29210
  * until it finds the last token before a colon punctuator and returns it.
@@ -29188,11 +29287,6 @@ module.exports = function(context) {
29188
29287
  function getKeyWidth(property) {
29189
29288
  var startToken, endToken;
29190
29289
 
29191
- // Ignore shorthand methods and properties, as they have no colon
29192
- if (property.method || property.shorthand) {
29193
- return 0;
29194
- }
29195
-
29196
29290
  startToken = context.getFirstToken(property);
29197
29291
  endToken = getLastTokenBeforeColon(property.key);
29198
29292
 
@@ -29283,7 +29377,7 @@ module.exports = function(context) {
29283
29377
  */
29284
29378
  function verifyAlignment(node) {
29285
29379
  createGroups(node).forEach(function(group) {
29286
- verifyGroupAlignment(group);
29380
+ verifyGroupAlignment(group.filter(isKeyValueProperty));
29287
29381
  });
29288
29382
  }
29289
29383
 
@@ -29363,6 +29457,498 @@ module.exports.schema = [
29363
29457
  ];
29364
29458
 
29365
29459
  },{}],203:[function(require,module,exports){
29460
+ /**
29461
+ * @fileoverview Rule to enforce spacing before and after keywords.
29462
+ * @author Toru Nagashima
29463
+ * @copyright 2015 Toru Nagashima. All rights reserved.
29464
+ * See LICENSE file in root directory for full license.
29465
+ */
29466
+
29467
+ "use strict";
29468
+
29469
+ //------------------------------------------------------------------------------
29470
+ // Requirements
29471
+ //------------------------------------------------------------------------------
29472
+
29473
+ var astUtils = require("../ast-utils"),
29474
+ keywords = require("../util/keywords");
29475
+
29476
+ //------------------------------------------------------------------------------
29477
+ // Constants
29478
+ //------------------------------------------------------------------------------
29479
+
29480
+ var PREV_TOKEN = /^[\)\]\}>]$/;
29481
+ var NEXT_TOKEN = /^(?:[\(\[\{<~!]|\+\+?|--?)$/;
29482
+ var PREV_TOKEN_M = /^[\)\]\}>*]$/;
29483
+ var NEXT_TOKEN_M = /^[\{*]$/;
29484
+ var CHECK_TYPE = /^(?:JSXElement|RegularExpression|String|Template)$/;
29485
+ var KEYS = keywords.concat(["as", "await", "from", "get", "let", "of", "set", "yield"]);
29486
+
29487
+ // check duplications.
29488
+ (function() {
29489
+ KEYS.sort();
29490
+ for (var i = 1; i < KEYS.length; ++i) {
29491
+ if (KEYS[i] === KEYS[i - 1]) {
29492
+ throw new Error("Duplication was found in the keyword list: " + KEYS[i]);
29493
+ }
29494
+ }
29495
+ }());
29496
+
29497
+ //------------------------------------------------------------------------------
29498
+ // Rule Definition
29499
+ //------------------------------------------------------------------------------
29500
+
29501
+ module.exports = function(context) {
29502
+ var sourceCode = context.getSourceCode();
29503
+
29504
+ /**
29505
+ * Reports a given token if there are not space(s) before the token.
29506
+ *
29507
+ * @param {Token} token - A token to report.
29508
+ * @param {RegExp|undefined} pattern - Optional. A pattern of the previous
29509
+ * token to check.
29510
+ * @returns {void}
29511
+ */
29512
+ function expectSpaceBefore(token, pattern) {
29513
+ pattern = pattern || PREV_TOKEN;
29514
+
29515
+ var prevToken = sourceCode.getTokenBefore(token);
29516
+ if (prevToken &&
29517
+ (CHECK_TYPE.test(prevToken.type) || pattern.test(prevToken.value)) &&
29518
+ astUtils.isTokenOnSameLine(prevToken, token) &&
29519
+ !sourceCode.isSpaceBetweenTokens(prevToken, token)
29520
+ ) {
29521
+ context.report({
29522
+ loc: token.loc.start,
29523
+ message: "Expected space(s) before \"{{value}}\".",
29524
+ data: token,
29525
+ fix: function(fixer) {
29526
+ return fixer.insertTextBefore(token, " ");
29527
+ }
29528
+ });
29529
+ }
29530
+ }
29531
+
29532
+ /**
29533
+ * Reports a given token if there are space(s) before the token.
29534
+ *
29535
+ * @param {Token} token - A token to report.
29536
+ * @param {RegExp|undefined} pattern - Optional. A pattern of the previous
29537
+ * token to check.
29538
+ * @returns {void}
29539
+ */
29540
+ function unexpectSpaceBefore(token, pattern) {
29541
+ pattern = pattern || PREV_TOKEN;
29542
+
29543
+ var prevToken = sourceCode.getTokenBefore(token);
29544
+ if (prevToken &&
29545
+ (CHECK_TYPE.test(prevToken.type) || pattern.test(prevToken.value)) &&
29546
+ astUtils.isTokenOnSameLine(prevToken, token) &&
29547
+ sourceCode.isSpaceBetweenTokens(prevToken, token)
29548
+ ) {
29549
+ context.report({
29550
+ loc: token.loc.start,
29551
+ message: "Unexpected space(s) before \"{{value}}\".",
29552
+ data: token,
29553
+ fix: function(fixer) {
29554
+ return fixer.removeRange([prevToken.range[1], token.range[0]]);
29555
+ }
29556
+ });
29557
+ }
29558
+ }
29559
+
29560
+ /**
29561
+ * Reports a given token if there are not space(s) after the token.
29562
+ *
29563
+ * @param {Token} token - A token to report.
29564
+ * @param {RegExp|undefined} pattern - Optional. A pattern of the next
29565
+ * token to check.
29566
+ * @returns {void}
29567
+ */
29568
+ function expectSpaceAfter(token, pattern) {
29569
+ pattern = pattern || NEXT_TOKEN;
29570
+
29571
+ var nextToken = sourceCode.getTokenAfter(token);
29572
+ if (nextToken &&
29573
+ (CHECK_TYPE.test(nextToken.type) || pattern.test(nextToken.value)) &&
29574
+ astUtils.isTokenOnSameLine(token, nextToken) &&
29575
+ !sourceCode.isSpaceBetweenTokens(token, nextToken)
29576
+ ) {
29577
+ context.report({
29578
+ loc: token.loc.start,
29579
+ message: "Expected space(s) after \"{{value}}\".",
29580
+ data: token,
29581
+ fix: function(fixer) {
29582
+ return fixer.insertTextAfter(token, " ");
29583
+ }
29584
+ });
29585
+ }
29586
+ }
29587
+
29588
+ /**
29589
+ * Reports a given token if there are space(s) after the token.
29590
+ *
29591
+ * @param {Token} token - A token to report.
29592
+ * @param {RegExp|undefined} pattern - Optional. A pattern of the next
29593
+ * token to check.
29594
+ * @returns {void}
29595
+ */
29596
+ function unexpectSpaceAfter(token, pattern) {
29597
+ pattern = pattern || NEXT_TOKEN;
29598
+
29599
+ var nextToken = sourceCode.getTokenAfter(token);
29600
+ if (nextToken &&
29601
+ (CHECK_TYPE.test(nextToken.type) || pattern.test(nextToken.value)) &&
29602
+ astUtils.isTokenOnSameLine(token, nextToken) &&
29603
+ sourceCode.isSpaceBetweenTokens(token, nextToken)
29604
+ ) {
29605
+ context.report({
29606
+ loc: token.loc.start,
29607
+ message: "Unexpected space(s) after \"{{value}}\".",
29608
+ data: token,
29609
+ fix: function(fixer) {
29610
+ return fixer.removeRange([token.range[1], nextToken.range[0]]);
29611
+ }
29612
+ });
29613
+ }
29614
+ }
29615
+
29616
+ /**
29617
+ * Parses the option object and determines check methods for each keyword.
29618
+ *
29619
+ * @param {object|undefined} options - The option object to parse.
29620
+ * @returns {object} - Normalized option object.
29621
+ * Keys are keywords (there are for every keyword).
29622
+ * Values are instances of `{"before": function, "after": function}`.
29623
+ */
29624
+ function parseOptions(options) {
29625
+ var before = !options || options.before !== false;
29626
+ var after = !options || options.after !== false;
29627
+ var defaultValue = {
29628
+ before: before ? expectSpaceBefore : unexpectSpaceBefore,
29629
+ after: after ? expectSpaceAfter : unexpectSpaceAfter
29630
+ };
29631
+ var overrides = (options && options.overrides) || {};
29632
+ var retv = Object.create(null);
29633
+
29634
+ for (var i = 0; i < KEYS.length; ++i) {
29635
+ var key = KEYS[i];
29636
+ var override = overrides[key];
29637
+
29638
+ if (override) {
29639
+ var thisBefore = ("before" in override) ? override.before : before;
29640
+ var thisAfter = ("after" in override) ? override.after : after;
29641
+ retv[key] = {
29642
+ before: thisBefore ? expectSpaceBefore : unexpectSpaceBefore,
29643
+ after: thisAfter ? expectSpaceAfter : unexpectSpaceAfter
29644
+ };
29645
+ } else {
29646
+ retv[key] = defaultValue;
29647
+ }
29648
+ }
29649
+
29650
+ return retv;
29651
+ }
29652
+
29653
+ var checkMethodMap = parseOptions(context.options[0]);
29654
+
29655
+ /**
29656
+ * Reports a given token if usage of spacing followed by the token is
29657
+ * invalid.
29658
+ *
29659
+ * @param {Token} token - A token to report.
29660
+ * @param {RegExp|undefined} pattern - Optional. A pattern of the previous
29661
+ * token to check.
29662
+ * @returns {void}
29663
+ */
29664
+ function checkSpacingBefore(token, pattern) {
29665
+ checkMethodMap[token.value].before(token, pattern);
29666
+ }
29667
+
29668
+ /**
29669
+ * Reports a given token if usage of spacing preceded by the token is
29670
+ * invalid.
29671
+ *
29672
+ * @param {Token} token - A token to report.
29673
+ * @param {RegExp|undefined} pattern - Optional. A pattern of the next
29674
+ * token to check.
29675
+ * @returns {void}
29676
+ */
29677
+ function checkSpacingAfter(token, pattern) {
29678
+ checkMethodMap[token.value].after(token, pattern);
29679
+ }
29680
+
29681
+ /**
29682
+ * Reports a given token if usage of spacing around the token is invalid.
29683
+ *
29684
+ * @param {Token} token - A token to report.
29685
+ * @returns {void}
29686
+ */
29687
+ function checkSpacingAround(token) {
29688
+ checkSpacingBefore(token);
29689
+ checkSpacingAfter(token);
29690
+ }
29691
+
29692
+ /**
29693
+ * Reports the first token of a given node if the first token is a keyword
29694
+ * and usage of spacing around the token is invalid.
29695
+ *
29696
+ * @param {ASTNode|null} node - A node to report.
29697
+ * @returns {void}
29698
+ */
29699
+ function checkSpacingAroundFirstToken(node) {
29700
+ var firstToken = node && sourceCode.getFirstToken(node);
29701
+ if (firstToken && firstToken.type === "Keyword") {
29702
+ checkSpacingAround(firstToken);
29703
+ }
29704
+ }
29705
+
29706
+ /**
29707
+ * Reports the first token of a given node if the first token is a keyword
29708
+ * and usage of spacing followed by the token is invalid.
29709
+ *
29710
+ * This is used for unary operators (e.g. `typeof`), `function`, and `super`.
29711
+ * Other rules are handling usage of spacing preceded by those keywords.
29712
+ *
29713
+ * @param {ASTNode|null} node - A node to report.
29714
+ * @returns {void}
29715
+ */
29716
+ function checkSpacingBeforeFirstToken(node) {
29717
+ var firstToken = node && sourceCode.getFirstToken(node);
29718
+ if (firstToken && firstToken.type === "Keyword") {
29719
+ checkSpacingBefore(firstToken);
29720
+ }
29721
+ }
29722
+
29723
+ /**
29724
+ * Reports the previous token of a given node if the token is a keyword and
29725
+ * usage of spacing around the token is invalid.
29726
+ *
29727
+ * @param {ASTNode|null} node - A node to report.
29728
+ * @returns {void}
29729
+ */
29730
+ function checkSpacingAroundTokenBefore(node) {
29731
+ if (node) {
29732
+ var token = sourceCode.getTokenBefore(node);
29733
+ while (token.type !== "Keyword") {
29734
+ token = sourceCode.getTokenBefore(token);
29735
+ }
29736
+
29737
+ checkSpacingAround(token);
29738
+ }
29739
+ }
29740
+
29741
+ /**
29742
+ * Reports `class` and `extends` keywords of a given node if usage of
29743
+ * spacing around those keywords is invalid.
29744
+ *
29745
+ * @param {ASTNode} node - A node to report.
29746
+ * @returns {void}
29747
+ */
29748
+ function checkSpacingForClass(node) {
29749
+ checkSpacingAroundFirstToken(node);
29750
+ checkSpacingAroundTokenBefore(node.superClass);
29751
+ }
29752
+
29753
+ /**
29754
+ * Reports `if` and `else` keywords of a given node if usage of spacing
29755
+ * around those keywords is invalid.
29756
+ *
29757
+ * @param {ASTNode} node - A node to report.
29758
+ * @returns {void}
29759
+ */
29760
+ function checkSpacingForIfStatement(node) {
29761
+ checkSpacingAroundFirstToken(node);
29762
+ checkSpacingAroundTokenBefore(node.alternate);
29763
+ }
29764
+
29765
+ /**
29766
+ * Reports `try`, `catch`, and `finally` keywords of a given node if usage
29767
+ * of spacing around those keywords is invalid.
29768
+ *
29769
+ * @param {ASTNode} node - A node to report.
29770
+ * @returns {void}
29771
+ */
29772
+ function checkSpacingForTryStatement(node) {
29773
+ checkSpacingAroundFirstToken(node);
29774
+ checkSpacingAroundFirstToken(node.handler);
29775
+ checkSpacingAroundTokenBefore(node.finalizer);
29776
+ }
29777
+
29778
+ /**
29779
+ * Reports `do` and `while` keywords of a given node if usage of spacing
29780
+ * around those keywords is invalid.
29781
+ *
29782
+ * @param {ASTNode} node - A node to report.
29783
+ * @returns {void}
29784
+ */
29785
+ function checkSpacingForDoWhileStatement(node) {
29786
+ checkSpacingAroundFirstToken(node);
29787
+ checkSpacingAroundTokenBefore(node.test);
29788
+ }
29789
+
29790
+ /**
29791
+ * Reports `for` and `in` keywords of a given node if usage of spacing
29792
+ * around those keywords is invalid.
29793
+ *
29794
+ * @param {ASTNode} node - A node to report.
29795
+ * @returns {void}
29796
+ */
29797
+ function checkSpacingForForInStatement(node) {
29798
+ checkSpacingAroundFirstToken(node);
29799
+ checkSpacingAroundTokenBefore(node.right);
29800
+ }
29801
+
29802
+ /**
29803
+ * Reports `for` and `of` keywords of a given node if usage of spacing
29804
+ * around those keywords is invalid.
29805
+ *
29806
+ * @param {ASTNode} node - A node to report.
29807
+ * @returns {void}
29808
+ */
29809
+ function checkSpacingForForOfStatement(node) {
29810
+ checkSpacingAroundFirstToken(node);
29811
+
29812
+ // `of` is not a keyword token.
29813
+ var token = sourceCode.getTokenBefore(node.right);
29814
+ while (token.value !== "of") {
29815
+ token = sourceCode.getTokenBefore(token);
29816
+ }
29817
+ checkSpacingAround(token);
29818
+ }
29819
+
29820
+ /**
29821
+ * Reports `import`, `export`, `as`, and `from` keywords of a given node if
29822
+ * usage of spacing around those keywords is invalid.
29823
+ *
29824
+ * This rule handles the `*` token in module declarations.
29825
+ *
29826
+ * import*as A from "./a"; /*error Expected space(s) after "import".
29827
+ * error Expected space(s) before "as".
29828
+ *
29829
+ * @param {ASTNode} node - A node to report.
29830
+ * @returns {void}
29831
+ */
29832
+ function checkSpacingForModuleDeclaration(node) {
29833
+ var firstToken = sourceCode.getFirstToken(node);
29834
+ checkSpacingBefore(firstToken, PREV_TOKEN_M);
29835
+ checkSpacingAfter(firstToken, NEXT_TOKEN_M);
29836
+
29837
+ if (node.source) {
29838
+ var fromToken = sourceCode.getTokenBefore(node.source);
29839
+ checkSpacingBefore(fromToken, PREV_TOKEN_M);
29840
+ checkSpacingAfter(fromToken, NEXT_TOKEN_M);
29841
+ }
29842
+ }
29843
+
29844
+ /**
29845
+ * Reports `as` keyword of a given node if usage of spacing around this
29846
+ * keyword is invalid.
29847
+ *
29848
+ * @param {ASTNode} node - A node to report.
29849
+ * @returns {void}
29850
+ */
29851
+ function checkSpacingForImportNamespaceSpecifier(node) {
29852
+ var asToken = sourceCode.getFirstToken(node, 1);
29853
+ checkSpacingBefore(asToken, PREV_TOKEN_M);
29854
+ }
29855
+
29856
+ /**
29857
+ * Reports `static`, `get`, and `set` keywords of a given node if usage of
29858
+ * spacing around those keywords is invalid.
29859
+ *
29860
+ * @param {ASTNode} node - A node to report.
29861
+ * @returns {void}
29862
+ */
29863
+ function checkSpacingForProperty(node) {
29864
+ if (node.static) {
29865
+ checkSpacingAroundFirstToken(node);
29866
+ }
29867
+ if (node.kind === "get" || node.kind === "set") {
29868
+ var token = sourceCode.getFirstToken(
29869
+ node,
29870
+ node.static ? 1 : 0
29871
+ );
29872
+ checkSpacingAround(token);
29873
+ }
29874
+ }
29875
+
29876
+ return {
29877
+ // Statements
29878
+ DebuggerStatement: checkSpacingAroundFirstToken,
29879
+ WithStatement: checkSpacingAroundFirstToken,
29880
+
29881
+ // Statements - Control flow
29882
+ BreakStatement: checkSpacingAroundFirstToken,
29883
+ ContinueStatement: checkSpacingAroundFirstToken,
29884
+ ReturnStatement: checkSpacingAroundFirstToken,
29885
+ ThrowStatement: checkSpacingAroundFirstToken,
29886
+ TryStatement: checkSpacingForTryStatement,
29887
+
29888
+ // Statements - Choice
29889
+ IfStatement: checkSpacingForIfStatement,
29890
+ SwitchStatement: checkSpacingAroundFirstToken,
29891
+ SwitchCase: checkSpacingAroundFirstToken,
29892
+
29893
+ // Statements - Loops
29894
+ DoWhileStatement: checkSpacingForDoWhileStatement,
29895
+ ForInStatement: checkSpacingForForInStatement,
29896
+ ForOfStatement: checkSpacingForForOfStatement,
29897
+ ForStatement: checkSpacingAroundFirstToken,
29898
+ WhileStatement: checkSpacingAroundFirstToken,
29899
+
29900
+ // Statements - Declarations
29901
+ ClassDeclaration: checkSpacingForClass,
29902
+ ExportNamedDeclaration: checkSpacingForModuleDeclaration,
29903
+ ExportDefaultDeclaration: checkSpacingAroundFirstToken,
29904
+ ExportAllDeclaration: checkSpacingForModuleDeclaration,
29905
+ FunctionDeclaration: checkSpacingBeforeFirstToken,
29906
+ ImportDeclaration: checkSpacingForModuleDeclaration,
29907
+ VariableDeclaration: checkSpacingAroundFirstToken,
29908
+
29909
+ // Expressions
29910
+ ClassExpression: checkSpacingForClass,
29911
+ FunctionExpression: checkSpacingBeforeFirstToken,
29912
+ NewExpression: checkSpacingBeforeFirstToken,
29913
+ Super: checkSpacingBeforeFirstToken,
29914
+ ThisExpression: checkSpacingBeforeFirstToken,
29915
+ UnaryExpression: checkSpacingBeforeFirstToken,
29916
+ YieldExpression: checkSpacingBeforeFirstToken,
29917
+
29918
+ // Others
29919
+ ImportNamespaceSpecifier: checkSpacingForImportNamespaceSpecifier,
29920
+ MethodDefinition: checkSpacingForProperty,
29921
+ Property: checkSpacingForProperty
29922
+ };
29923
+ };
29924
+
29925
+ module.exports.schema = [
29926
+ {
29927
+ "type": "object",
29928
+ "properties": {
29929
+ "before": {"type": "boolean"},
29930
+ "after": {"type": "boolean"},
29931
+ "overrides": {
29932
+ "type": "object",
29933
+ "properties": KEYS.reduce(function(retv, key) {
29934
+ retv[key] = {
29935
+ "type": "object",
29936
+ "properties": {
29937
+ "before": {"type": "boolean"},
29938
+ "after": {"type": "boolean"}
29939
+ },
29940
+ "additionalProperties": false
29941
+ };
29942
+ return retv;
29943
+ }, {}),
29944
+ "additionalProperties": false
29945
+ }
29946
+ },
29947
+ "additionalProperties": false
29948
+ }
29949
+ ];
29950
+
29951
+ },{"../ast-utils":152,"../util/keywords":372}],204:[function(require,module,exports){
29366
29952
  /**
29367
29953
  * @fileoverview Rule to forbid mixing LF and LFCR line breaks.
29368
29954
  * @author Erik Mueller
@@ -29443,7 +30029,7 @@ module.exports.schema = [
29443
30029
  }
29444
30030
  ];
29445
30031
 
29446
- },{}],204:[function(require,module,exports){
30032
+ },{}],205:[function(require,module,exports){
29447
30033
  /**
29448
30034
  * @fileoverview Enforces empty lines around comments.
29449
30035
  * @author Jamund Ferguson
@@ -29779,7 +30365,7 @@ module.exports.schema = [
29779
30365
  }
29780
30366
  ];
29781
30367
 
29782
- },{"object-assign":151}],205:[function(require,module,exports){
30368
+ },{"object-assign":151}],206:[function(require,module,exports){
29783
30369
  /**
29784
30370
  * @fileoverview A rule to set the maximum depth block can be nested in a function.
29785
30371
  * @author Ian Christian Myers
@@ -29891,7 +30477,7 @@ module.exports.schema = [
29891
30477
  }
29892
30478
  ];
29893
30479
 
29894
- },{}],206:[function(require,module,exports){
30480
+ },{}],207:[function(require,module,exports){
29895
30481
  /**
29896
30482
  * @fileoverview Rule to check for max length on a line.
29897
30483
  * @author Matt DuVall <http://www.mattduvall.com>
@@ -30113,7 +30699,7 @@ module.exports.schema = [
30113
30699
  OPTIONS_SCHEMA
30114
30700
  ];
30115
30701
 
30116
- },{}],207:[function(require,module,exports){
30702
+ },{}],208:[function(require,module,exports){
30117
30703
  /**
30118
30704
  * @fileoverview Rule to enforce a maximum number of nested callbacks.
30119
30705
  * @author Ian Christian Myers
@@ -30188,7 +30774,7 @@ module.exports.schema = [
30188
30774
  }
30189
30775
  ];
30190
30776
 
30191
- },{}],208:[function(require,module,exports){
30777
+ },{}],209:[function(require,module,exports){
30192
30778
  /**
30193
30779
  * @fileoverview Rule to flag when a function has too many parameters
30194
30780
  * @author Ilya Volodin
@@ -30235,7 +30821,7 @@ module.exports.schema = [
30235
30821
  }
30236
30822
  ];
30237
30823
 
30238
- },{}],209:[function(require,module,exports){
30824
+ },{}],210:[function(require,module,exports){
30239
30825
  /**
30240
30826
  * @fileoverview A rule to set the maximum number of statements in a function.
30241
30827
  * @author Ian Christian Myers
@@ -30255,7 +30841,26 @@ module.exports = function(context) {
30255
30841
  //--------------------------------------------------------------------------
30256
30842
 
30257
30843
  var functionStack = [],
30258
- maxStatements = context.options[0] || 10;
30844
+ maxStatements = context.options[0] || 10,
30845
+ ignoreTopLevelFunctions = context.options[1] && context.options[1].ignoreTopLevelFunctions || false,
30846
+ topLevelFunctions = [];
30847
+
30848
+ /**
30849
+ * Reports a node if it has too many statements
30850
+ * @param {ASTNode} node node to evaluate
30851
+ * @param {int} count Number of statements in node
30852
+ * @param {int} max Maximum number of statements allowed
30853
+ * @returns {void}
30854
+ * @private
30855
+ */
30856
+ function reportIfTooManyStatements(node, count, max) {
30857
+ if (count > max) {
30858
+ context.report(
30859
+ node,
30860
+ "This function has too many statements ({{count}}). Maximum allowed is {{max}}.",
30861
+ { count: count, max: max });
30862
+ }
30863
+ }
30259
30864
 
30260
30865
  /**
30261
30866
  * When parsing a new function, store it in our function stack
@@ -30274,10 +30879,10 @@ module.exports = function(context) {
30274
30879
  */
30275
30880
  function endFunction(node) {
30276
30881
  var count = functionStack.pop();
30277
-
30278
- if (count > maxStatements) {
30279
- context.report(node, "This function has too many statements ({{count}}). Maximum allowed is {{max}}.",
30280
- { count: count, max: maxStatements });
30882
+ if (ignoreTopLevelFunctions && functionStack.length === 0) {
30883
+ topLevelFunctions.push({ node: node, count: count});
30884
+ } else {
30885
+ reportIfTooManyStatements(node, count, maxStatements);
30281
30886
  }
30282
30887
  }
30283
30888
 
@@ -30304,7 +30909,19 @@ module.exports = function(context) {
30304
30909
 
30305
30910
  "FunctionDeclaration:exit": endFunction,
30306
30911
  "FunctionExpression:exit": endFunction,
30307
- "ArrowFunctionExpression:exit": endFunction
30912
+ "ArrowFunctionExpression:exit": endFunction,
30913
+
30914
+ "Program:exit": function() {
30915
+ if (topLevelFunctions.length === 1) {
30916
+ return;
30917
+ }
30918
+
30919
+ topLevelFunctions.forEach(function(element) {
30920
+ var count = element.count;
30921
+ var node = element.node;
30922
+ reportIfTooManyStatements(node, count, maxStatements);
30923
+ });
30924
+ }
30308
30925
  };
30309
30926
 
30310
30927
  };
@@ -30312,10 +30929,19 @@ module.exports = function(context) {
30312
30929
  module.exports.schema = [
30313
30930
  {
30314
30931
  "type": "integer"
30932
+ },
30933
+ {
30934
+ "type": "object",
30935
+ "properties": {
30936
+ "ignoreTopLevelFunctions": {
30937
+ "type": "boolean"
30938
+ }
30939
+ },
30940
+ "additionalProperties": false
30315
30941
  }
30316
30942
  ];
30317
30943
 
30318
- },{}],210:[function(require,module,exports){
30944
+ },{}],211:[function(require,module,exports){
30319
30945
  /**
30320
30946
  * @fileoverview Rule to flag use of constructors without capital letters
30321
30947
  * @author Nicholas C. Zakas
@@ -30558,7 +31184,7 @@ module.exports.schema = [
30558
31184
  }
30559
31185
  ];
30560
31186
 
30561
- },{"object-assign":151}],211:[function(require,module,exports){
31187
+ },{"object-assign":151}],212:[function(require,module,exports){
30562
31188
  /**
30563
31189
  * @fileoverview Rule to flag when using constructor without parentheses
30564
31190
  * @author Ilya Volodin
@@ -30589,7 +31215,7 @@ module.exports = function(context) {
30589
31215
 
30590
31216
  module.exports.schema = [];
30591
31217
 
30592
- },{}],212:[function(require,module,exports){
31218
+ },{}],213:[function(require,module,exports){
30593
31219
  /**
30594
31220
  * @fileoverview Rule to check empty newline after "var" statement
30595
31221
  * @author Gopal Venkatesan
@@ -30767,7 +31393,7 @@ module.exports.schema = [
30767
31393
  }
30768
31394
  ];
30769
31395
 
30770
- },{}],213:[function(require,module,exports){
31396
+ },{}],214:[function(require,module,exports){
30771
31397
  /**
30772
31398
  * @fileoverview Rule to flag use of alert, confirm, prompt
30773
31399
  * @author Nicholas C. Zakas
@@ -30904,7 +31530,7 @@ module.exports = function(context) {
30904
31530
 
30905
31531
  module.exports.schema = [];
30906
31532
 
30907
- },{}],214:[function(require,module,exports){
31533
+ },{}],215:[function(require,module,exports){
30908
31534
  /**
30909
31535
  * @fileoverview Disallow construction of dense arrays using the Array constructor
30910
31536
  * @author Matt DuVall <http://www.mattduvall.com/>
@@ -30943,7 +31569,7 @@ module.exports = function(context) {
30943
31569
 
30944
31570
  module.exports.schema = [];
30945
31571
 
30946
- },{}],215:[function(require,module,exports){
31572
+ },{}],216:[function(require,module,exports){
30947
31573
  /**
30948
31574
  * @fileoverview A rule to warn against using arrow functions in conditions.
30949
31575
  * @author Jxck <https://github.com/Jxck>
@@ -31007,7 +31633,7 @@ module.exports = function(context) {
31007
31633
  */
31008
31634
  function checkCondition(node) {
31009
31635
  if (isArrowFunction(node)) {
31010
- context.report(node, "Arrow function `=>` used inside {{statementType}} instead of comparison operator.", {statementType: node.type});
31636
+ context.report(node, "Arrow function '=>' used inside {{statementType}} instead of comparison operator.", {statementType: node.type});
31011
31637
  }
31012
31638
  }
31013
31639
 
@@ -31033,7 +31659,7 @@ module.exports = function(context) {
31033
31659
 
31034
31660
  module.exports.schema = [];
31035
31661
 
31036
- },{}],216:[function(require,module,exports){
31662
+ },{}],217:[function(require,module,exports){
31037
31663
  /**
31038
31664
  * @fileoverview Rule to flag bitwise identifiers
31039
31665
  * @author Nicholas C. Zakas
@@ -31041,17 +31667,22 @@ module.exports.schema = [];
31041
31667
 
31042
31668
  "use strict";
31043
31669
 
31670
+ //
31671
+ // Set of bitwise operators.
31672
+ //
31673
+ var BITWISE_OPERATORS = [
31674
+ "^", "|", "&", "<<", ">>", ">>>",
31675
+ "^=", "|=", "&=", "<<=", ">>=", ">>>=",
31676
+ "~"
31677
+ ];
31678
+
31044
31679
  //------------------------------------------------------------------------------
31045
31680
  // Rule Definition
31046
31681
  //------------------------------------------------------------------------------
31047
31682
 
31048
31683
  module.exports = function(context) {
31049
-
31050
- var BITWISE_OPERATORS = [
31051
- "^", "|", "&", "<<", ">>", ">>>",
31052
- "^=", "|=", "&=", "<<=", ">>=", ">>>=",
31053
- "~"
31054
- ];
31684
+ var options = context.options[0] || {};
31685
+ var allowed = options.allow || [];
31055
31686
 
31056
31687
  /**
31057
31688
  * Reports an unexpected use of a bitwise operator.
@@ -31071,13 +31702,22 @@ module.exports = function(context) {
31071
31702
  return BITWISE_OPERATORS.indexOf(node.operator) !== -1;
31072
31703
  }
31073
31704
 
31705
+ /**
31706
+ * Checks if exceptions were provided, e.g. `{ allow: ['~', '|'] }`.
31707
+ * @param {ASTNode} node The node to check.
31708
+ * @returns {boolean} Whether or not the node has a bitwise operator.
31709
+ */
31710
+ function allowedOperator(node) {
31711
+ return allowed.indexOf(node.operator) !== -1;
31712
+ }
31713
+
31074
31714
  /**
31075
31715
  * Report if the given node contains a bitwise operator.
31076
- * @param {ASTNode} node The node to check.
31716
+ * @param {ASTNode} node The node to check.
31077
31717
  * @returns {void}
31078
31718
  */
31079
31719
  function checkNodeForBitwiseOperator(node) {
31080
- if (hasBitwiseOperator(node)) {
31720
+ if (hasBitwiseOperator(node) && !allowedOperator(node)) {
31081
31721
  report(node);
31082
31722
  }
31083
31723
  }
@@ -31090,9 +31730,23 @@ module.exports = function(context) {
31090
31730
 
31091
31731
  };
31092
31732
 
31093
- module.exports.schema = [];
31733
+ module.exports.schema = [
31734
+ {
31735
+ "type": "object",
31736
+ "properties": {
31737
+ "allow": {
31738
+ "type": "array",
31739
+ "items": {
31740
+ "enum": BITWISE_OPERATORS
31741
+ },
31742
+ "uniqueItems": true
31743
+ }
31744
+ },
31745
+ "additionalProperties": false
31746
+ }
31747
+ ];
31094
31748
 
31095
- },{}],217:[function(require,module,exports){
31749
+ },{}],218:[function(require,module,exports){
31096
31750
  /**
31097
31751
  * @fileoverview Rule to flag use of arguments.callee and arguments.caller.
31098
31752
  * @author Nicholas C. Zakas
@@ -31123,7 +31777,7 @@ module.exports = function(context) {
31123
31777
 
31124
31778
  module.exports.schema = [];
31125
31779
 
31126
- },{}],218:[function(require,module,exports){
31780
+ },{}],219:[function(require,module,exports){
31127
31781
  /**
31128
31782
  * @fileoverview Rule to flag use of an lexical declarations inside a case clause
31129
31783
  * @author Erik Arvidsson
@@ -31172,7 +31826,7 @@ module.exports = function(context) {
31172
31826
 
31173
31827
  module.exports.schema = [];
31174
31828
 
31175
- },{}],219:[function(require,module,exports){
31829
+ },{}],220:[function(require,module,exports){
31176
31830
  /**
31177
31831
  * @fileoverview Rule to flag variable leak in CatchClauses in IE 8 and earlier
31178
31832
  * @author Ian Christian Myers
@@ -31232,7 +31886,7 @@ module.exports = function(context) {
31232
31886
 
31233
31887
  module.exports.schema = [];
31234
31888
 
31235
- },{"../ast-utils":152}],220:[function(require,module,exports){
31889
+ },{"../ast-utils":152}],221:[function(require,module,exports){
31236
31890
  /**
31237
31891
  * @fileoverview A rule to disallow modifying variables of class declarations
31238
31892
  * @author Toru Nagashima
@@ -31258,7 +31912,7 @@ module.exports = function(context) {
31258
31912
  astUtils.getModifyingReferences(variable.references).forEach(function(reference) {
31259
31913
  context.report(
31260
31914
  reference.identifier,
31261
- "`{{name}}` is a class.",
31915
+ "'{{name}}' is a class.",
31262
31916
  {name: reference.identifier.name});
31263
31917
 
31264
31918
  });
@@ -31282,7 +31936,7 @@ module.exports = function(context) {
31282
31936
 
31283
31937
  module.exports.schema = [];
31284
31938
 
31285
- },{"../ast-utils":152}],221:[function(require,module,exports){
31939
+ },{"../ast-utils":152}],222:[function(require,module,exports){
31286
31940
  /**
31287
31941
  * @fileoverview Rule to flag assignment in a conditional statement's test expression
31288
31942
  * @author Stephen Murray <spmurrayzzz>
@@ -31417,7 +32071,7 @@ module.exports.schema = [
31417
32071
  }
31418
32072
  ];
31419
32073
 
31420
- },{}],222:[function(require,module,exports){
32074
+ },{}],223:[function(require,module,exports){
31421
32075
  /**
31422
32076
  * @fileoverview A rule to warn against using arrow functions when they could be
31423
32077
  * confused with comparisions
@@ -31484,7 +32138,7 @@ module.exports = function(context) {
31484
32138
 
31485
32139
  module.exports.schema = [];
31486
32140
 
31487
- },{}],223:[function(require,module,exports){
32141
+ },{}],224:[function(require,module,exports){
31488
32142
  /**
31489
32143
  * @fileoverview Rule to flag use of console object
31490
32144
  * @author Nicholas C. Zakas
@@ -31513,7 +32167,7 @@ module.exports = function(context) {
31513
32167
 
31514
32168
  module.exports.schema = [];
31515
32169
 
31516
- },{}],224:[function(require,module,exports){
32170
+ },{}],225:[function(require,module,exports){
31517
32171
  /**
31518
32172
  * @fileoverview A rule to disallow modifying variables that are declared using `const`
31519
32173
  * @author Toru Nagashima
@@ -31539,7 +32193,7 @@ module.exports = function(context) {
31539
32193
  astUtils.getModifyingReferences(variable.references).forEach(function(reference) {
31540
32194
  context.report(
31541
32195
  reference.identifier,
31542
- "`{{name}}` is constant.",
32196
+ "'{{name}}' is constant.",
31543
32197
  {name: reference.identifier.name});
31544
32198
  });
31545
32199
  }
@@ -31556,7 +32210,7 @@ module.exports = function(context) {
31556
32210
 
31557
32211
  module.exports.schema = [];
31558
32212
 
31559
- },{"../ast-utils":152}],225:[function(require,module,exports){
32213
+ },{"../ast-utils":152}],226:[function(require,module,exports){
31560
32214
  /**
31561
32215
  * @fileoverview Rule to flag use constant conditions
31562
32216
  * @author Christian Schulz <http://rndm.de>
@@ -31631,7 +32285,7 @@ module.exports = function(context) {
31631
32285
 
31632
32286
  module.exports.schema = [];
31633
32287
 
31634
- },{}],226:[function(require,module,exports){
32288
+ },{}],227:[function(require,module,exports){
31635
32289
  /**
31636
32290
  * @fileoverview Rule to flag use of continue statement
31637
32291
  * @author Borislav Zhivkov
@@ -31656,7 +32310,7 @@ module.exports = function(context) {
31656
32310
 
31657
32311
  module.exports.schema = [];
31658
32312
 
31659
- },{}],227:[function(require,module,exports){
32313
+ },{}],228:[function(require,module,exports){
31660
32314
  /**
31661
32315
  * @fileoverview Rule to forbid control charactes from regular expressions.
31662
32316
  * @author Nicholas C. Zakas
@@ -31715,7 +32369,7 @@ module.exports = function(context) {
31715
32369
 
31716
32370
  module.exports.schema = [];
31717
32371
 
31718
- },{}],228:[function(require,module,exports){
32372
+ },{}],229:[function(require,module,exports){
31719
32373
  /**
31720
32374
  * @fileoverview Rule to flag use of a debugger statement
31721
32375
  * @author Nicholas C. Zakas
@@ -31739,7 +32393,7 @@ module.exports = function(context) {
31739
32393
 
31740
32394
  module.exports.schema = [];
31741
32395
 
31742
- },{}],229:[function(require,module,exports){
32396
+ },{}],230:[function(require,module,exports){
31743
32397
  /**
31744
32398
  * @fileoverview Rule to flag when deleting variables
31745
32399
  * @author Ilya Volodin
@@ -31766,7 +32420,7 @@ module.exports = function(context) {
31766
32420
 
31767
32421
  module.exports.schema = [];
31768
32422
 
31769
- },{}],230:[function(require,module,exports){
32423
+ },{}],231:[function(require,module,exports){
31770
32424
  /**
31771
32425
  * @fileoverview Rule to check for ambiguous div operator in regexes
31772
32426
  * @author Matt DuVall <http://www.mattduvall.com>
@@ -31795,7 +32449,7 @@ module.exports = function(context) {
31795
32449
 
31796
32450
  module.exports.schema = [];
31797
32451
 
31798
- },{}],231:[function(require,module,exports){
32452
+ },{}],232:[function(require,module,exports){
31799
32453
  /**
31800
32454
  * @fileoverview Rule to flag duplicate arguments
31801
32455
  * @author Jamund Ferguson
@@ -31870,7 +32524,7 @@ module.exports = function(context) {
31870
32524
 
31871
32525
  module.exports.schema = [];
31872
32526
 
31873
- },{}],232:[function(require,module,exports){
32527
+ },{}],233:[function(require,module,exports){
31874
32528
  /**
31875
32529
  * @fileoverview A rule to disallow duplicate name in class members.
31876
32530
  * @author Toru Nagashima
@@ -31946,7 +32600,7 @@ module.exports = function(context) {
31946
32600
  }
31947
32601
 
31948
32602
  if (isDuplicate) {
31949
- context.report(node, "Duplicate name \"{{name}}\".", {name: name});
32603
+ context.report(node, "Duplicate name '{{name}}'.", {name: name});
31950
32604
  }
31951
32605
  }
31952
32606
  };
@@ -31954,7 +32608,7 @@ module.exports = function(context) {
31954
32608
 
31955
32609
  module.exports.schema = [];
31956
32610
 
31957
- },{}],233:[function(require,module,exports){
32611
+ },{}],234:[function(require,module,exports){
31958
32612
  /**
31959
32613
  * @fileoverview Rule to flag use of duplicate keys in an object.
31960
32614
  * @author Ian Christian Myers
@@ -32004,7 +32658,7 @@ module.exports = function(context) {
32004
32658
 
32005
32659
  module.exports.schema = [];
32006
32660
 
32007
- },{}],234:[function(require,module,exports){
32661
+ },{}],235:[function(require,module,exports){
32008
32662
  /**
32009
32663
  * @fileoverview Rule to disallow a duplicate case label.
32010
32664
  * @author Dieter Oberkofler
@@ -32039,7 +32693,7 @@ module.exports = function(context) {
32039
32693
 
32040
32694
  module.exports.schema = [];
32041
32695
 
32042
- },{}],235:[function(require,module,exports){
32696
+ },{}],236:[function(require,module,exports){
32043
32697
  /**
32044
32698
  * @fileoverview Rule to flag `else` after a `return` in `if`
32045
32699
  * @author Ian Christian Myers
@@ -32185,7 +32839,7 @@ module.exports = function(context) {
32185
32839
 
32186
32840
  module.exports.schema = [];
32187
32841
 
32188
- },{}],236:[function(require,module,exports){
32842
+ },{}],237:[function(require,module,exports){
32189
32843
  /**
32190
32844
  * @fileoverview Rule to flag the use of empty character classes in regular expressions
32191
32845
  * @author Ian Christian Myers
@@ -32232,7 +32886,7 @@ module.exports = function(context) {
32232
32886
 
32233
32887
  module.exports.schema = [];
32234
32888
 
32235
- },{}],237:[function(require,module,exports){
32889
+ },{}],238:[function(require,module,exports){
32236
32890
  /**
32237
32891
  * @fileoverview Rule to flag when label is not used for a loop or switch
32238
32892
  * @author Ilya Volodin
@@ -32252,7 +32906,7 @@ module.exports = function(context) {
32252
32906
  var type = node.body.type;
32253
32907
 
32254
32908
  if (type !== "ForStatement" && type !== "WhileStatement" && type !== "DoWhileStatement" && type !== "SwitchStatement" && type !== "ForInStatement" && type !== "ForOfStatement") {
32255
- context.report(node, "Unexpected label \"{{l}}\"", {l: node.label.name});
32909
+ context.report(node, "Unexpected label '{{l}}'", {l: node.label.name});
32256
32910
  }
32257
32911
  }
32258
32912
  };
@@ -32261,7 +32915,7 @@ module.exports = function(context) {
32261
32915
 
32262
32916
  module.exports.schema = [];
32263
32917
 
32264
- },{}],238:[function(require,module,exports){
32918
+ },{}],239:[function(require,module,exports){
32265
32919
  /**
32266
32920
  * @fileoverview Rule to disallow an empty pattern
32267
32921
  * @author Alberto Rodríguez
@@ -32291,7 +32945,7 @@ module.exports = function(context) {
32291
32945
 
32292
32946
  module.exports.schema = [];
32293
32947
 
32294
- },{}],239:[function(require,module,exports){
32948
+ },{}],240:[function(require,module,exports){
32295
32949
  /**
32296
32950
  * @fileoverview Rule to flag use of an empty block statement
32297
32951
  * @author Nicholas C. Zakas
@@ -32359,7 +33013,7 @@ module.exports.schema = [
32359
33013
  }
32360
33014
  ];
32361
33015
 
32362
- },{}],240:[function(require,module,exports){
33016
+ },{}],241:[function(require,module,exports){
32363
33017
  /**
32364
33018
  * @fileoverview Rule to flag comparisons to null without a type-checking
32365
33019
  * operator.
@@ -32390,7 +33044,7 @@ module.exports = function(context) {
32390
33044
 
32391
33045
  module.exports.schema = [];
32392
33046
 
32393
- },{}],241:[function(require,module,exports){
33047
+ },{}],242:[function(require,module,exports){
32394
33048
  /**
32395
33049
  * @fileoverview Rule to flag use of eval() statement
32396
33050
  * @author Nicholas C. Zakas
@@ -32683,7 +33337,7 @@ module.exports.schema = [
32683
33337
  }
32684
33338
  ];
32685
33339
 
32686
- },{"../ast-utils":152}],242:[function(require,module,exports){
33340
+ },{"../ast-utils":152}],243:[function(require,module,exports){
32687
33341
  /**
32688
33342
  * @fileoverview Rule to flag assignment of the exception parameter
32689
33343
  * @author Stephen Murray <spmurrayzzz>
@@ -32722,7 +33376,7 @@ module.exports = function(context) {
32722
33376
 
32723
33377
  module.exports.schema = [];
32724
33378
 
32725
- },{"../ast-utils":152}],243:[function(require,module,exports){
33379
+ },{"../ast-utils":152}],244:[function(require,module,exports){
32726
33380
  /**
32727
33381
  * @fileoverview Rule to flag adding properties to native object's prototypes.
32728
33382
  * @author David Nelson
@@ -32824,7 +33478,7 @@ module.exports.schema = [
32824
33478
  }
32825
33479
  ];
32826
33480
 
32827
- },{"globals":143}],244:[function(require,module,exports){
33481
+ },{"globals":143}],245:[function(require,module,exports){
32828
33482
  /**
32829
33483
  * @fileoverview Rule to flag unnecessary bind calls
32830
33484
  * @author Bence Dányi <bence@danyi.me>
@@ -32887,8 +33541,10 @@ module.exports = function(context) {
32887
33541
  var top = getTopScope(),
32888
33542
  isArrowFunction = node.callee.type === "MemberExpression" && node.callee.object.type === "ArrowFunctionExpression";
32889
33543
 
32890
- if (top.call === node && (top.found === 0 || isArrowFunction)) {
32891
- context.report(node, "The function binding is unnecessary.");
33544
+ if (top.call === node) {
33545
+ if (top.found === 0 || isArrowFunction) {
33546
+ context.report(node, "The function binding is unnecessary.");
33547
+ }
32892
33548
  scope.pop();
32893
33549
  }
32894
33550
  },
@@ -32910,7 +33566,7 @@ module.exports = function(context) {
32910
33566
 
32911
33567
  module.exports.schema = [];
32912
33568
 
32913
- },{}],245:[function(require,module,exports){
33569
+ },{}],246:[function(require,module,exports){
32914
33570
  /**
32915
33571
  * @fileoverview Rule to flag unnecessary double negation in Boolean contexts
32916
33572
  * @author Brandon Mills
@@ -32983,7 +33639,7 @@ module.exports = function(context) {
32983
33639
 
32984
33640
  module.exports.schema = [];
32985
33641
 
32986
- },{}],246:[function(require,module,exports){
33642
+ },{}],247:[function(require,module,exports){
32987
33643
  /**
32988
33644
  * @fileoverview Disallow parenthesising higher precedence subexpressions.
32989
33645
  * @author Michael Ficarra
@@ -33334,25 +33990,21 @@ module.exports = function(context) {
33334
33990
  }
33335
33991
  },
33336
33992
  "ExpressionStatement": function(node) {
33337
- var firstToken;
33993
+ var firstToken, secondToken, firstTokens;
33338
33994
  if (hasExcessParens(node.expression)) {
33339
- firstToken = context.getFirstToken(node.expression);
33340
-
33341
- // Pure object literals ({}) do not need parentheses but
33342
- // member expressions do ({}.toString())
33343
- if ((
33344
- firstToken.value !== "{" ||
33345
- node.expression.type === "ObjectExpression"
33346
- ) &&
33347
- // For such as `(function(){}.foo.bar)`
33348
- (
33349
- firstToken.value !== "function" ||
33350
- node.expression.type === "FunctionExpression"
33351
- ) &&
33352
- // For such as `(class{}.foo.bar)`
33995
+ firstTokens = context.getFirstTokens(node.expression, 2);
33996
+ firstToken = firstTokens[0];
33997
+ secondToken = firstTokens[1];
33998
+
33999
+ if (
34000
+ !firstToken ||
34001
+ firstToken.value !== "{" &&
34002
+ firstToken.value !== "function" &&
34003
+ firstToken.value !== "class" &&
33353
34004
  (
33354
- firstToken.value !== "class" ||
33355
- node.expression.type === "ClassExpression"
34005
+ firstToken.value !== "let" ||
34006
+ !secondToken ||
34007
+ secondToken.value !== "["
33356
34008
  )
33357
34009
  ) {
33358
34010
  report(node.expression);
@@ -33501,7 +34153,7 @@ module.exports.schema = [
33501
34153
  }
33502
34154
  ];
33503
34155
 
33504
- },{}],247:[function(require,module,exports){
34156
+ },{}],248:[function(require,module,exports){
33505
34157
  /**
33506
34158
  * @fileoverview Rule to flag use of unnecessary semicolons
33507
34159
  * @author Nicholas C. Zakas
@@ -33586,7 +34238,7 @@ module.exports = function(context) {
33586
34238
 
33587
34239
  module.exports.schema = [];
33588
34240
 
33589
- },{}],248:[function(require,module,exports){
34241
+ },{}],249:[function(require,module,exports){
33590
34242
  /**
33591
34243
  * @fileoverview Rule to flag fall-through cases in switch statements.
33592
34244
  * @author Matt DuVall <http://mattduvall.com/>
@@ -33651,7 +34303,7 @@ module.exports = function(context) {
33651
34303
  // And reports the previous fallthrough node if that does not exist.
33652
34304
  if (fallthroughCase && !hasFallthroughComment(node, context)) {
33653
34305
  context.report({
33654
- message: "Expected a \"break\" statement before \"{{type}}\".",
34306
+ message: "Expected a 'break' statement before '{{type}}'.",
33655
34307
  data: {type: node.test ? "case" : "default"},
33656
34308
  node: node
33657
34309
  });
@@ -33675,7 +34327,7 @@ module.exports = function(context) {
33675
34327
 
33676
34328
  module.exports.schema = [];
33677
34329
 
33678
- },{"../util":364}],249:[function(require,module,exports){
34330
+ },{"../util":369}],250:[function(require,module,exports){
33679
34331
  /**
33680
34332
  * @fileoverview Rule to flag use of a leading/trailing decimal point in a numeric literal
33681
34333
  * @author James Allardice
@@ -33707,7 +34359,7 @@ module.exports = function(context) {
33707
34359
 
33708
34360
  module.exports.schema = [];
33709
34361
 
33710
- },{}],250:[function(require,module,exports){
34362
+ },{}],251:[function(require,module,exports){
33711
34363
  /**
33712
34364
  * @fileoverview Rule to flag use of function declaration identifiers as variables.
33713
34365
  * @author Ian Christian Myers
@@ -33765,7 +34417,7 @@ module.exports = function(context) {
33765
34417
 
33766
34418
  module.exports.schema = [];
33767
34419
 
33768
- },{"../ast-utils":152}],251:[function(require,module,exports){
34420
+ },{"../ast-utils":152}],252:[function(require,module,exports){
33769
34421
  /**
33770
34422
  * @fileoverview A rule to disallow the type conversions with shorter notations.
33771
34423
  * @author Toru Nagashima
@@ -33918,7 +34570,7 @@ module.exports = function(context) {
33918
34570
  if (options.boolean && isDoubleLogicalNegating(node)) {
33919
34571
  context.report(
33920
34572
  node,
33921
- "use `Boolean({{code}})` instead.",
34573
+ "use 'Boolean({{code}})' instead.",
33922
34574
  {code: context.getSource(node.argument.argument)});
33923
34575
  }
33924
34576
 
@@ -33926,7 +34578,7 @@ module.exports = function(context) {
33926
34578
  if (options.boolean && isBinaryNegatingOfIndexOf(node)) {
33927
34579
  context.report(
33928
34580
  node,
33929
- "use `{{code}} !== -1` instead.",
34581
+ "use '{{code}} !== -1' instead.",
33930
34582
  {code: context.getSource(node.argument)});
33931
34583
  }
33932
34584
 
@@ -33934,7 +34586,7 @@ module.exports = function(context) {
33934
34586
  if (options.number && node.operator === "+" && !isNumeric(node.argument)) {
33935
34587
  context.report(
33936
34588
  node,
33937
- "use `Number({{code}})` instead.",
34589
+ "use 'Number({{code}})' instead.",
33938
34590
  {code: context.getSource(node.argument)});
33939
34591
  }
33940
34592
  },
@@ -33946,7 +34598,7 @@ module.exports = function(context) {
33946
34598
  if (nonNumericOperand) {
33947
34599
  context.report(
33948
34600
  node,
33949
- "use `Number({{code}})` instead.",
34601
+ "use 'Number({{code}})' instead.",
33950
34602
  {code: context.getSource(nonNumericOperand)});
33951
34603
  }
33952
34604
 
@@ -33954,7 +34606,7 @@ module.exports = function(context) {
33954
34606
  if (options.string && isConcatWithEmptyString(node)) {
33955
34607
  context.report(
33956
34608
  node,
33957
- "use `String({{code}})` instead.",
34609
+ "use 'String({{code}})' instead.",
33958
34610
  {code: context.getSource(getOtherOperand(node, ""))});
33959
34611
  }
33960
34612
  },
@@ -33964,7 +34616,7 @@ module.exports = function(context) {
33964
34616
  if (options.string && isAppendEmptyString(node)) {
33965
34617
  context.report(
33966
34618
  node,
33967
- "use `{{code}} = String({{code}})` instead.",
34619
+ "use '{{code}} = String({{code}})' instead.",
33968
34620
  {code: context.getSource(getOtherOperand(node, ""))});
33969
34621
  }
33970
34622
  }
@@ -33989,7 +34641,7 @@ module.exports.schema = [
33989
34641
  }
33990
34642
  ];
33991
34643
 
33992
- },{}],252:[function(require,module,exports){
34644
+ },{}],253:[function(require,module,exports){
33993
34645
  /**
33994
34646
  * @fileoverview Rule to check for implicit global variables and functions.
33995
34647
  * @author Joshua Peek
@@ -34037,7 +34689,7 @@ module.exports = function(context) {
34037
34689
 
34038
34690
  module.exports.schema = [];
34039
34691
 
34040
- },{}],253:[function(require,module,exports){
34692
+ },{}],254:[function(require,module,exports){
34041
34693
  /**
34042
34694
  * @fileoverview Rule to flag use of implied eval via setTimeout and setInterval
34043
34695
  * @author James Allardice
@@ -34182,7 +34834,7 @@ module.exports = function(context) {
34182
34834
 
34183
34835
  module.exports.schema = [];
34184
34836
 
34185
- },{}],254:[function(require,module,exports){
34837
+ },{}],255:[function(require,module,exports){
34186
34838
  /**
34187
34839
  * @fileoverview Enforces or disallows inline comments.
34188
34840
  * @author Greg Cochard
@@ -34238,7 +34890,7 @@ module.exports = function(context) {
34238
34890
 
34239
34891
  module.exports.schema = [];
34240
34892
 
34241
- },{"../ast-utils":152}],255:[function(require,module,exports){
34893
+ },{"../ast-utils":152}],256:[function(require,module,exports){
34242
34894
  /**
34243
34895
  * @fileoverview Rule to enforce declarations in program or function body root.
34244
34896
  * @author Brandon Mills
@@ -34318,7 +34970,7 @@ module.exports.schema = [
34318
34970
  }
34319
34971
  ];
34320
34972
 
34321
- },{}],256:[function(require,module,exports){
34973
+ },{}],257:[function(require,module,exports){
34322
34974
  /**
34323
34975
  * @fileoverview Validate strings passed to the RegExp constructor
34324
34976
  * @author Michael Ficarra
@@ -34385,7 +35037,7 @@ module.exports = function(context) {
34385
35037
 
34386
35038
  module.exports.schema = [];
34387
35039
 
34388
- },{"espree":"espree"}],257:[function(require,module,exports){
35040
+ },{"espree":"espree"}],258:[function(require,module,exports){
34389
35041
  /**
34390
35042
  * @fileoverview A rule to disallow `this` keywords outside of classes or class-like objects.
34391
35043
  * @author Toru Nagashima
@@ -34487,7 +35139,7 @@ module.exports = function(context) {
34487
35139
  "ThisExpression": function(node) {
34488
35140
  var current = stack.getCurrent();
34489
35141
  if (current && !current.valid) {
34490
- context.report(node, "Unexpected `this`.");
35142
+ context.report(node, "Unexpected 'this'.");
34491
35143
  }
34492
35144
  }
34493
35145
  };
@@ -34495,7 +35147,7 @@ module.exports = function(context) {
34495
35147
 
34496
35148
  module.exports.schema = [];
34497
35149
 
34498
- },{"../ast-utils":152}],258:[function(require,module,exports){
35150
+ },{"../ast-utils":152}],259:[function(require,module,exports){
34499
35151
  /**
34500
35152
  * @fileoverview Rule to disalow whitespace that is not a tab or space, whitespace inside strings and comments are allowed
34501
35153
  * @author Jonathan Kingston
@@ -34632,7 +35284,7 @@ module.exports = function(context) {
34632
35284
 
34633
35285
  module.exports.schema = [];
34634
35286
 
34635
- },{}],259:[function(require,module,exports){
35287
+ },{}],260:[function(require,module,exports){
34636
35288
  /**
34637
35289
  * @fileoverview Rule to flag usage of __iterator__ property
34638
35290
  * @author Ian Christian Myers
@@ -34662,7 +35314,7 @@ module.exports = function(context) {
34662
35314
 
34663
35315
  module.exports.schema = [];
34664
35316
 
34665
- },{}],260:[function(require,module,exports){
35317
+ },{}],261:[function(require,module,exports){
34666
35318
  /**
34667
35319
  * @fileoverview Rule to flag labels that are the same as an identifier
34668
35320
  * @author Ian Christian Myers
@@ -34721,7 +35373,7 @@ module.exports = function(context) {
34721
35373
 
34722
35374
  module.exports.schema = [];
34723
35375
 
34724
- },{"../ast-utils":152}],261:[function(require,module,exports){
35376
+ },{"../ast-utils":152}],262:[function(require,module,exports){
34725
35377
  /**
34726
35378
  * @fileoverview Disallow Labeled Statements
34727
35379
  * @author Nicholas C. Zakas
@@ -34767,7 +35419,7 @@ module.exports = function(context) {
34767
35419
 
34768
35420
  module.exports.schema = [];
34769
35421
 
34770
- },{}],262:[function(require,module,exports){
35422
+ },{}],263:[function(require,module,exports){
34771
35423
  /**
34772
35424
  * @fileoverview Rule to flag blocks with no reason to exist
34773
35425
  * @author Brandon Mills
@@ -34871,7 +35523,7 @@ module.exports = function(context) {
34871
35523
 
34872
35524
  module.exports.schema = [];
34873
35525
 
34874
- },{}],263:[function(require,module,exports){
35526
+ },{}],264:[function(require,module,exports){
34875
35527
  /**
34876
35528
  * @fileoverview Rule to disallow if as the only statmenet in an else block
34877
35529
  * @author Brandon Mills
@@ -34903,7 +35555,7 @@ module.exports = function(context) {
34903
35555
 
34904
35556
  module.exports.schema = [];
34905
35557
 
34906
- },{}],264:[function(require,module,exports){
35558
+ },{}],265:[function(require,module,exports){
34907
35559
  /**
34908
35560
  * @fileoverview Rule to flag creation of function inside a loop
34909
35561
  * @author Ilya Volodin
@@ -35022,7 +35674,7 @@ module.exports = function(context) {
35022
35674
 
35023
35675
  module.exports.schema = [];
35024
35676
 
35025
- },{}],265:[function(require,module,exports){
35677
+ },{}],266:[function(require,module,exports){
35026
35678
  /**
35027
35679
  * @fileoverview Rule to flag statements that use magic numbers (adapted from https://github.com/danielstjules/buddy.js)
35028
35680
  * @author Vincent Lemeunier
@@ -35062,9 +35714,10 @@ module.exports.schema = [];
35062
35714
 
35063
35715
  module.exports = function(context) {
35064
35716
  var config = context.options[0] || {},
35065
- ignore = config.ignore || [],
35066
35717
  detectObjects = !!config.detectObjects,
35067
- enforceConst = !!config.enforceConst;
35718
+ enforceConst = !!config.enforceConst,
35719
+ ignore = config.ignore || [],
35720
+ ignoreArrayIndexes = !!config.ignoreArrayIndexes;
35068
35721
 
35069
35722
  /**
35070
35723
  * Returns whether the node is number literal
@@ -35084,6 +35737,28 @@ module.exports = function(context) {
35084
35737
  return ignore.indexOf(num) !== -1;
35085
35738
  }
35086
35739
 
35740
+ /**
35741
+ * Returns whether the number should be ignored when used as a radix within parseInt() or Number.parseInt()
35742
+ * @param {ASTNode} parent - the non-"UnaryExpression" parent
35743
+ * @param {ASTNode} node - the node literal being evaluated
35744
+ * @returns {boolean} true if the number should be ignored
35745
+ */
35746
+ function shouldIgnoreParseInt(parent, node) {
35747
+ return parent.type === "CallExpression" && node === parent.arguments[1] &&
35748
+ (parent.callee.name === "parseInt" ||
35749
+ parent.callee.type === "MemberExpression" &&
35750
+ parent.callee.object.name === "Number" &&
35751
+ parent.callee.property.name === "parseInt");
35752
+ }
35753
+
35754
+ /**
35755
+ * Returns whether the number should be ignored when used as an array index with enabled 'ignoreArrayIndexes' option.
35756
+ * @param {ASTNode} parent - the non-"UnaryExpression" parent.
35757
+ * @returns {boolean} true if the number should be ignored
35758
+ */
35759
+ function shouldIgnoreArrayIndexes(parent) {
35760
+ return parent.type === "MemberExpression" && ignoreArrayIndexes;
35761
+ }
35087
35762
 
35088
35763
  return {
35089
35764
  "Literal": function(node) {
@@ -35096,6 +35771,7 @@ module.exports = function(context) {
35096
35771
  return;
35097
35772
  }
35098
35773
 
35774
+ // For negative magic numbers: update the value and parent node
35099
35775
  if (parent.type === "UnaryExpression" && parent.operator === "-") {
35100
35776
  node = parent;
35101
35777
  parent = node.parent;
@@ -35103,17 +35779,9 @@ module.exports = function(context) {
35103
35779
  raw = "-" + raw;
35104
35780
  }
35105
35781
 
35106
- if (shouldIgnoreNumber(value)) {
35107
- return;
35108
- }
35109
-
35110
- // don't warn on parseInt() or Number.parseInt() radix
35111
- if (parent.type === "CallExpression" && node === parent.arguments[1] &&
35112
- (parent.callee.name === "parseInt" ||
35113
- parent.callee.type === "MemberExpression" &&
35114
- parent.callee.object.name === "Number" &&
35115
- parent.callee.property.name === "parseInt")
35116
- ) {
35782
+ if (shouldIgnoreNumber(value) ||
35783
+ shouldIgnoreParseInt(parent, node) ||
35784
+ shouldIgnoreArrayIndexes(parent)) {
35117
35785
  return;
35118
35786
  }
35119
35787
 
@@ -35149,12 +35817,15 @@ module.exports.schema = [{
35149
35817
  "type": "number"
35150
35818
  },
35151
35819
  "uniqueItems": true
35820
+ },
35821
+ "ignoreArrayIndexes": {
35822
+ "type": "boolean"
35152
35823
  }
35153
35824
  },
35154
35825
  "additionalProperties": false
35155
35826
  }];
35156
35827
 
35157
- },{}],266:[function(require,module,exports){
35828
+ },{}],267:[function(require,module,exports){
35158
35829
  /**
35159
35830
  * @fileoverview Rule to enforce grouped require statements for Node.JS
35160
35831
  * @author Raphael Pigulla
@@ -35168,6 +35839,17 @@ module.exports.schema = [{
35168
35839
 
35169
35840
  module.exports = function(context) {
35170
35841
 
35842
+ var grouping = false,
35843
+ allowCall = false,
35844
+ options = context.options[0];
35845
+
35846
+ if (typeof options === "object") {
35847
+ grouping = options.grouping;
35848
+ allowCall = options.allowCall;
35849
+ } else {
35850
+ grouping = !!options;
35851
+ }
35852
+
35171
35853
  /**
35172
35854
  * Returns the list of built-in modules.
35173
35855
  *
@@ -35213,6 +35895,12 @@ module.exports = function(context) {
35213
35895
  ) {
35214
35896
  // "var x = require('util');"
35215
35897
  return DECL_REQUIRE;
35898
+ } else if (allowCall &&
35899
+ initExpression.type === "CallExpression" &&
35900
+ initExpression.callee.type === "CallExpression"
35901
+ ) {
35902
+ // "var x = require('diagnose')('sub-module');"
35903
+ return getDeclarationType(initExpression.callee);
35216
35904
  } else if (initExpression.type === "MemberExpression") {
35217
35905
  // "var x = require('glob').Glob;"
35218
35906
  return getDeclarationType(initExpression.object);
@@ -35297,13 +35985,6 @@ module.exports = function(context) {
35297
35985
  return {
35298
35986
 
35299
35987
  "VariableDeclaration": function(node) {
35300
- var grouping = false;
35301
-
35302
- if (typeof context.options[0] === "object") {
35303
- grouping = context.options[0].grouping;
35304
- } else {
35305
- grouping = !!context.options[0];
35306
- }
35307
35988
 
35308
35989
  if (isMixed(node.declarations)) {
35309
35990
  context.report(
@@ -35332,6 +36013,9 @@ module.exports.schema = [
35332
36013
  "properties": {
35333
36014
  "grouping": {
35334
36015
  "type": "boolean"
36016
+ },
36017
+ "allowCall": {
36018
+ "type": "boolean"
35335
36019
  }
35336
36020
  },
35337
36021
  "additionalProperties": false
@@ -35340,7 +36024,7 @@ module.exports.schema = [
35340
36024
  }
35341
36025
  ];
35342
36026
 
35343
- },{}],267:[function(require,module,exports){
36027
+ },{}],268:[function(require,module,exports){
35344
36028
  /**
35345
36029
  * @fileoverview Disallow mixed spaces and tabs for indentation
35346
36030
  * @author Jary Niebur
@@ -35476,7 +36160,7 @@ module.exports.schema = [
35476
36160
  }
35477
36161
  ];
35478
36162
 
35479
- },{}],268:[function(require,module,exports){
36163
+ },{}],269:[function(require,module,exports){
35480
36164
  /**
35481
36165
  * @fileoverview Disallow use of multiple spaces.
35482
36166
  * @author Nicholas C. Zakas
@@ -35617,7 +36301,7 @@ module.exports.schema = [
35617
36301
  }
35618
36302
  ];
35619
36303
 
35620
- },{}],269:[function(require,module,exports){
36304
+ },{}],270:[function(require,module,exports){
35621
36305
  /**
35622
36306
  * @fileoverview Rule to flag when using multiline strings
35623
36307
  * @author Ilya Volodin
@@ -35662,7 +36346,7 @@ module.exports = function(context) {
35662
36346
 
35663
36347
  module.exports.schema = [];
35664
36348
 
35665
- },{}],270:[function(require,module,exports){
36349
+ },{}],271:[function(require,module,exports){
35666
36350
  /**
35667
36351
  * @fileoverview Disallows multiple blank lines.
35668
36352
  * implementation adapted from the no-trailing-spaces rule.
@@ -35788,7 +36472,7 @@ module.exports.schema = [
35788
36472
  }
35789
36473
  ];
35790
36474
 
35791
- },{}],271:[function(require,module,exports){
36475
+ },{}],272:[function(require,module,exports){
35792
36476
  /**
35793
36477
  * @fileoverview Rule to flag when re-assigning native objects
35794
36478
  * @author Ilya Volodin
@@ -35861,7 +36545,7 @@ module.exports.schema = [
35861
36545
  }
35862
36546
  ];
35863
36547
 
35864
- },{}],272:[function(require,module,exports){
36548
+ },{}],273:[function(require,module,exports){
35865
36549
  /**
35866
36550
  * @fileoverview Rule to disallow a negated condition
35867
36551
  * @author Alberto Rodríguez
@@ -35937,7 +36621,7 @@ module.exports = function(context) {
35937
36621
 
35938
36622
  module.exports.schema = [];
35939
36623
 
35940
- },{}],273:[function(require,module,exports){
36624
+ },{}],274:[function(require,module,exports){
35941
36625
  /**
35942
36626
  * @fileoverview A rule to disallow negated left operands of the `in` operator
35943
36627
  * @author Michael Ficarra
@@ -35955,7 +36639,7 @@ module.exports = function(context) {
35955
36639
 
35956
36640
  "BinaryExpression": function(node) {
35957
36641
  if (node.operator === "in" && node.left.type === "UnaryExpression" && node.left.operator === "!") {
35958
- context.report(node, "The `in` expression's left operand is negated");
36642
+ context.report(node, "The 'in' expression's left operand is negated");
35959
36643
  }
35960
36644
  }
35961
36645
  };
@@ -35964,7 +36648,7 @@ module.exports = function(context) {
35964
36648
 
35965
36649
  module.exports.schema = [];
35966
36650
 
35967
- },{}],274:[function(require,module,exports){
36651
+ },{}],275:[function(require,module,exports){
35968
36652
  /**
35969
36653
  * @fileoverview Rule to flag nested ternary expressions
35970
36654
  * @author Ian Christian Myers
@@ -35990,7 +36674,7 @@ module.exports = function(context) {
35990
36674
 
35991
36675
  module.exports.schema = [];
35992
36676
 
35993
- },{}],275:[function(require,module,exports){
36677
+ },{}],276:[function(require,module,exports){
35994
36678
  /**
35995
36679
  * @fileoverview Rule to flag when using new Function
35996
36680
  * @author Ilya Volodin
@@ -36009,7 +36693,7 @@ module.exports = function(context) {
36009
36693
  //--------------------------------------------------------------------------
36010
36694
 
36011
36695
  /**
36012
- * Checks if the callee if the Function constructor, and if so, reports an issue.
36696
+ * Checks if the callee is the Function constructor, and if so, reports an issue.
36013
36697
  * @param {ASTNode} node The node to check and report on
36014
36698
  * @returns {void}
36015
36699
  * @private
@@ -36029,7 +36713,7 @@ module.exports = function(context) {
36029
36713
 
36030
36714
  module.exports.schema = [];
36031
36715
 
36032
- },{}],276:[function(require,module,exports){
36716
+ },{}],277:[function(require,module,exports){
36033
36717
  /**
36034
36718
  * @fileoverview A rule to disallow calls to the Object constructor
36035
36719
  * @author Matt DuVall <http://www.mattduvall.com/>
@@ -36056,7 +36740,7 @@ module.exports = function(context) {
36056
36740
 
36057
36741
  module.exports.schema = [];
36058
36742
 
36059
- },{}],277:[function(require,module,exports){
36743
+ },{}],278:[function(require,module,exports){
36060
36744
  /**
36061
36745
  * @fileoverview Rule to disallow use of new operator with the `require` function
36062
36746
  * @author Wil Moore III
@@ -36083,7 +36767,42 @@ module.exports = function(context) {
36083
36767
 
36084
36768
  module.exports.schema = [];
36085
36769
 
36086
- },{}],278:[function(require,module,exports){
36770
+ },{}],279:[function(require,module,exports){
36771
+ /**
36772
+ * @fileoverview Rule to disallow use of the new operator with the `Symbol` object
36773
+ * @author Alberto Rodríguez
36774
+ * @copyright 2016 Alberto Rodríguez. All rights reserved.
36775
+ * See LICENSE file in root directory for full license.
36776
+ */
36777
+
36778
+ "use strict";
36779
+
36780
+ //------------------------------------------------------------------------------
36781
+ // Rule Definition
36782
+ //------------------------------------------------------------------------------
36783
+
36784
+ module.exports = function(context) {
36785
+
36786
+ return {
36787
+ "Program:exit": function() {
36788
+ var globalScope = context.getScope();
36789
+ var variable = globalScope.set.get("Symbol");
36790
+ if (variable && variable.defs.length === 0) {
36791
+ variable.references.forEach(function(ref) {
36792
+ var node = ref.identifier;
36793
+ if (node.parent && node.parent.type === "NewExpression") {
36794
+ context.report(node, "`Symbol` cannot be called as a constructor.");
36795
+ }
36796
+ });
36797
+ }
36798
+ }
36799
+ };
36800
+
36801
+ };
36802
+
36803
+ module.exports.schema = [];
36804
+
36805
+ },{}],280:[function(require,module,exports){
36087
36806
  /**
36088
36807
  * @fileoverview Rule to flag when using constructor for wrapper objects
36089
36808
  * @author Ilya Volodin
@@ -36111,7 +36830,7 @@ module.exports = function(context) {
36111
36830
 
36112
36831
  module.exports.schema = [];
36113
36832
 
36114
- },{}],279:[function(require,module,exports){
36833
+ },{}],281:[function(require,module,exports){
36115
36834
  /**
36116
36835
  * @fileoverview Rule to flag statements with function invocation preceded by
36117
36836
  * "new" and not part of assignment
@@ -36140,7 +36859,7 @@ module.exports = function(context) {
36140
36859
 
36141
36860
  module.exports.schema = [];
36142
36861
 
36143
- },{}],280:[function(require,module,exports){
36862
+ },{}],282:[function(require,module,exports){
36144
36863
  /**
36145
36864
  * @fileoverview Rule to flag use of an object property of the global object (Math and JSON) as a function
36146
36865
  * @author James Allardice
@@ -36170,7 +36889,7 @@ module.exports = function(context) {
36170
36889
 
36171
36890
  module.exports.schema = [];
36172
36891
 
36173
- },{}],281:[function(require,module,exports){
36892
+ },{}],283:[function(require,module,exports){
36174
36893
  /**
36175
36894
  * @fileoverview Rule to flag octal escape sequences in string literals.
36176
36895
  * @author Ian Christian Myers
@@ -36211,7 +36930,7 @@ module.exports = function(context) {
36211
36930
 
36212
36931
  module.exports.schema = [];
36213
36932
 
36214
- },{}],282:[function(require,module,exports){
36933
+ },{}],284:[function(require,module,exports){
36215
36934
  /**
36216
36935
  * @fileoverview Rule to flag when initializing octal literal
36217
36936
  * @author Ilya Volodin
@@ -36238,7 +36957,7 @@ module.exports = function(context) {
36238
36957
 
36239
36958
  module.exports.schema = [];
36240
36959
 
36241
- },{}],283:[function(require,module,exports){
36960
+ },{}],285:[function(require,module,exports){
36242
36961
  /**
36243
36962
  * @fileoverview Disallow reassignment of function parameters.
36244
36963
  * @author Nat Burns
@@ -36376,7 +37095,7 @@ module.exports.schema = [
36376
37095
  }
36377
37096
  ];
36378
37097
 
36379
- },{}],284:[function(require,module,exports){
37098
+ },{}],286:[function(require,module,exports){
36380
37099
  /**
36381
37100
  * @fileoverview Disallow string concatenation when using __dirname and __filename
36382
37101
  * @author Nicholas C. Zakas
@@ -36417,7 +37136,7 @@ module.exports = function(context) {
36417
37136
 
36418
37137
  module.exports.schema = [];
36419
37138
 
36420
- },{}],285:[function(require,module,exports){
37139
+ },{}],287:[function(require,module,exports){
36421
37140
  /**
36422
37141
  * @fileoverview Rule to flag use of unary increment and decrement operators.
36423
37142
  * @author Ian Christian Myers
@@ -36464,7 +37183,7 @@ module.exports.schema = [
36464
37183
  }
36465
37184
  ];
36466
37185
 
36467
- },{}],286:[function(require,module,exports){
37186
+ },{}],288:[function(require,module,exports){
36468
37187
  /**
36469
37188
  * @fileoverview Disallow the use of process.env()
36470
37189
  * @author Vignesh Anand
@@ -36496,7 +37215,7 @@ module.exports = function(context) {
36496
37215
 
36497
37216
  module.exports.schema = [];
36498
37217
 
36499
- },{}],287:[function(require,module,exports){
37218
+ },{}],289:[function(require,module,exports){
36500
37219
  /**
36501
37220
  * @fileoverview Disallow the use of process.exit()
36502
37221
  * @author Nicholas C. Zakas
@@ -36531,7 +37250,7 @@ module.exports = function(context) {
36531
37250
 
36532
37251
  module.exports.schema = [];
36533
37252
 
36534
- },{}],288:[function(require,module,exports){
37253
+ },{}],290:[function(require,module,exports){
36535
37254
  /**
36536
37255
  * @fileoverview Rule to flag usage of __proto__ property
36537
37256
  * @author Ilya Volodin
@@ -36561,7 +37280,7 @@ module.exports = function(context) {
36561
37280
 
36562
37281
  module.exports.schema = [];
36563
37282
 
36564
- },{}],289:[function(require,module,exports){
37283
+ },{}],291:[function(require,module,exports){
36565
37284
  /**
36566
37285
  * @fileoverview Rule to flag when the same variable is declared more then once.
36567
37286
  * @author Ilya Volodin
@@ -36597,7 +37316,7 @@ module.exports = function(context) {
36597
37316
  for (var i = (hasBuiltin ? 0 : 1), l = variable.identifiers.length; i < l; i++) {
36598
37317
  context.report(
36599
37318
  variable.identifiers[i],
36600
- "\"{{a}}\" is already defined",
37319
+ "'{{a}}' is already defined",
36601
37320
  {a: variable.name});
36602
37321
  }
36603
37322
  }
@@ -36658,7 +37377,7 @@ module.exports.schema = [
36658
37377
  }
36659
37378
  ];
36660
37379
 
36661
- },{}],290:[function(require,module,exports){
37380
+ },{}],292:[function(require,module,exports){
36662
37381
  /**
36663
37382
  * @fileoverview Rule to count multiple spaces in regular expressions
36664
37383
  * @author Matt DuVall <http://www.mattduvall.com/>
@@ -36695,7 +37414,7 @@ module.exports = function(context) {
36695
37414
 
36696
37415
  module.exports.schema = [];
36697
37416
 
36698
- },{}],291:[function(require,module,exports){
37417
+ },{}],293:[function(require,module,exports){
36699
37418
  /**
36700
37419
  * @fileoverview Restrict usage of specified node imports.
36701
37420
  * @author Guy Ellis
@@ -36740,7 +37459,7 @@ module.exports.schema = {
36740
37459
  "uniqueItems": true
36741
37460
  };
36742
37461
 
36743
- },{}],292:[function(require,module,exports){
37462
+ },{}],294:[function(require,module,exports){
36744
37463
  /**
36745
37464
  * @fileoverview Restrict usage of specified node modules.
36746
37465
  * @author Christian Schulz
@@ -36822,7 +37541,7 @@ module.exports.schema = {
36822
37541
  "uniqueItems": true
36823
37542
  };
36824
37543
 
36825
- },{}],293:[function(require,module,exports){
37544
+ },{}],295:[function(require,module,exports){
36826
37545
  /**
36827
37546
  * @fileoverview Rule to flag use of certain node types
36828
37547
  * @author Burak Yigit Kaya
@@ -36843,7 +37562,7 @@ module.exports = function(context) {
36843
37562
  * @returns {void}
36844
37563
  */
36845
37564
  function warn(node) {
36846
- context.report(node, "Using \"{{type}}\" is not allowed.", node);
37565
+ context.report(node, "Using '{{type}}' is not allowed.", node);
36847
37566
  }
36848
37567
 
36849
37568
  return context.options.reduce(function(result, nodeType) {
@@ -36867,7 +37586,7 @@ module.exports.schema = {
36867
37586
  "minItems": 0
36868
37587
  };
36869
37588
 
36870
- },{"espree":"espree"}],294:[function(require,module,exports){
37589
+ },{"espree":"espree"}],296:[function(require,module,exports){
36871
37590
  /**
36872
37591
  * @fileoverview Rule to flag when return statement contains assignment
36873
37592
  * @author Ilya Volodin
@@ -36907,10 +37626,29 @@ function isEnclosedInParens(node, context) {
36907
37626
  module.exports = function(context) {
36908
37627
  var always = (context.options[0] || "except-parens") !== "except-parens";
36909
37628
 
37629
+ /**
37630
+ * Check whether return statement contains assignment
37631
+ * @param {ASTNode} nodeToCheck node to check
37632
+ * @param {ASTNode} nodeToReport node to report
37633
+ * @param {string} message message to report
37634
+ * @returns {void}
37635
+ * @private
37636
+ */
37637
+ function checkForAssignInReturn(nodeToCheck, nodeToReport, message) {
37638
+ if (isAssignment(nodeToCheck) && (always || !isEnclosedInParens(nodeToCheck, context))) {
37639
+ context.report(nodeToReport, message);
37640
+ }
37641
+ }
37642
+
36910
37643
  return {
36911
37644
  "ReturnStatement": function(node) {
36912
- if (isAssignment(node.argument) && (always || !isEnclosedInParens(node.argument, context))) {
36913
- context.report(node, "Return statement should not contain assignment.");
37645
+ var message = "Return statement should not contain assignment.";
37646
+ checkForAssignInReturn(node.argument, node, message);
37647
+ },
37648
+ "ArrowFunctionExpression": function(node) {
37649
+ if (node.body.type !== "BlockStatement") {
37650
+ var message = "Arrow function should not return assignment.";
37651
+ checkForAssignInReturn(node.body, node, message);
36914
37652
  }
36915
37653
  }
36916
37654
  };
@@ -36922,7 +37660,7 @@ module.exports.schema = [
36922
37660
  }
36923
37661
  ];
36924
37662
 
36925
- },{}],295:[function(require,module,exports){
37663
+ },{}],297:[function(require,module,exports){
36926
37664
  /**
36927
37665
  * @fileoverview Rule to flag when using javascript: urls
36928
37666
  * @author Ilya Volodin
@@ -36958,7 +37696,7 @@ module.exports = function(context) {
36958
37696
 
36959
37697
  module.exports.schema = [];
36960
37698
 
36961
- },{}],296:[function(require,module,exports){
37699
+ },{}],298:[function(require,module,exports){
36962
37700
  /**
36963
37701
  * @fileoverview Rule to flag comparison where left part is the same as the right
36964
37702
  * part.
@@ -36989,7 +37727,7 @@ module.exports = function(context) {
36989
37727
 
36990
37728
  module.exports.schema = [];
36991
37729
 
36992
- },{}],297:[function(require,module,exports){
37730
+ },{}],299:[function(require,module,exports){
36993
37731
  /**
36994
37732
  * @fileoverview Rule to flag use of comma operator
36995
37733
  * @author Brandon Mills
@@ -37086,7 +37824,7 @@ module.exports = function(context) {
37086
37824
 
37087
37825
  module.exports.schema = [];
37088
37826
 
37089
- },{}],298:[function(require,module,exports){
37827
+ },{}],300:[function(require,module,exports){
37090
37828
  /**
37091
37829
  * @fileoverview Disallow shadowing of NaN, undefined, and Infinity (ES5 section 15.1.1)
37092
37830
  * @author Michael Ficarra
@@ -37110,7 +37848,7 @@ module.exports = function(context) {
37110
37848
  */
37111
37849
  function checkForViolation(id) {
37112
37850
  if (RESTRICTED.indexOf(id.name) > -1) {
37113
- context.report(id, "Shadowing of global property \"" + id.name + "\".");
37851
+ context.report(id, "Shadowing of global property '" + id.name + "'.");
37114
37852
  }
37115
37853
  }
37116
37854
 
@@ -37145,7 +37883,7 @@ module.exports = function(context) {
37145
37883
 
37146
37884
  module.exports.schema = [];
37147
37885
 
37148
- },{}],299:[function(require,module,exports){
37886
+ },{}],301:[function(require,module,exports){
37149
37887
  /**
37150
37888
  * @fileoverview Rule to flag on declaring variables already declared in the outer scope
37151
37889
  * @author Ilya Volodin
@@ -37280,7 +38018,7 @@ module.exports = function(context) {
37280
38018
  ) {
37281
38019
  context.report({
37282
38020
  node: variable.identifiers[0],
37283
- message: "\"{{name}}\" is already declared in the upper scope.",
38021
+ message: "'{{name}}' is already declared in the upper scope.",
37284
38022
  data: variable
37285
38023
  });
37286
38024
  }
@@ -37320,7 +38058,7 @@ module.exports.schema = [
37320
38058
  }
37321
38059
  ];
37322
38060
 
37323
- },{"../ast-utils":152}],300:[function(require,module,exports){
38061
+ },{"../ast-utils":152}],302:[function(require,module,exports){
37324
38062
  /**
37325
38063
  * @fileoverview Rule to check that spaced function application
37326
38064
  * @author Matt DuVall <http://www.mattduvall.com>
@@ -37382,7 +38120,7 @@ module.exports = function(context) {
37382
38120
 
37383
38121
  module.exports.schema = [];
37384
38122
 
37385
- },{}],301:[function(require,module,exports){
38123
+ },{}],303:[function(require,module,exports){
37386
38124
  /**
37387
38125
  * @fileoverview Disallow sparse arrays
37388
38126
  * @author Nicholas C. Zakas
@@ -37417,7 +38155,7 @@ module.exports = function(context) {
37417
38155
 
37418
38156
  module.exports.schema = [];
37419
38157
 
37420
- },{}],302:[function(require,module,exports){
38158
+ },{}],304:[function(require,module,exports){
37421
38159
  /**
37422
38160
  * @fileoverview Rule to check for properties whose identifier ends with the string Sync
37423
38161
  * @author Matt DuVall<http://mattduvall.com/>
@@ -37449,7 +38187,7 @@ module.exports = function(context) {
37449
38187
 
37450
38188
  module.exports.schema = [];
37451
38189
 
37452
- },{}],303:[function(require,module,exports){
38190
+ },{}],305:[function(require,module,exports){
37453
38191
  /**
37454
38192
  * @fileoverview Rule to flag use of ternary operators.
37455
38193
  * @author Ian Christian Myers
@@ -37475,7 +38213,7 @@ module.exports = function(context) {
37475
38213
 
37476
38214
  module.exports.schema = [];
37477
38215
 
37478
- },{}],304:[function(require,module,exports){
38216
+ },{}],306:[function(require,module,exports){
37479
38217
  /**
37480
38218
  * @fileoverview A rule to disallow using `this`/`super` before `super()`.
37481
38219
  * @author Toru Nagashima
@@ -37622,7 +38360,7 @@ module.exports = function(context) {
37622
38360
  "ThisExpression": function(node) {
37623
38361
  if (isBeforeCallOfSuper()) {
37624
38362
  context.report({
37625
- message: "\"this\" is not allowed before \"super()\".",
38363
+ message: "'this' is not allowed before 'super()'.",
37626
38364
  node: node
37627
38365
  });
37628
38366
  }
@@ -37636,7 +38374,7 @@ module.exports = function(context) {
37636
38374
  "Super": function(node) {
37637
38375
  if (!astUtils.isCallee(node) && isBeforeCallOfSuper()) {
37638
38376
  context.report({
37639
- message: "\"super\" is not allowed before \"super()\".",
38377
+ message: "'super' is not allowed before 'super()'.",
37640
38378
  node: node
37641
38379
  });
37642
38380
  }
@@ -37668,7 +38406,7 @@ module.exports = function(context) {
37668
38406
 
37669
38407
  module.exports.schema = [];
37670
38408
 
37671
- },{"../ast-utils":152}],305:[function(require,module,exports){
38409
+ },{"../ast-utils":152}],307:[function(require,module,exports){
37672
38410
  /**
37673
38411
  * @fileoverview Rule to restrict what can be thrown as an exception.
37674
38412
  * @author Dieter Oberkofler
@@ -37740,7 +38478,7 @@ module.exports = function(context) {
37740
38478
 
37741
38479
  module.exports.schema = [];
37742
38480
 
37743
- },{}],306:[function(require,module,exports){
38481
+ },{}],308:[function(require,module,exports){
37744
38482
  /**
37745
38483
  * @fileoverview Disallow trailing spaces at the end of lines.
37746
38484
  * @author Nodeca Team <https://github.com/nodeca>
@@ -37848,7 +38586,7 @@ module.exports.schema = [
37848
38586
  }
37849
38587
  ];
37850
38588
 
37851
- },{}],307:[function(require,module,exports){
38589
+ },{}],309:[function(require,module,exports){
37852
38590
  /**
37853
38591
  * @fileoverview Rule to flag when initializing to undefined
37854
38592
  * @author Ilya Volodin
@@ -37880,7 +38618,7 @@ module.exports = function(context) {
37880
38618
 
37881
38619
  module.exports.schema = [];
37882
38620
 
37883
- },{}],308:[function(require,module,exports){
38621
+ },{}],310:[function(require,module,exports){
37884
38622
  /**
37885
38623
  * @fileoverview Rule to flag references to undeclared variables.
37886
38624
  * @author Mark Macdonald
@@ -37924,7 +38662,7 @@ module.exports = function(context) {
37924
38662
 
37925
38663
  context.report({
37926
38664
  node: identifier,
37927
- message: "\"{{name}}\" is not defined.",
38665
+ message: "'{{name}}' is not defined.",
37928
38666
  data: identifier
37929
38667
  });
37930
38668
  });
@@ -37944,7 +38682,7 @@ module.exports.schema = [
37944
38682
  }
37945
38683
  ];
37946
38684
 
37947
- },{}],309:[function(require,module,exports){
38685
+ },{}],311:[function(require,module,exports){
37948
38686
  /**
37949
38687
  * @fileoverview Rule to flag references to the undefined variable.
37950
38688
  * @author Michael Ficarra
@@ -37973,7 +38711,7 @@ module.exports = function(context) {
37973
38711
 
37974
38712
  module.exports.schema = [];
37975
38713
 
37976
- },{}],310:[function(require,module,exports){
38714
+ },{}],312:[function(require,module,exports){
37977
38715
  /**
37978
38716
  * @fileoverview Rule to flag trailing underscores in variable declarations.
37979
38717
  * @author Matt DuVall <http://www.mattduvall.com>
@@ -38051,7 +38789,7 @@ module.exports = function(context) {
38051
38789
  var identifier = node.id.name;
38052
38790
 
38053
38791
  if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) && !isAllowed(identifier)) {
38054
- context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
38792
+ context.report(node, "Unexpected dangling '_' in '" + identifier + "'.");
38055
38793
  }
38056
38794
  }
38057
38795
  }
@@ -38067,7 +38805,7 @@ module.exports = function(context) {
38067
38805
 
38068
38806
  if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) &&
38069
38807
  !isSpecialCaseIdentifierInVariableExpression(identifier) && !isAllowed(identifier)) {
38070
- context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
38808
+ context.report(node, "Unexpected dangling '_' in '" + identifier + "'.");
38071
38809
  }
38072
38810
  }
38073
38811
 
@@ -38084,7 +38822,7 @@ module.exports = function(context) {
38084
38822
  if (typeof identifier !== "undefined" && hasTrailingUnderscore(identifier) &&
38085
38823
  !(isMemberOfThis && allowAfterThis) &&
38086
38824
  !isSpecialCaseIdentifierForMemberExpression(identifier) && !isAllowed(identifier)) {
38087
- context.report(node, "Unexpected dangling \"_\" in \"" + identifier + "\".");
38825
+ context.report(node, "Unexpected dangling '_' in '" + identifier + "'.");
38088
38826
  }
38089
38827
  }
38090
38828
 
@@ -38118,7 +38856,7 @@ module.exports.schema = [
38118
38856
  }
38119
38857
  ];
38120
38858
 
38121
- },{}],311:[function(require,module,exports){
38859
+ },{}],313:[function(require,module,exports){
38122
38860
  /**
38123
38861
  * @fileoverview Rule to spot scenarios where a newline looks like it is ending a statement, but is not.
38124
38862
  * @author Glen Mailer
@@ -38135,18 +38873,20 @@ module.exports = function(context) {
38135
38873
  var PROPERTY_MESSAGE = "Unexpected newline between object and [ of property access.";
38136
38874
 
38137
38875
  /**
38138
- * Check to see if the bracket prior to the node is continuing the previous
38876
+ * Check to see if there is a newline between the node and the following open bracket
38139
38877
  * line's expression
38140
38878
  * @param {ASTNode} node The node to check.
38141
38879
  * @param {string} msg The error message to use.
38142
38880
  * @returns {void}
38143
38881
  * @private
38144
38882
  */
38145
- function checkForBreakBefore(node, msg) {
38146
- var tokens = context.getTokensBefore(node, 2);
38147
- var paren = tokens[1];
38148
- var before = tokens[0];
38149
- if (paren.loc.start.line !== before.loc.end.line) {
38883
+ function checkForBreakAfter(node, msg) {
38884
+ var paren = context.getTokenAfter(node);
38885
+ while (paren.value === ")") {
38886
+ paren = context.getTokenAfter(paren);
38887
+ }
38888
+
38889
+ if (paren.loc.start.line !== node.loc.end.line) {
38150
38890
  context.report(node, paren.loc.start, msg, { char: paren.value });
38151
38891
  }
38152
38892
  }
@@ -38161,16 +38901,14 @@ module.exports = function(context) {
38161
38901
  if (!node.computed) {
38162
38902
  return;
38163
38903
  }
38164
-
38165
- checkForBreakBefore(node.property, PROPERTY_MESSAGE);
38904
+ checkForBreakAfter(node.object, PROPERTY_MESSAGE);
38166
38905
  },
38167
38906
 
38168
38907
  "CallExpression": function(node) {
38169
38908
  if (node.arguments.length === 0) {
38170
38909
  return;
38171
38910
  }
38172
-
38173
- checkForBreakBefore(node.arguments[0], FUNCTION_MESSAGE);
38911
+ checkForBreakAfter(node.callee, FUNCTION_MESSAGE);
38174
38912
  }
38175
38913
  };
38176
38914
 
@@ -38178,7 +38916,7 @@ module.exports = function(context) {
38178
38916
 
38179
38917
  module.exports.schema = [];
38180
38918
 
38181
- },{}],312:[function(require,module,exports){
38919
+ },{}],314:[function(require,module,exports){
38182
38920
  /**
38183
38921
  * @fileoverview Rule to disallow use of unmodified expressions in loop conditions
38184
38922
  * @author Toru Nagashima
@@ -38424,7 +39162,7 @@ module.exports = function(context) {
38424
39162
 
38425
39163
  context.report({
38426
39164
  node: node,
38427
- message: "\"{{name}}\" is not modified in this loop.",
39165
+ message: "'{{name}}' is not modified in this loop.",
38428
39166
  data: node
38429
39167
  });
38430
39168
  }
@@ -38517,7 +39255,7 @@ module.exports = function(context) {
38517
39255
 
38518
39256
  module.exports.schema = [];
38519
39257
 
38520
- },{"../ast-utils":152,"../util/estraverse":366,"es6-map":23}],313:[function(require,module,exports){
39258
+ },{"../ast-utils":152,"../util/estraverse":371,"es6-map":23}],315:[function(require,module,exports){
38521
39259
  /**
38522
39260
  * @fileoverview Rule to flag no-unneeded-ternary
38523
39261
  * @author Gyandeep Singh
@@ -38581,7 +39319,7 @@ module.exports.schema = [
38581
39319
  }
38582
39320
  ];
38583
39321
 
38584
- },{}],314:[function(require,module,exports){
39322
+ },{}],316:[function(require,module,exports){
38585
39323
  /**
38586
39324
  * @fileoverview Checks for unreachable code due to return, throws, break, and continue.
38587
39325
  * @author Joel Feenstra
@@ -38673,7 +39411,7 @@ module.exports = function(context) {
38673
39411
 
38674
39412
  module.exports.schema = [];
38675
39413
 
38676
- },{}],315:[function(require,module,exports){
39414
+ },{}],317:[function(require,module,exports){
38677
39415
  /**
38678
39416
  * @fileoverview Flag expressions in statement position that do not side effect
38679
39417
  * @author Michael Ficarra
@@ -38781,7 +39519,7 @@ module.exports.schema = [
38781
39519
  }
38782
39520
  ];
38783
39521
 
38784
- },{}],316:[function(require,module,exports){
39522
+ },{}],318:[function(require,module,exports){
38785
39523
  /**
38786
39524
  * @fileoverview Rule to flag declared but unused variables
38787
39525
  * @author Ilya Volodin
@@ -38801,7 +39539,7 @@ var escape = require("escape-string-regexp");
38801
39539
 
38802
39540
  module.exports = function(context) {
38803
39541
 
38804
- var MESSAGE = "\"{{name}}\" is defined but never used";
39542
+ var MESSAGE = "'{{name}}' is defined but never used";
38805
39543
 
38806
39544
  var config = {
38807
39545
  vars: "all",
@@ -39088,7 +39826,7 @@ module.exports.schema = [
39088
39826
  }
39089
39827
  ];
39090
39828
 
39091
- },{"escape-string-regexp":76}],317:[function(require,module,exports){
39829
+ },{"escape-string-regexp":76}],319:[function(require,module,exports){
39092
39830
  /**
39093
39831
  * @fileoverview Rule to flag use of variables before they are defined
39094
39832
  * @author Ilya Volodin
@@ -39258,7 +39996,7 @@ module.exports = function(context) {
39258
39996
  // Reports.
39259
39997
  context.report({
39260
39998
  node: reference.identifier,
39261
- message: "\"{{name}}\" was used before it was defined",
39999
+ message: "'{{name}}' was used before it was defined",
39262
40000
  data: reference.identifier
39263
40001
  });
39264
40002
  });
@@ -39325,7 +40063,7 @@ module.exports.schema = [
39325
40063
  }
39326
40064
  ];
39327
40065
 
39328
- },{}],318:[function(require,module,exports){
40066
+ },{}],320:[function(require,module,exports){
39329
40067
  /**
39330
40068
  * @fileoverview A rule to disallow unnecessary `.call()` and `.apply()`.
39331
40069
  * @author Toru Nagashima
@@ -39414,7 +40152,7 @@ module.exports = function(context) {
39414
40152
  if (isValidThisArg(expectedThis, thisArg, context)) {
39415
40153
  context.report(
39416
40154
  node,
39417
- "unnecessary \".{{name}}()\".",
40155
+ "unnecessary '.{{name}}()'.",
39418
40156
  {name: node.callee.property.name});
39419
40157
  }
39420
40158
  }
@@ -39423,7 +40161,7 @@ module.exports = function(context) {
39423
40161
 
39424
40162
  module.exports.schema = [];
39425
40163
 
39426
- },{"../ast-utils":152}],319:[function(require,module,exports){
40164
+ },{"../ast-utils":152}],321:[function(require,module,exports){
39427
40165
  /**
39428
40166
  * @fileoverview disallow unncessary concatenation of template strings
39429
40167
  * @author Henry Zhu
@@ -39514,7 +40252,72 @@ module.exports = function(context) {
39514
40252
 
39515
40253
  module.exports.schema = [];
39516
40254
 
39517
- },{"../ast-utils":152}],320:[function(require,module,exports){
40255
+ },{"../ast-utils":152}],322:[function(require,module,exports){
40256
+ /**
40257
+ * @fileoverview Rule to flag the use of redundant constructors in classes.
40258
+ * @author Alberto Rodríguez
40259
+ * @copyright 2015 Alberto Rodríguez. All rights reserved.
40260
+ * See LICENSE file in root directory for full license.
40261
+ */
40262
+ "use strict";
40263
+
40264
+ //------------------------------------------------------------------------------
40265
+ // Rule Definition
40266
+ //------------------------------------------------------------------------------
40267
+
40268
+ module.exports = function(context) {
40269
+
40270
+ /**
40271
+ * Checks whether the constructor body is a redundant super call.
40272
+ * @param {Array} body - constructor body content.
40273
+ * @param {Array} ctorParams - The params to check against super call.
40274
+ * @returns {boolean} true if the construtor body is redundant
40275
+ */
40276
+ function isRedundantSuperCall(body, ctorParams) {
40277
+ if (body.length !== 1 ||
40278
+ body[0].type !== "ExpressionStatement" ||
40279
+ body[0].expression.callee.type !== "Super") {
40280
+ return false;
40281
+ }
40282
+
40283
+
40284
+ return body[0].expression.arguments.every(function(arg, index) {
40285
+ return (arg.type === "Identifier" && arg.name === ctorParams[index].name) ||
40286
+ (
40287
+ arg.type === "SpreadElement" &&
40288
+ ctorParams[index].type === "RestElement" &&
40289
+ arg.argument.name === ctorParams[index].argument.name
40290
+ );
40291
+ });
40292
+ }
40293
+
40294
+ /**
40295
+ * Checks whether a node is a redundant construtor
40296
+ * @param {ASTNode} node - node to check
40297
+ * @returns {void}
40298
+ */
40299
+ function checkForConstructor(node) {
40300
+ if (node.kind !== "constructor") {
40301
+ return;
40302
+ }
40303
+
40304
+ var body = node.value.body.body;
40305
+
40306
+ if (!node.parent.parent.superClass && body.length === 0 ||
40307
+ node.parent.parent.superClass && isRedundantSuperCall(body, node.value.params)) {
40308
+ context.report(node, "Useless constructor.");
40309
+ }
40310
+ }
40311
+
40312
+
40313
+ return {
40314
+ "MethodDefinition": checkForConstructor
40315
+ };
40316
+ };
40317
+
40318
+ module.exports.schema = [];
40319
+
40320
+ },{}],323:[function(require,module,exports){
39518
40321
  /**
39519
40322
  * @fileoverview Rule to check for the usage of var.
39520
40323
  * @author Jamund Ferguson
@@ -39542,7 +40345,7 @@ module.exports = function(context) {
39542
40345
 
39543
40346
  module.exports.schema = [];
39544
40347
 
39545
- },{}],321:[function(require,module,exports){
40348
+ },{}],324:[function(require,module,exports){
39546
40349
  /**
39547
40350
  * @fileoverview Rule to disallow use of void operator.
39548
40351
  * @author Mike Sidorov
@@ -39572,7 +40375,7 @@ module.exports = function(context) {
39572
40375
 
39573
40376
  module.exports.schema = [];
39574
40377
 
39575
- },{}],322:[function(require,module,exports){
40378
+ },{}],325:[function(require,module,exports){
39576
40379
  /**
39577
40380
  * @fileoverview Rule that warns about used warning comments
39578
40381
  * @author Alexander Schmidt <https://github.com/lxanders>
@@ -39654,7 +40457,7 @@ module.exports = function(context) {
39654
40457
  var matches = commentContainsWarningTerm(node.value);
39655
40458
 
39656
40459
  matches.forEach(function(matchedTerm) {
39657
- context.report(node, "Unexpected \"" + matchedTerm + "\" comment.");
40460
+ context.report(node, "Unexpected '" + matchedTerm + "' comment.");
39658
40461
  });
39659
40462
  }
39660
40463
 
@@ -39683,7 +40486,52 @@ module.exports.schema = [
39683
40486
  }
39684
40487
  ];
39685
40488
 
39686
- },{"../ast-utils":152}],323:[function(require,module,exports){
40489
+ },{"../ast-utils":152}],326:[function(require,module,exports){
40490
+ /**
40491
+ * @fileoverview Rule to disallow whitespace before properties
40492
+ * @author Kai Cataldo
40493
+ * @copyright 2015 Kai Cataldo. All rights reserved.
40494
+ * See LICENSE file in root directory for full license.
40495
+ */
40496
+ "use strict";
40497
+
40498
+ var astUtils = require("../ast-utils");
40499
+
40500
+ //------------------------------------------------------------------------------
40501
+ // Rule Definition
40502
+ //------------------------------------------------------------------------------
40503
+
40504
+ module.exports = function(context) {
40505
+ var sourceCode = context.getSourceCode();
40506
+
40507
+ //--------------------------------------------------------------------------
40508
+ // Public
40509
+ //--------------------------------------------------------------------------
40510
+
40511
+ return {
40512
+ MemberExpression: function(node) {
40513
+ var obj = node.object;
40514
+ var prop = node.property;
40515
+
40516
+ if (astUtils.isTokenOnSameLine(obj, prop)) {
40517
+ if (sourceCode.isSpaceBetweenTokens(obj, prop)) {
40518
+ context.report({
40519
+ node: node,
40520
+ message: "Unexpected whitespace before property '{{ propName }}'.",
40521
+ data: {
40522
+ propName: prop.name
40523
+ }
40524
+ });
40525
+ }
40526
+ }
40527
+ }
40528
+ };
40529
+ };
40530
+
40531
+ module.exports.schema = [];
40532
+
40533
+
40534
+ },{"../ast-utils":152}],327:[function(require,module,exports){
39687
40535
  /**
39688
40536
  * @fileoverview Rule to flag use of with statement
39689
40537
  * @author Nicholas C. Zakas
@@ -39707,7 +40555,7 @@ module.exports = function(context) {
39707
40555
 
39708
40556
  module.exports.schema = [];
39709
40557
 
39710
- },{}],324:[function(require,module,exports){
40558
+ },{}],328:[function(require,module,exports){
39711
40559
  /**
39712
40560
  * @fileoverview Disallows or enforces spaces inside of object literals.
39713
40561
  * @author Jamund Ferguson
@@ -39974,7 +40822,7 @@ module.exports.schema = [
39974
40822
  }
39975
40823
  ];
39976
40824
 
39977
- },{"../ast-utils":152}],325:[function(require,module,exports){
40825
+ },{"../ast-utils":152}],329:[function(require,module,exports){
39978
40826
  /**
39979
40827
  * @fileoverview Rule to enforce concise object methods and properties.
39980
40828
  * @author Jamund Ferguson
@@ -40098,7 +40946,7 @@ module.exports.schema = {
40098
40946
  ]
40099
40947
  };
40100
40948
 
40101
- },{}],326:[function(require,module,exports){
40949
+ },{}],330:[function(require,module,exports){
40102
40950
  /**
40103
40951
  * @fileoverview A rule to control the use of single variable declarations.
40104
40952
  * @author Ian Christian Myers
@@ -40415,7 +41263,7 @@ module.exports.schema = [
40415
41263
  }
40416
41264
  ];
40417
41265
 
40418
- },{}],327:[function(require,module,exports){
41266
+ },{}],331:[function(require,module,exports){
40419
41267
  /**
40420
41268
  * @fileoverview Rule to replace assignment expressions with operator assignment
40421
41269
  * @author Brandon Mills
@@ -40535,7 +41383,7 @@ module.exports.schema = [
40535
41383
  }
40536
41384
  ];
40537
41385
 
40538
- },{}],328:[function(require,module,exports){
41386
+ },{}],332:[function(require,module,exports){
40539
41387
  /**
40540
41388
  * @fileoverview Operator linebreak - enforces operator linebreak style of two types: after and before
40541
41389
  * @author Benoît Zugmeyer
@@ -40593,7 +41441,8 @@ module.exports = function(context) {
40593
41441
 
40594
41442
  var rightToken = context.getTokenAfter(operatorToken);
40595
41443
  var operator = operatorToken.value;
40596
- var style = styleOverrides[operator] || globalStyle;
41444
+ var operatorStyleOverride = styleOverrides[operator];
41445
+ var style = operatorStyleOverride || globalStyle;
40597
41446
 
40598
41447
  // if single line
40599
41448
  if (astUtils.isTokenOnSameLine(leftToken, operatorToken) &&
@@ -40601,7 +41450,7 @@ module.exports = function(context) {
40601
41450
 
40602
41451
  return;
40603
41452
 
40604
- } else if (!astUtils.isTokenOnSameLine(leftToken, operatorToken) &&
41453
+ } else if (operatorStyleOverride !== "ignore" && !astUtils.isTokenOnSameLine(leftToken, operatorToken) &&
40605
41454
  !astUtils.isTokenOnSameLine(operatorToken, rightToken)) {
40606
41455
 
40607
41456
  // lone operator
@@ -40675,7 +41524,7 @@ module.exports.schema = [
40675
41524
  "properties": {
40676
41525
  "anyOf": {
40677
41526
  "type": "string",
40678
- "enum": ["after", "before", "none"]
41527
+ "enum": ["after", "before", "none", "ignore"]
40679
41528
  }
40680
41529
  }
40681
41530
  }
@@ -40684,7 +41533,7 @@ module.exports.schema = [
40684
41533
  }
40685
41534
  ];
40686
41535
 
40687
- },{"../ast-utils":152,"object-assign":151}],329:[function(require,module,exports){
41536
+ },{"../ast-utils":152,"object-assign":151}],333:[function(require,module,exports){
40688
41537
  /**
40689
41538
  * @fileoverview A rule to ensure blank lines within blocks.
40690
41539
  * @author Mathias Schreck <https://github.com/lo1tuma>
@@ -40811,7 +41660,7 @@ module.exports.schema = [
40811
41660
  }
40812
41661
  ];
40813
41662
 
40814
- },{}],330:[function(require,module,exports){
41663
+ },{}],334:[function(require,module,exports){
40815
41664
  /**
40816
41665
  * @fileoverview A rule to suggest using arrow functions as callbacks.
40817
41666
  * @author Toru Nagashima
@@ -41019,7 +41868,7 @@ module.exports = function(context) {
41019
41868
 
41020
41869
  module.exports.schema = [];
41021
41870
 
41022
- },{}],331:[function(require,module,exports){
41871
+ },{}],335:[function(require,module,exports){
41023
41872
  /**
41024
41873
  * @fileoverview A rule to suggest using of const declaration for variables that are never modified after declared.
41025
41874
  * @author Toru Nagashima
@@ -41114,7 +41963,7 @@ module.exports = function(context) {
41114
41963
  if (writer && references.every(isInScope(writer.from))) {
41115
41964
  context.report({
41116
41965
  node: identifier,
41117
- message: "`{{name}}` is never modified, use `const` instead.",
41966
+ message: "'{{name}}' is never modified, use 'const' instead.",
41118
41967
  data: identifier
41119
41968
  });
41120
41969
  }
@@ -41145,7 +41994,7 @@ module.exports = function(context) {
41145
41994
 
41146
41995
  module.exports.schema = [];
41147
41996
 
41148
- },{}],332:[function(require,module,exports){
41997
+ },{}],336:[function(require,module,exports){
41149
41998
  /**
41150
41999
  * @fileoverview Rule to suggest using "Reflect" api over Function/Object methods
41151
42000
  * @author Keith Cirkel <http://keithcirkel.co.uk>
@@ -41247,7 +42096,7 @@ module.exports.schema = [
41247
42096
  }
41248
42097
  ];
41249
42098
 
41250
- },{}],333:[function(require,module,exports){
42099
+ },{}],337:[function(require,module,exports){
41251
42100
  /**
41252
42101
  * @fileoverview Rule to
41253
42102
  * @author Toru Nagashima
@@ -41296,7 +42145,7 @@ module.exports = function(context) {
41296
42145
  function report(reference) {
41297
42146
  context.report({
41298
42147
  node: reference.identifier,
41299
- message: "Use the rest parameters instead of \"arguments\"."
42148
+ message: "Use the rest parameters instead of 'arguments'."
41300
42149
  });
41301
42150
  }
41302
42151
 
@@ -41320,7 +42169,7 @@ module.exports = function(context) {
41320
42169
 
41321
42170
  module.exports.schema = [];
41322
42171
 
41323
- },{}],334:[function(require,module,exports){
42172
+ },{}],338:[function(require,module,exports){
41324
42173
  /**
41325
42174
  * @fileoverview A rule to suggest using of the spread operator instead of `.apply()`.
41326
42175
  * @author Toru Nagashima
@@ -41406,7 +42255,7 @@ module.exports = function(context) {
41406
42255
  var thisArg = node.arguments[0];
41407
42256
 
41408
42257
  if (isValidThisArg(expectedThis, thisArg, context)) {
41409
- context.report(node, "use the spread operator instead of the \".apply()\".");
42258
+ context.report(node, "use the spread operator instead of the '.apply()'.");
41410
42259
  }
41411
42260
  }
41412
42261
  };
@@ -41414,7 +42263,7 @@ module.exports = function(context) {
41414
42263
 
41415
42264
  module.exports.schema = [];
41416
42265
 
41417
- },{"../ast-utils":152}],335:[function(require,module,exports){
42266
+ },{"../ast-utils":152}],339:[function(require,module,exports){
41418
42267
  /**
41419
42268
  * @fileoverview A rule to suggest using template literals instead of string concatenation.
41420
42269
  * @author Toru Nagashima
@@ -41512,7 +42361,7 @@ module.exports = function(context) {
41512
42361
 
41513
42362
  module.exports.schema = [];
41514
42363
 
41515
- },{"../ast-utils":152}],336:[function(require,module,exports){
42364
+ },{"../ast-utils":152}],340:[function(require,module,exports){
41516
42365
  /**
41517
42366
  * @fileoverview Rule to flag non-quoted property names in object literals.
41518
42367
  * @author Mathias Bynens <http://mathiasbynens.be/>
@@ -41539,10 +42388,10 @@ module.exports = function(context) {
41539
42388
  CHECK_UNNECESSARY = !context.options[1] || context.options[1].unnecessary !== false,
41540
42389
  NUMBERS = context.options[1] && context.options[1].numbers,
41541
42390
 
41542
- MESSAGE_UNNECESSARY = "Unnecessarily quoted property `{{property}}` found.",
41543
- MESSAGE_UNQUOTED = "Unquoted property `{{property}}` found.",
41544
- MESSAGE_NUMERIC = "Unquoted number literal `{{property}}` used as key.",
41545
- MESSAGE_RESERVED = "Unquoted reserved word `{{property}}` used as key.";
42391
+ MESSAGE_UNNECESSARY = "Unnecessarily quoted property '{{property}}' found.",
42392
+ MESSAGE_UNQUOTED = "Unquoted property '{{property}}' found.",
42393
+ MESSAGE_NUMERIC = "Unquoted number literal '{{property}}' used as key.",
42394
+ MESSAGE_RESERVED = "Unquoted reserved word '{{property}}' used as key.";
41546
42395
 
41547
42396
 
41548
42397
  /**
@@ -41658,13 +42507,13 @@ module.exports = function(context) {
41658
42507
  }
41659
42508
  } else if (KEYWORDS && checkQuotesRedundancy && key.type === "Identifier" && isKeyword(key.name)) {
41660
42509
  necessaryQuotes = true;
41661
- context.report(node, "Properties should be quoted as `{{property}}` is a reserved word.", {property: key.name});
42510
+ context.report(node, "Properties should be quoted as '{{property}}' is a reserved word.", {property: key.name});
41662
42511
  } else {
41663
42512
  lackOfQuotes = true;
41664
42513
  }
41665
42514
 
41666
42515
  if (quotes && lackOfQuotes) {
41667
- context.report(node, "Inconsistently quoted property `{{key}}` found.", {
42516
+ context.report(node, "Inconsistently quoted property '{{key}}' found.", {
41668
42517
  key: key.name || key.value
41669
42518
  });
41670
42519
  }
@@ -41736,7 +42585,7 @@ module.exports.schema = {
41736
42585
  ]
41737
42586
  };
41738
42587
 
41739
- },{"../util/keywords":367,"espree":"espree"}],337:[function(require,module,exports){
42588
+ },{"../util/keywords":372,"espree":"espree"}],341:[function(require,module,exports){
41740
42589
  /**
41741
42590
  * @fileoverview A rule to choose between single and double quote marks
41742
42591
  * @author Matt DuVall <http://www.mattduvall.com/>, Brandon Payton
@@ -41812,6 +42661,12 @@ var AVOID_ESCAPE = "avoid-escape",
41812
42661
  //------------------------------------------------------------------------------
41813
42662
 
41814
42663
  module.exports = function(context) {
42664
+
42665
+ var quoteOption = context.options[0],
42666
+ settings = QUOTE_SETTINGS[quoteOption || "double"],
42667
+ avoidEscape = context.options[1] === AVOID_ESCAPE,
42668
+ sourceCode = context.getSourceCode();
42669
+
41815
42670
  /**
41816
42671
  * Determines if a given node is part of JSX syntax.
41817
42672
  * @param {ASTNode} node The node to check.
@@ -41900,13 +42755,12 @@ module.exports = function(context) {
41900
42755
  "Literal": function(node) {
41901
42756
  var val = node.value,
41902
42757
  rawVal = node.raw,
41903
- quoteOption = context.options[0],
41904
- settings = QUOTE_SETTINGS[quoteOption || "double"],
41905
- avoidEscape = context.options[1] === AVOID_ESCAPE,
41906
42758
  isValid;
41907
42759
 
41908
42760
  if (settings && typeof val === "string") {
41909
- isValid = (quoteOption === "backtick" && isAllowedAsNonBacktick(node)) || isJSXElement(node.parent) || astUtils.isSurroundedBy(rawVal, settings.quote);
42761
+ isValid = (quoteOption === "backtick" && isAllowedAsNonBacktick(node)) ||
42762
+ isJSXElement(node.parent) ||
42763
+ astUtils.isSurroundedBy(rawVal, settings.quote);
41910
42764
 
41911
42765
  if (!isValid && avoidEscape) {
41912
42766
  isValid = astUtils.isSurroundedBy(rawVal, settings.alternateQuote) && rawVal.indexOf(settings.quote) >= 0;
@@ -41922,6 +42776,26 @@ module.exports = function(context) {
41922
42776
  });
41923
42777
  }
41924
42778
  }
42779
+ },
42780
+
42781
+ "TemplateLiteral": function(node) {
42782
+
42783
+ // If backticks are expected or it's a tagged template, then this shouldn't throw an errors
42784
+ if (quoteOption === "backtick" || node.parent.type === "TaggedTemplateExpression") {
42785
+ return;
42786
+ }
42787
+
42788
+ var shouldWarn = node.quasis.length === 1 && (node.quasis[0].value.cooked.indexOf("\n") === -1);
42789
+
42790
+ if (shouldWarn) {
42791
+ context.report({
42792
+ node: node,
42793
+ message: "Strings must use " + settings.description + ".",
42794
+ fix: function(fixer) {
42795
+ return fixer.replaceText(node, settings.convert(sourceCode.getText(node)));
42796
+ }
42797
+ });
42798
+ }
41925
42799
  }
41926
42800
  };
41927
42801
 
@@ -41936,7 +42810,7 @@ module.exports.schema = [
41936
42810
  }
41937
42811
  ];
41938
42812
 
41939
- },{"../ast-utils":152}],338:[function(require,module,exports){
42813
+ },{"../ast-utils":152}],342:[function(require,module,exports){
41940
42814
  /**
41941
42815
  * @fileoverview Rule to flag use of parseInt without a radix argument
41942
42816
  * @author James Allardice
@@ -42015,7 +42889,7 @@ module.exports.schema = [
42015
42889
  ];
42016
42890
 
42017
42891
 
42018
- },{}],339:[function(require,module,exports){
42892
+ },{}],343:[function(require,module,exports){
42019
42893
  /**
42020
42894
  * @fileoverview Rule to check for jsdoc presence.
42021
42895
  * @author Gyandeep Singh
@@ -42114,7 +42988,7 @@ module.exports.schema = [
42114
42988
  }
42115
42989
  ];
42116
42990
 
42117
- },{"object-assign":151}],340:[function(require,module,exports){
42991
+ },{"object-assign":151}],344:[function(require,module,exports){
42118
42992
  /**
42119
42993
  * @fileoverview Rule to flag the generator functions that does not have yield.
42120
42994
  * @author Toru Nagashima
@@ -42156,7 +43030,7 @@ module.exports = function(context) {
42156
43030
  if (countYield === 0 && node.body.body.length > 0) {
42157
43031
  context.report(
42158
43032
  node,
42159
- "This generator function does not have `yield`.");
43033
+ "This generator function does not have 'yield'.");
42160
43034
  }
42161
43035
  }
42162
43036
 
@@ -42178,7 +43052,7 @@ module.exports = function(context) {
42178
43052
 
42179
43053
  module.exports.schema = [];
42180
43054
 
42181
- },{}],341:[function(require,module,exports){
43055
+ },{}],345:[function(require,module,exports){
42182
43056
  /**
42183
43057
  * @fileoverview Validates spacing before and after semicolon
42184
43058
  * @author Mathias Schreck
@@ -42383,7 +43257,7 @@ module.exports.schema = [
42383
43257
  }
42384
43258
  ];
42385
43259
 
42386
- },{"../ast-utils":152}],342:[function(require,module,exports){
43260
+ },{"../ast-utils":152}],346:[function(require,module,exports){
42387
43261
  /**
42388
43262
  * @fileoverview Rule to flag missing semicolons.
42389
43263
  * @author Nicholas C. Zakas
@@ -42399,8 +43273,9 @@ module.exports.schema = [
42399
43273
  module.exports = function(context) {
42400
43274
 
42401
43275
  var OPT_OUT_PATTERN = /[\[\(\/\+\-]/; // One of [(/+-
42402
-
42403
- var always = context.options[0] !== "never",
43276
+ var options = context.options[1];
43277
+ var never = context.options[0] === "never",
43278
+ exceptOneLine = options && options.omitLastInOneLineBlock === true,
42404
43279
  sourceCode = context.getSourceCode();
42405
43280
 
42406
43281
  //--------------------------------------------------------------------------
@@ -42410,15 +43285,16 @@ module.exports = function(context) {
42410
43285
  /**
42411
43286
  * Reports a semicolon error with appropriate location and message.
42412
43287
  * @param {ASTNode} node The node with an extra or missing semicolon.
43288
+ * @param {boolean} missing True if the semicolon is missing.
42413
43289
  * @returns {void}
42414
43290
  */
42415
- function report(node) {
43291
+ function report(node, missing) {
42416
43292
  var message,
42417
43293
  fix,
42418
43294
  lastToken = sourceCode.getLastToken(node),
42419
43295
  loc = lastToken.loc;
42420
43296
 
42421
- if (always) {
43297
+ if (!missing) {
42422
43298
  message = "Missing semicolon.";
42423
43299
  loc = loc.end;
42424
43300
  fix = function(fixer) {
@@ -42478,6 +43354,22 @@ module.exports = function(context) {
42478
43354
  return (lastTokenLine !== nextTokenLine && !isOptOutToken) || isDivider;
42479
43355
  }
42480
43356
 
43357
+ /**
43358
+ * Checks a node to see if it's in a one-liner block statement.
43359
+ * @param {ASTNode} node The node to check.
43360
+ * @returns {boolean} whether the node is in a one-liner block statement.
43361
+ */
43362
+ function isOneLinerBlock(node) {
43363
+ var nextToken = context.getTokenAfter(node);
43364
+ if (!nextToken || nextToken.value !== "}") {
43365
+ return false;
43366
+ }
43367
+
43368
+ var parent = node.parent;
43369
+ return parent && parent.type === "BlockStatement" &&
43370
+ parent.loc.start.line === parent.loc.end.line;
43371
+ }
43372
+
42481
43373
  /**
42482
43374
  * Checks a node to see if it's followed by a semicolon.
42483
43375
  * @param {ASTNode} node The node to check.
@@ -42486,13 +43378,19 @@ module.exports = function(context) {
42486
43378
  function checkForSemicolon(node) {
42487
43379
  var lastToken = context.getLastToken(node);
42488
43380
 
42489
- if (always) {
42490
- if (!isSemicolon(lastToken)) {
42491
- report(node);
43381
+ if (never) {
43382
+ if (isUnnecessarySemicolon(lastToken)) {
43383
+ report(node, true);
42492
43384
  }
42493
43385
  } else {
42494
- if (isUnnecessarySemicolon(lastToken)) {
42495
- report(node);
43386
+ if (!isSemicolon(lastToken)) {
43387
+ if (!exceptOneLine || !isOneLinerBlock(node)) {
43388
+ report(node);
43389
+ }
43390
+ } else {
43391
+ if (exceptOneLine && isOneLinerBlock(node)) {
43392
+ report(node, true);
43393
+ }
42496
43394
  }
42497
43395
  }
42498
43396
  }
@@ -42519,7 +43417,6 @@ module.exports = function(context) {
42519
43417
  //--------------------------------------------------------------------------
42520
43418
 
42521
43419
  return {
42522
-
42523
43420
  "VariableDeclaration": checkForSemicolonForVariableDeclaration,
42524
43421
  "ExpressionStatement": checkForSemicolon,
42525
43422
  "ReturnStatement": checkForSemicolon,
@@ -42544,13 +43441,197 @@ module.exports = function(context) {
42544
43441
 
42545
43442
  };
42546
43443
 
43444
+ module.exports.schema = {
43445
+ "anyOf": [
43446
+ {
43447
+ "type": "array",
43448
+ "items": [
43449
+ {
43450
+ "enum": ["never"]
43451
+ }
43452
+ ],
43453
+ "minItems": 0,
43454
+ "maxItems": 1
43455
+ },
43456
+ {
43457
+ "type": "array",
43458
+ "items": [
43459
+ {
43460
+ "enum": ["always"]
43461
+ },
43462
+ {
43463
+ "type": "object",
43464
+ "properties": {
43465
+ "omitLastInOneLineBlock": {"type": "boolean"}
43466
+ },
43467
+ "additionalProperties": false
43468
+ }
43469
+ ],
43470
+ "minItems": 0,
43471
+ "maxItems": 2
43472
+ }
43473
+ ]
43474
+ };
43475
+
43476
+ },{}],347:[function(require,module,exports){
43477
+ /**
43478
+ * @fileoverview Rule to require sorting of import declarations
43479
+ * @author Christian Schuller
43480
+ * @copyright 2015 Christian Schuller. All rights reserved.
43481
+ * See LICENSE file in root directory for full license.
43482
+ */
43483
+
43484
+ "use strict";
43485
+
43486
+ //------------------------------------------------------------------------------
43487
+ // Rule Definition
43488
+ //------------------------------------------------------------------------------
43489
+
43490
+ module.exports = function(context) {
43491
+
43492
+ var configuration = context.options[0] || {},
43493
+ ignoreCase = configuration.ignoreCase || false,
43494
+ ignoreMemberSort = configuration.ignoreMemberSort || false,
43495
+ memberSyntaxSortOrder = configuration.memberSyntaxSortOrder || ["none", "all", "multiple", "single"],
43496
+ previousDeclaration = null;
43497
+
43498
+ /**
43499
+ * Gets the used member syntax style.
43500
+ *
43501
+ * import "my-module.js" --> none
43502
+ * import * as myModule from "my-module.js" --> all
43503
+ * import {myMember} from "my-module.js" --> single
43504
+ * import {foo, bar} from "my-module.js" --> multiple
43505
+ *
43506
+ * @param {ASTNode} node - the ImportDeclaration node.
43507
+ * @returns {string} used member parameter style, ["all", "multiple", "single"]
43508
+ */
43509
+ function usedMemberSyntax(node) {
43510
+ if (node.specifiers.length === 0) {
43511
+ return "none";
43512
+ } else if (node.specifiers[0].type === "ImportNamespaceSpecifier") {
43513
+ return "all";
43514
+ } else if (node.specifiers.length === 1) {
43515
+ return "single";
43516
+ } else {
43517
+ return "multiple";
43518
+ }
43519
+ }
43520
+
43521
+ /**
43522
+ * Gets the group by member parameter index for given declaration.
43523
+ * @param {ASTNode} node - the ImportDeclaration node.
43524
+ * @returns {number} the declaration group by member index.
43525
+ */
43526
+ function getMemberParameterGroupIndex(node) {
43527
+ return memberSyntaxSortOrder.indexOf(usedMemberSyntax(node));
43528
+ }
43529
+
43530
+ /**
43531
+ * Gets the local name of the first imported module.
43532
+ * @param {ASTNode} node - the ImportDeclaration node.
43533
+ * @returns {?string} the local name of the first imported module.
43534
+ */
43535
+ function getFirstLocalMemberName(node) {
43536
+ if (node.specifiers[0]) {
43537
+ return node.specifiers[0].local.name;
43538
+ } else {
43539
+ return null;
43540
+ }
43541
+ }
43542
+
43543
+ return {
43544
+ "ImportDeclaration": function(node) {
43545
+ if (previousDeclaration) {
43546
+ var currentLocalMemberName = getFirstLocalMemberName(node),
43547
+ currentMemberSyntaxGroupIndex = getMemberParameterGroupIndex(node),
43548
+ previousLocalMemberName = getFirstLocalMemberName(previousDeclaration),
43549
+ previousMemberSyntaxGroupIndex = getMemberParameterGroupIndex(previousDeclaration);
43550
+
43551
+ if (ignoreCase) {
43552
+ previousLocalMemberName = previousLocalMemberName.toLowerCase();
43553
+ currentLocalMemberName = currentLocalMemberName.toLowerCase();
43554
+ }
43555
+
43556
+ // When the current declaration uses a different member syntax,
43557
+ // then check if the ordering is correct.
43558
+ // Otherwise, make a default string compare (like rule sort-vars to be consistent) of the first used local member name.
43559
+ if (currentMemberSyntaxGroupIndex !== previousMemberSyntaxGroupIndex) {
43560
+ if (currentMemberSyntaxGroupIndex < previousMemberSyntaxGroupIndex) {
43561
+ context.report({
43562
+ node: node,
43563
+ message: "Expected '{{syntaxA}}' syntax before '{{syntaxB}}' syntax.",
43564
+ data: {
43565
+ syntaxA: memberSyntaxSortOrder[currentMemberSyntaxGroupIndex],
43566
+ syntaxB: memberSyntaxSortOrder[previousMemberSyntaxGroupIndex]
43567
+ }
43568
+ });
43569
+ }
43570
+ } else {
43571
+ if (currentLocalMemberName < previousLocalMemberName) {
43572
+ context.report({
43573
+ node: node,
43574
+ message: "Imports should be sorted alphabetically."
43575
+ });
43576
+ }
43577
+ }
43578
+ }
43579
+
43580
+ // Multiple members of an import declaration should also be sorted alphabetically.
43581
+ if (!ignoreMemberSort && node.specifiers.length > 1) {
43582
+ node.specifiers.reduce(function(previousSpecifier, currentSpecifier) {
43583
+ var currentSpecifierName = currentSpecifier.local.name,
43584
+ previousSpecifierName = previousSpecifier.local.name;
43585
+
43586
+ if (ignoreCase) {
43587
+ currentSpecifierName = currentSpecifierName.toLowerCase();
43588
+ previousSpecifierName = previousSpecifierName.toLowerCase();
43589
+ }
43590
+
43591
+ if (currentSpecifierName < previousSpecifierName) {
43592
+ context.report({
43593
+ node: currentSpecifier,
43594
+ message: "Member '{{memberName}}' of the import declaration should be sorted alphabetically.",
43595
+ data: {
43596
+ memberName: currentSpecifier.local.name
43597
+ }
43598
+ });
43599
+ }
43600
+
43601
+ return currentSpecifier;
43602
+ }, node.specifiers[0]);
43603
+ }
43604
+
43605
+ previousDeclaration = node;
43606
+ }
43607
+ };
43608
+ };
43609
+
42547
43610
  module.exports.schema = [
42548
43611
  {
42549
- "enum": ["always", "never"]
43612
+ "type": "object",
43613
+ "properties": {
43614
+ "ignoreCase": {
43615
+ "type": "boolean"
43616
+ },
43617
+ "memberSyntaxSortOrder": {
43618
+ "type": "array",
43619
+ "items": {
43620
+ "enum": ["none", "all", "multiple", "single"]
43621
+ },
43622
+ "uniqueItems": true,
43623
+ "minItems": 4,
43624
+ "maxItems": 4
43625
+ },
43626
+ "ignoreMemberSort": {
43627
+ "type": "boolean"
43628
+ }
43629
+ },
43630
+ "additionalProperties": false
42550
43631
  }
42551
43632
  ];
42552
43633
 
42553
- },{}],343:[function(require,module,exports){
43634
+ },{}],348:[function(require,module,exports){
42554
43635
  /**
42555
43636
  * @fileoverview Rule to require sorting of variables within a single Variable Declaration block
42556
43637
  * @author Ilya Volodin
@@ -42605,7 +43686,7 @@ module.exports.schema = [
42605
43686
  }
42606
43687
  ];
42607
43688
 
42608
- },{}],344:[function(require,module,exports){
43689
+ },{}],349:[function(require,module,exports){
42609
43690
  /**
42610
43691
  * @fileoverview Rule to enforce the number of spaces after certain keywords
42611
43692
  * @author Nick Fisher
@@ -42642,7 +43723,7 @@ module.exports = function(context) {
42642
43723
  context.report({
42643
43724
  node: node,
42644
43725
  loc: left.loc.end,
42645
- message: "Keyword \"{{value}}\" must {{not}}be followed by whitespace.",
43726
+ message: "Keyword '{{value}}' must {{not}}be followed by whitespace.",
42646
43727
  data: {
42647
43728
  value: value,
42648
43729
  not: requiresSpace ? "" : "not "
@@ -42705,7 +43786,7 @@ module.exports.schema = [
42705
43786
  }
42706
43787
  ];
42707
43788
 
42708
- },{}],345:[function(require,module,exports){
43789
+ },{}],350:[function(require,module,exports){
42709
43790
  /**
42710
43791
  * @fileoverview A rule to ensure whitespace before blocks.
42711
43792
  * @author Mathias Schreck <https://github.com/lo1tuma>
@@ -42724,24 +43805,28 @@ module.exports = function(context) {
42724
43805
  var config = context.options[0],
42725
43806
  sourceCode = context.getSourceCode(),
42726
43807
  checkFunctions = true,
42727
- checkKeywords = true;
43808
+ checkKeywords = true,
43809
+ checkClasses = true;
42728
43810
 
42729
43811
  if (typeof config === "object") {
42730
43812
  checkFunctions = config.functions !== "never";
42731
43813
  checkKeywords = config.keywords !== "never";
43814
+ checkClasses = config.classes !== "never";
42732
43815
  } else if (config === "never") {
42733
43816
  checkFunctions = false;
42734
43817
  checkKeywords = false;
43818
+ checkClasses = false;
42735
43819
  }
42736
43820
 
42737
43821
  /**
42738
- * Checks whether or not a given token is an arrow operator (=>).
43822
+ * Checks whether or not a given token is an arrow operator (=>) or a keyword
43823
+ * in order to avoid to conflict with `arrow-spacing` and `keyword-spacing`.
42739
43824
  *
42740
43825
  * @param {Token} token - A token to check.
42741
43826
  * @returns {boolean} `true` if the token is an arrow operator.
42742
43827
  */
42743
- function isArrow(token) {
42744
- return token.type === "Punctuator" && token.value === "=>";
43828
+ function isConflicted(token) {
43829
+ return (token.type === "Punctuator" && token.value === "=>") || token.type === "Keyword";
42745
43830
  }
42746
43831
 
42747
43832
  /**
@@ -42755,11 +43840,13 @@ module.exports = function(context) {
42755
43840
  parent,
42756
43841
  requireSpace;
42757
43842
 
42758
- if (precedingToken && !isArrow(precedingToken) && astUtils.isTokenOnSameLine(precedingToken, node)) {
43843
+ if (precedingToken && !isConflicted(precedingToken) && astUtils.isTokenOnSameLine(precedingToken, node)) {
42759
43844
  hasSpace = sourceCode.isSpaceBetweenTokens(precedingToken, node);
42760
43845
  parent = context.getAncestors().pop();
42761
43846
  if (parent.type === "FunctionExpression" || parent.type === "FunctionDeclaration") {
42762
43847
  requireSpace = checkFunctions;
43848
+ } else if (node.type === "ClassBody") {
43849
+ requireSpace = checkClasses;
42763
43850
  } else {
42764
43851
  requireSpace = checkKeywords;
42765
43852
  }
@@ -42830,6 +43917,9 @@ module.exports.schema = [
42830
43917
  },
42831
43918
  "functions": {
42832
43919
  "enum": ["always", "never"]
43920
+ },
43921
+ "classes": {
43922
+ "enum": ["always", "never"]
42833
43923
  }
42834
43924
  },
42835
43925
  "additionalProperties": false
@@ -42838,7 +43928,7 @@ module.exports.schema = [
42838
43928
  }
42839
43929
  ];
42840
43930
 
42841
- },{"../ast-utils":152}],346:[function(require,module,exports){
43931
+ },{"../ast-utils":152}],351:[function(require,module,exports){
42842
43932
  /**
42843
43933
  * @fileoverview Rule to validate spacing before function paren.
42844
43934
  * @author Mathias Schreck <https://github.com/lo1tuma>
@@ -42964,7 +44054,7 @@ module.exports.schema = [
42964
44054
  }
42965
44055
  ];
42966
44056
 
42967
- },{}],347:[function(require,module,exports){
44057
+ },{}],352:[function(require,module,exports){
42968
44058
  /**
42969
44059
  * @fileoverview Require or disallow spaces before keywords
42970
44060
  * @author Marko Raatikka
@@ -42979,8 +44069,8 @@ var astUtils = require("../ast-utils");
42979
44069
  // Rule Definition
42980
44070
  //------------------------------------------------------------------------------
42981
44071
 
42982
- var ERROR_MSG_SPACE_EXPECTED = "Missing space before keyword \"{{keyword}}\".";
42983
- var ERROR_MSG_NO_SPACE_EXPECTED = "Unexpected space before keyword \"{{keyword}}\".";
44072
+ var ERROR_MSG_SPACE_EXPECTED = "Missing space before keyword '{{keyword}}'.";
44073
+ var ERROR_MSG_NO_SPACE_EXPECTED = "Unexpected space before keyword '{{keyword}}'.";
42984
44074
 
42985
44075
  module.exports = function(context) {
42986
44076
 
@@ -43180,7 +44270,7 @@ module.exports.schema = [
43180
44270
  }
43181
44271
  ];
43182
44272
 
43183
- },{"../ast-utils":152}],348:[function(require,module,exports){
44273
+ },{"../ast-utils":152}],353:[function(require,module,exports){
43184
44274
  /**
43185
44275
  * @fileoverview Disallows or enforces spaces inside of parentheses.
43186
44276
  * @author Jonathan Rajavuori
@@ -43421,7 +44511,7 @@ module.exports.schema = [
43421
44511
  }
43422
44512
  ];
43423
44513
 
43424
- },{"../ast-utils":152}],349:[function(require,module,exports){
44514
+ },{"../ast-utils":152}],354:[function(require,module,exports){
43425
44515
  /**
43426
44516
  * @fileoverview Require spaces around infix operators
43427
44517
  * @author Michael Ficarra
@@ -43569,7 +44659,7 @@ module.exports.schema = [
43569
44659
  }
43570
44660
  ];
43571
44661
 
43572
- },{}],350:[function(require,module,exports){
44662
+ },{}],355:[function(require,module,exports){
43573
44663
  /**
43574
44664
  * @fileoverview Require spaces following return, throw, and case
43575
44665
  * @author Michael Ficarra
@@ -43595,7 +44685,7 @@ module.exports = function(context) {
43595
44685
  if (tokens[0].range[1] >= tokens[1].range[0]) {
43596
44686
  context.report({
43597
44687
  node: node,
43598
- message: "Keyword \"" + value + "\" must be followed by whitespace.",
44688
+ message: "Keyword '" + value + "' must be followed by whitespace.",
43599
44689
  fix: function(fixer) {
43600
44690
  return fixer.insertTextAfterRange(tokens[0].range, " ");
43601
44691
  }
@@ -43621,7 +44711,7 @@ module.exports = function(context) {
43621
44711
 
43622
44712
  module.exports.schema = [];
43623
44713
 
43624
- },{}],351:[function(require,module,exports){
44714
+ },{}],356:[function(require,module,exports){
43625
44715
  /**
43626
44716
  * @fileoverview This rule shoud require or disallow spaces before or after unary operations.
43627
44717
  * @author Marcin Kumorek
@@ -43674,7 +44764,7 @@ module.exports = function(context) {
43674
44764
  if (secondToken.range[0] === firstToken.range[1]) {
43675
44765
  context.report({
43676
44766
  node: node,
43677
- message: "Unary word operator \"" + word + "\" must be followed by whitespace.",
44767
+ message: "Unary word operator '" + word + "' must be followed by whitespace.",
43678
44768
  fix: function(fixer) {
43679
44769
  return fixer.insertTextAfter(firstToken, " ");
43680
44770
  }
@@ -43686,7 +44776,7 @@ module.exports = function(context) {
43686
44776
  if (secondToken.range[0] > firstToken.range[1]) {
43687
44777
  context.report({
43688
44778
  node: node,
43689
- message: "Unexpected space after unary word operator \"" + word + "\".",
44779
+ message: "Unexpected space after unary word operator '" + word + "'.",
43690
44780
  fix: function(fixer) {
43691
44781
  return fixer.removeRange([firstToken.range[1], secondToken.range[0]]);
43692
44782
  }
@@ -43718,7 +44808,7 @@ module.exports = function(context) {
43718
44808
  if (firstToken.range[1] === secondToken.range[0]) {
43719
44809
  context.report({
43720
44810
  node: node,
43721
- message: "Unary operator \"" + firstToken.value + "\" must be followed by whitespace.",
44811
+ message: "Unary operator '" + firstToken.value + "' must be followed by whitespace.",
43722
44812
  fix: function(fixer) {
43723
44813
  return fixer.insertTextAfter(firstToken, " ");
43724
44814
  }
@@ -43728,7 +44818,7 @@ module.exports = function(context) {
43728
44818
  if (firstToken.range[1] === secondToken.range[0]) {
43729
44819
  context.report({
43730
44820
  node: node,
43731
- message: "Space is required before unary expressions \"" + secondToken.value + "\".",
44821
+ message: "Space is required before unary expressions '" + secondToken.value + "'.",
43732
44822
  fix: function(fixer) {
43733
44823
  return fixer.insertTextBefore(secondToken, " ");
43734
44824
  }
@@ -43740,7 +44830,7 @@ module.exports = function(context) {
43740
44830
  if (secondToken.range[0] > firstToken.range[1]) {
43741
44831
  context.report({
43742
44832
  node: node,
43743
- message: "Unexpected space after unary operator \"" + firstToken.value + "\".",
44833
+ message: "Unexpected space after unary operator '" + firstToken.value + "'.",
43744
44834
  fix: function(fixer) {
43745
44835
  return fixer.removeRange([firstToken.range[1], secondToken.range[0]]);
43746
44836
  }
@@ -43750,7 +44840,7 @@ module.exports = function(context) {
43750
44840
  if (secondToken.range[0] > firstToken.range[1]) {
43751
44841
  context.report({
43752
44842
  node: node,
43753
- message: "Unexpected space before unary operator \"" + secondToken.value + "\".",
44843
+ message: "Unexpected space before unary operator '" + secondToken.value + "'.",
43754
44844
  fix: function(fixer) {
43755
44845
  return fixer.removeRange([firstToken.range[1], secondToken.range[0]]);
43756
44846
  }
@@ -43797,7 +44887,7 @@ module.exports.schema = [
43797
44887
  }
43798
44888
  ];
43799
44889
 
43800
- },{}],352:[function(require,module,exports){
44890
+ },{}],357:[function(require,module,exports){
43801
44891
  /**
43802
44892
  * @fileoverview Source code for spaced-comments rule
43803
44893
  * @author Gyandeep Singh
@@ -43963,16 +45053,16 @@ module.exports = function(context) {
43963
45053
  if (requireSpace) {
43964
45054
  if (!rule.regex.test(node.value)) {
43965
45055
  if (rule.hasExceptions) {
43966
- context.report(node, "Expected exception block, space or tab after \"" + commentIdentifier + "\" in comment.");
45056
+ context.report(node, "Expected exception block, space or tab after '" + commentIdentifier + "' in comment.");
43967
45057
  } else {
43968
- context.report(node, "Expected space or tab after \"" + commentIdentifier + "\" in comment.");
45058
+ context.report(node, "Expected space or tab after '" + commentIdentifier + "' in comment.");
43969
45059
  }
43970
45060
  }
43971
45061
  } else {
43972
45062
  var matched = rule.regex.exec(node.value);
43973
45063
  if (matched) {
43974
45064
  if (!matched[1]) {
43975
- context.report(node, "Unexpected space or tab after \"" + commentIdentifier + "\" in comment.");
45065
+ context.report(node, "Unexpected space or tab after '" + commentIdentifier + "' in comment.");
43976
45066
  } else {
43977
45067
  context.report(node, "Unexpected space or tab after marker (" + matched[1] + ") in comment.");
43978
45068
  }
@@ -44048,7 +45138,7 @@ module.exports.schema = [
44048
45138
  }
44049
45139
  ];
44050
45140
 
44051
- },{"escape-string-regexp":76}],353:[function(require,module,exports){
45141
+ },{"escape-string-regexp":76}],358:[function(require,module,exports){
44052
45142
  /**
44053
45143
  * @fileoverview Rule to control usage of strict mode directives.
44054
45144
  * @author Brandon Mills
@@ -44064,13 +45154,13 @@ module.exports.schema = [
44064
45154
  //------------------------------------------------------------------------------
44065
45155
 
44066
45156
  var messages = {
44067
- function: "Use the function form of \"use strict\".",
44068
- global: "Use the global form of \"use strict\".",
44069
- multiple: "Multiple \"use strict\" directives.",
45157
+ function: "Use the function form of 'use strict'.",
45158
+ global: "Use the global form of 'use strict'.",
45159
+ multiple: "Multiple 'use strict' directives.",
44070
45160
  never: "Strict mode is not permitted.",
44071
- unnecessary: "Unnecessary \"use strict\" directive.",
44072
- unnecessaryInModules: "\"use strict\" is unnecessary inside of modules.",
44073
- unnecessaryInClasses: "\"use strict\" is unnecessary inside of classes."
45161
+ unnecessary: "Unnecessary 'use strict' directive.",
45162
+ unnecessaryInModules: "'use strict' is unnecessary inside of modules.",
45163
+ unnecessaryInClasses: "'use strict' is unnecessary inside of classes."
44074
45164
  };
44075
45165
 
44076
45166
  /**
@@ -44280,7 +45370,7 @@ module.exports.schema = [
44280
45370
  }
44281
45371
  ];
44282
45372
 
44283
- },{}],354:[function(require,module,exports){
45373
+ },{}],359:[function(require,module,exports){
44284
45374
  /**
44285
45375
  * @fileoverview Rule to flag comparisons to the value NaN
44286
45376
  * @author James Allardice
@@ -44308,7 +45398,7 @@ module.exports = function(context) {
44308
45398
 
44309
45399
  module.exports.schema = [];
44310
45400
 
44311
- },{}],355:[function(require,module,exports){
45401
+ },{}],360:[function(require,module,exports){
44312
45402
  /**
44313
45403
  * @fileoverview Validates JSDoc comments are syntactically correct
44314
45404
  * @author Nicholas C. Zakas
@@ -44403,6 +45493,7 @@ module.exports = function(context) {
44403
45493
  functionData = fns.pop(),
44404
45494
  hasReturns = false,
44405
45495
  hasConstructor = false,
45496
+ isInterface = false,
44406
45497
  isOverride = false,
44407
45498
  params = Object.create(null),
44408
45499
  jsdoc;
@@ -44429,7 +45520,7 @@ module.exports = function(context) {
44429
45520
 
44430
45521
  jsdoc.tags.forEach(function(tag) {
44431
45522
 
44432
- switch (tag.title) {
45523
+ switch (tag.title.toLowerCase()) {
44433
45524
 
44434
45525
  case "param":
44435
45526
  case "arg":
@@ -44477,6 +45568,10 @@ module.exports = function(context) {
44477
45568
  isOverride = true;
44478
45569
  break;
44479
45570
 
45571
+ case "interface":
45572
+ isInterface = true;
45573
+ break;
45574
+
44480
45575
  // no default
44481
45576
  }
44482
45577
 
@@ -44488,7 +45583,7 @@ module.exports = function(context) {
44488
45583
  });
44489
45584
 
44490
45585
  // check for functions missing @returns
44491
- if (!isOverride && !hasReturns && !hasConstructor && node.parent.kind !== "get" && !isTypeClass(node)) {
45586
+ if (!isOverride && !hasReturns && !hasConstructor && !isInterface && node.parent.kind !== "get" && !isTypeClass(node)) {
44492
45587
  if (requireReturn || functionData.returnPresent) {
44493
45588
  context.report(jsdocNode, "Missing JSDoc @" + (prefer.returns || "returns") + " for function.");
44494
45589
  }
@@ -44579,7 +45674,7 @@ module.exports.schema = [
44579
45674
  }
44580
45675
  ];
44581
45676
 
44582
- },{"doctrine":14}],356:[function(require,module,exports){
45677
+ },{"doctrine":14}],361:[function(require,module,exports){
44583
45678
  /**
44584
45679
  * @fileoverview Ensures that the results of typeof are compared against a valid string
44585
45680
  * @author Ian Christian Myers
@@ -44623,7 +45718,7 @@ module.exports = function(context) {
44623
45718
 
44624
45719
  module.exports.schema = [];
44625
45720
 
44626
- },{}],357:[function(require,module,exports){
45721
+ },{}],362:[function(require,module,exports){
44627
45722
  /**
44628
45723
  * @fileoverview Rule to enforce var declarations are only at the top of a function.
44629
45724
  * @author Danny Fritz
@@ -44638,7 +45733,7 @@ module.exports.schema = [];
44638
45733
  //------------------------------------------------------------------------------
44639
45734
 
44640
45735
  module.exports = function(context) {
44641
- var errorMessage = "All \"var\" declarations must be at the top of the function scope.";
45736
+ var errorMessage = "All 'var' declarations must be at the top of the function scope.";
44642
45737
 
44643
45738
  //--------------------------------------------------------------------------
44644
45739
  // Helpers
@@ -44742,7 +45837,7 @@ module.exports = function(context) {
44742
45837
 
44743
45838
  module.exports.schema = [];
44744
45839
 
44745
- },{}],358:[function(require,module,exports){
45840
+ },{}],363:[function(require,module,exports){
44746
45841
  /**
44747
45842
  * @fileoverview Rule to flag when IIFE is not wrapped in parens
44748
45843
  * @author Ilya Volodin
@@ -44798,7 +45893,7 @@ module.exports.schema = [
44798
45893
  }
44799
45894
  ];
44800
45895
 
44801
- },{}],359:[function(require,module,exports){
45896
+ },{}],364:[function(require,module,exports){
44802
45897
  /**
44803
45898
  * @fileoverview Rule to flag when regex literals are not wrapped in parens
44804
45899
  * @author Matt DuVall <http://www.mattduvall.com>
@@ -44838,7 +45933,7 @@ module.exports = function(context) {
44838
45933
 
44839
45934
  module.exports.schema = [];
44840
45935
 
44841
- },{}],360:[function(require,module,exports){
45936
+ },{}],365:[function(require,module,exports){
44842
45937
  /**
44843
45938
  * @fileoverview Rule to check the spacing around the * in yield* expressions.
44844
45939
  * @author Bryan Smith
@@ -44941,7 +46036,7 @@ module.exports.schema = [
44941
46036
  }
44942
46037
  ];
44943
46038
 
44944
- },{}],361:[function(require,module,exports){
46039
+ },{}],366:[function(require,module,exports){
44945
46040
  /**
44946
46041
  * @fileoverview Rule to require or disallow yoda comparisons
44947
46042
  * @author Nicholas C. Zakas
@@ -45185,7 +46280,7 @@ module.exports.schema = [
45185
46280
  }
45186
46281
  ];
45187
46282
 
45188
- },{}],362:[function(require,module,exports){
46283
+ },{}],367:[function(require,module,exports){
45189
46284
  (function (process){
45190
46285
  /**
45191
46286
  * @fileoverview Tracks performance of individual rules.
@@ -45327,7 +46422,7 @@ module.exports = (function() {
45327
46422
  }());
45328
46423
 
45329
46424
  }).call(this,require('_process'))
45330
- },{"_process":8}],363:[function(require,module,exports){
46425
+ },{"_process":8}],368:[function(require,module,exports){
45331
46426
  /**
45332
46427
  * @fileoverview Object to handle access and retrieval of tokens.
45333
46428
  * @author Brandon Mills
@@ -45530,7 +46625,7 @@ module.exports = function(tokens) {
45530
46625
  return api;
45531
46626
  };
45532
46627
 
45533
- },{}],364:[function(require,module,exports){
46628
+ },{}],369:[function(require,module,exports){
45534
46629
  /**
45535
46630
  * @fileoverview Common utilities.
45536
46631
  */
@@ -45592,7 +46687,7 @@ module.exports = {
45592
46687
  getLast: getLast
45593
46688
  };
45594
46689
 
45595
- },{}],365:[function(require,module,exports){
46690
+ },{}],370:[function(require,module,exports){
45596
46691
  /**
45597
46692
  * @fileoverview The event generator for comments.
45598
46693
  * @author Toru Nagashima
@@ -45710,7 +46805,7 @@ CommentEventGenerator.prototype = {
45710
46805
 
45711
46806
  module.exports = CommentEventGenerator;
45712
46807
 
45713
- },{}],366:[function(require,module,exports){
46808
+ },{}],371:[function(require,module,exports){
45714
46809
  /**
45715
46810
  * @fileoverview Patch for estraverse
45716
46811
  * @author Toru Nagashima
@@ -45766,7 +46861,7 @@ installKeys(experimentalKeys);
45766
46861
 
45767
46862
  module.exports = estraverse;
45768
46863
 
45769
- },{"estraverse":136,"estraverse-fb/keys":135}],367:[function(require,module,exports){
46864
+ },{"estraverse":136,"estraverse-fb/keys":135}],372:[function(require,module,exports){
45770
46865
  /**
45771
46866
  * @fileoverview A shared list of ES3 keywords.
45772
46867
  * @author Josh Perez
@@ -45836,7 +46931,7 @@ module.exports = [
45836
46931
  "with"
45837
46932
  ];
45838
46933
 
45839
- },{}],368:[function(require,module,exports){
46934
+ },{}],373:[function(require,module,exports){
45840
46935
  /**
45841
46936
  * @fileoverview The event generator for AST nodes.
45842
46937
  * @author Toru Nagashima
@@ -45893,7 +46988,7 @@ NodeEventGenerator.prototype = {
45893
46988
 
45894
46989
  module.exports = NodeEventGenerator;
45895
46990
 
45896
- },{}],369:[function(require,module,exports){
46991
+ },{}],374:[function(require,module,exports){
45897
46992
  /**
45898
46993
  * @fileoverview An object that creates fix commands for rules.
45899
46994
  * @author Nicholas C. Zakas
@@ -46042,7 +47137,7 @@ RuleFixer.prototype = {
46042
47137
 
46043
47138
  module.exports = RuleFixer;
46044
47139
 
46045
- },{}],370:[function(require,module,exports){
47140
+ },{}],375:[function(require,module,exports){
46046
47141
  /**
46047
47142
  * @fileoverview Abstraction of JavaScript source code.
46048
47143
  * @author Nicholas C. Zakas
@@ -46261,29 +47356,28 @@ SourceCode.prototype = {
46261
47356
  */
46262
47357
  getJSDocComment: function(node) {
46263
47358
 
46264
- var parent = node.parent,
46265
- line = node.loc.start.line;
47359
+ var parent = node.parent;
46266
47360
 
46267
47361
  switch (node.type) {
46268
47362
  case "ClassDeclaration":
46269
47363
  case "FunctionDeclaration":
46270
47364
  if (looksLikeExport(parent)) {
46271
- return findJSDocComment(parent.leadingComments, line);
47365
+ return findJSDocComment(parent.leadingComments, parent.loc.start.line);
46272
47366
  }
46273
- return findJSDocComment(node.leadingComments, line);
47367
+ return findJSDocComment(node.leadingComments, node.loc.start.line);
46274
47368
 
46275
47369
  case "ClassExpression":
46276
- return findJSDocComment(parent.parent.leadingComments, line);
47370
+ return findJSDocComment(parent.parent.leadingComments, parent.parent.loc.start.line);
46277
47371
 
46278
47372
  case "ArrowFunctionExpression":
46279
47373
  case "FunctionExpression":
46280
47374
 
46281
47375
  if (parent.type !== "CallExpression" && parent.type !== "NewExpression") {
46282
- while (parent && !parent.leadingComments && !/Function/.test(parent.type)) {
47376
+ while (parent && !parent.leadingComments && !/Function/.test(parent.type) && parent.type !== "MethodDefinition") {
46283
47377
  parent = parent.parent;
46284
47378
  }
46285
47379
 
46286
- return parent && (parent.type !== "FunctionDeclaration") ? findJSDocComment(parent.leadingComments, line) : null;
47380
+ return parent && (parent.type !== "FunctionDeclaration") ? findJSDocComment(parent.leadingComments, parent.loc.start.line) : null;
46287
47381
  }
46288
47382
 
46289
47383
  // falls through
@@ -46337,5 +47431,5 @@ SourceCode.prototype = {
46337
47431
 
46338
47432
  module.exports = SourceCode;
46339
47433
 
46340
- },{"../token-store.js":363,"./estraverse":366,"object-assign":151}]},{},[162])(162)
47434
+ },{"../token-store.js":368,"./estraverse":371,"object-assign":151}]},{},[162])(162)
46341
47435
  });