eslint-plugin-sonarjs 0.3.0-2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.eslintignore +1 -0
  2. package/README.md +14 -4
  3. package/lib/index.d.ts +3 -1
  4. package/lib/index.js +6 -1
  5. package/lib/index.js.map +1 -1
  6. package/lib/rules/cognitive-complexity.js +36 -4
  7. package/lib/rules/cognitive-complexity.js.map +1 -1
  8. package/lib/rules/max-switch-cases.js.map +1 -1
  9. package/lib/rules/no-all-duplicated-branches.js.map +1 -1
  10. package/lib/rules/no-collapsible-if.d.ts +3 -0
  11. package/lib/rules/no-collapsible-if.js +58 -0
  12. package/lib/rules/no-collapsible-if.js.map +1 -0
  13. package/lib/rules/no-collection-size-mischeck.d.ts +3 -0
  14. package/lib/rules/no-collection-size-mischeck.js +62 -0
  15. package/lib/rules/no-collection-size-mischeck.js.map +1 -0
  16. package/lib/rules/no-duplicate-string.js +8 -4
  17. package/lib/rules/no-duplicate-string.js.map +1 -1
  18. package/lib/rules/no-duplicated-branches.js +47 -23
  19. package/lib/rules/no-duplicated-branches.js.map +1 -1
  20. package/lib/rules/no-element-overwrite.js.map +1 -1
  21. package/lib/rules/no-extra-arguments.js.map +1 -1
  22. package/lib/rules/no-identical-conditions.js.map +1 -1
  23. package/lib/rules/no-identical-expressions.js.map +1 -1
  24. package/lib/rules/no-identical-functions.js.map +1 -1
  25. package/lib/rules/no-inverted-boolean-check.js.map +1 -1
  26. package/lib/rules/no-one-iteration-loop.js.map +1 -1
  27. package/lib/rules/no-redundant-boolean.js.map +1 -1
  28. package/lib/rules/no-redundant-jump.d.ts +3 -0
  29. package/lib/rules/no-redundant-jump.js +65 -0
  30. package/lib/rules/no-redundant-jump.js.map +1 -0
  31. package/lib/rules/no-same-line-conditional.d.ts +3 -0
  32. package/lib/rules/no-same-line-conditional.js +78 -0
  33. package/lib/rules/no-same-line-conditional.js.map +1 -0
  34. package/lib/rules/no-small-switch.js.map +1 -1
  35. package/lib/rules/no-unused-collection.d.ts +3 -0
  36. package/lib/rules/no-unused-collection.js +173 -0
  37. package/lib/rules/no-unused-collection.js.map +1 -0
  38. package/lib/rules/no-use-of-empty-return-value.js +8 -1
  39. package/lib/rules/no-use-of-empty-return-value.js.map +1 -1
  40. package/lib/rules/no-useless-catch.js +3 -1
  41. package/lib/rules/no-useless-catch.js.map +1 -1
  42. package/lib/rules/prefer-immediate-return.js.map +1 -1
  43. package/lib/rules/prefer-object-literal.js.map +1 -1
  44. package/lib/rules/prefer-single-boolean-return.js.map +1 -1
  45. package/lib/rules/prefer-while.js.map +1 -1
  46. package/lib/utils/collections.d.ts +2 -0
  47. package/lib/utils/collections.js +40 -0
  48. package/lib/utils/collections.js.map +1 -0
  49. package/lib/utils/conditions.js.map +1 -1
  50. package/lib/utils/equivalence.js.map +1 -1
  51. package/lib/utils/locations.d.ts +1 -0
  52. package/lib/utils/locations.js +20 -0
  53. package/lib/utils/locations.js.map +1 -1
  54. package/lib/utils/nodes.js.map +1 -1
  55. package/lib/utils/parser-services.d.ts +5 -0
  56. package/lib/utils/parser-services.js +7 -0
  57. package/lib/utils/parser-services.js.map +1 -0
  58. package/package.json +10 -8
package/.eslintignore ADDED
@@ -0,0 +1 @@
1
+ tests/resources
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # eslint-plugin-sonarjs [![npm version](https://badge.fury.io/js/eslint-plugin-sonarjs.svg)](https://badge.fury.io/js/eslint-plugin-sonarjs) [![Build Status](https://travis-ci.org/SonarSource/eslint-plugin-sonarjs.svg?branch=master)](https://travis-ci.org/SonarSource/eslint-plugin-sonarjs) [![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=eslint-plugin-sonarjs&metric=alert_status)](https://sonarcloud.io/dashboard?id=eslint-plugin-sonarjs) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=eslint-plugin-sonarjs&metric=coverage)](https://sonarcloud.io/dashboard?id=eslint-plugin-sonarjs)
2
2
 
3
- SonarJS rules for ESLint detecting bugs and suspicious patterns in your code.
3
+ SonarJS rules for ESLint to detect bugs and suspicious patterns in your code.
4
4
 
5
5
  _[We also have a plugin for TSLint](https://github.com/SonarSource/SonarTS)_
6
6
 
@@ -8,7 +8,7 @@ _[We also have a plugin for TSLint](https://github.com/SonarSource/SonarTS)_
8
8
 
9
9
  ### Bug Detection :bug:
10
10
 
11
- Rules in this category aim to find places in code which have a high chance to be bugs, i.e. don't work as indented.
11
+ Rules in this category aim to find places in code which have a high chance of being bugs, i.e. don't work as intended.
12
12
 
13
13
  * All branches in a conditional structure should not have exactly the same implementation ([`no-all-duplicated-branches`])
14
14
  * Collection elements should not be replaced unconditionally ([`no-element-overwrite`])
@@ -24,12 +24,17 @@ Code Smells, or maintainability issues, are raised for places of code which migh
24
24
 
25
25
  * Cognitive Complexity of functions should not be too high ([`cognitive-complexity`])
26
26
  * "switch" statements should not have too many "case" clauses ([`max-switch-cases`])
27
+ * Collapsible "if" statements should be merged ([`no-collapsible-if`])
28
+ * Collection sizes and array length comparisons should make sense ([`no-collection-size-mischeck`])
27
29
  * String literals should not be duplicated ([`no-duplicate-string`])
28
30
  * Two branches in a conditional structure should not have exactly the same implementation ([`no-duplicated-branches`])
29
31
  * Functions should not have identical implementations ([`no-identical-functions`])
30
32
  * Boolean checks should not be inverted ([`no-inverted-boolean-check`])
31
33
  * Boolean literals should not be redundant ([`no-redundant-boolean`])
34
+ * Jump statements should not be redundant ([`no-redundant-jump`])
35
+ * Conditionals should start on new lines ([`no-same-line-conditional`])
32
36
  * "switch" statements should have at least 3 "case" clauses ([`no-small-switch`])
37
+ * Collection and array contents should be used ([`no-unused-collection`])
33
38
  * "catch" clauses should do more than rethrow ([`no-useless-catch`])
34
39
  * Local variables should not be declared and then immediately returned or thrown ([`prefer-immediate-return`]) (:wrench: *fixable*)
35
40
  * Object literal syntax should be used ([`prefer-object-literal`])
@@ -39,6 +44,8 @@ Code Smells, or maintainability issues, are raised for places of code which migh
39
44
  [`cognitive-complexity`]: ./docs/rules/cognitive-complexity.md
40
45
  [`max-switch-cases`]: ./docs/rules/max-switch-cases.md
41
46
  [`no-all-duplicated-branches`]: ./docs/rules/no-all-duplicated-branches.md
47
+ [`no-collapsible-if`]: ./docs/rules/no-collapsible-if.md
48
+ [`no-collection-size-mischeck`]: ./docs/rules/no-collection-size-mischeck.md
42
49
  [`no-duplicate-string`]: ./docs/rules/no-duplicate-string.md
43
50
  [`no-duplicated-branches`]: ./docs/rules/no-duplicated-branches.md
44
51
  [`no-element-overwrite`]: ./docs/rules/no-element-overwrite.md
@@ -49,8 +56,11 @@ Code Smells, or maintainability issues, are raised for places of code which migh
49
56
  [`no-inverted-boolean-check`]: ./docs/rules/no-inverted-boolean-check.md
50
57
  [`no-one-iteration-loop`]: ./docs/rules/no-one-iteration-loop.md
51
58
  [`no-redundant-boolean`]: ./docs/rules/no-redundant-boolean.md
59
+ [`no-redundant-jump`]: ./docs/rules/no-redundant-jump.md
60
+ [`no-same-line-conditional`]: ./docs/rules/no-same-line-conditional.md
52
61
  [`no-small-switch`]: ./docs/rules/no-small-switch.md
53
62
  [`no-use-of-empty-return-value`]: ./docs/rules/no-use-of-empty-return-value.md
63
+ [`no-unused-collection`]: ./docs/rules/no-unused-collection.md
54
64
  [`no-useless-catch`]: ./docs/rules/no-useless-catch.md
55
65
  [`prefer-immediate-return`]: ./docs/rules/prefer-immediate-return.md
56
66
  [`prefer-object-literal`]: ./docs/rules/prefer-object-literal.md
@@ -63,7 +73,7 @@ Node.js (>=6.x).
63
73
 
64
74
  ## Usage
65
75
 
66
- * If you don't have ESLint yet configured for your project follow [these instructions](https://github.com/eslint/eslint#installation-and-usage).
76
+ * If you don't have ESLint yet configured for your project, follow [these instructions](https://github.com/eslint/eslint#installation-and-usage).
67
77
  * Install `eslint-plugin-sonarjs` using `npm` (or `yarn`) for you project or globally:
68
78
 
69
79
  ```sh
@@ -101,4 +111,4 @@ npm install eslint-plugin-sonarjs -g # or install globally
101
111
 
102
112
  ## Contributing
103
113
 
104
- You want to participate to the development of the project? Have a look at our [contributing](./docs/CONTRIBUTING.md) guide!
114
+ You want to participate in the development of the project? Have a look at our [contributing](./docs/CONTRIBUTING.md) guide!
package/lib/index.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { Linter } from "eslint";
2
2
  declare const sonarjsRuleModules: any;
3
3
  declare const configs: {
4
- recommended: Linter.Config;
4
+ recommended: Linter.Config & {
5
+ plugins: string[];
6
+ };
5
7
  };
6
8
  export { sonarjsRuleModules as rules, configs };
package/lib/index.js CHANGED
@@ -4,6 +4,8 @@ var sonarjsRules = [
4
4
  ["cognitive-complexity", "error"],
5
5
  ["max-switch-cases", "error"],
6
6
  ["no-all-duplicated-branches", "error"],
7
+ ["no-collapsible-if", "error"],
8
+ ["no-collection-size-mischeck", "error"],
7
9
  ["no-duplicate-string", "error"],
8
10
  ["no-duplicated-branches", "error"],
9
11
  ["no-element-overwrite", "error"],
@@ -14,7 +16,10 @@ var sonarjsRules = [
14
16
  ["no-inverted-boolean-check", "error"],
15
17
  ["no-one-iteration-loop", "error"],
16
18
  ["no-redundant-boolean", "error"],
19
+ ["no-redundant-jump", "error"],
20
+ ["no-same-line-conditional", "error"],
17
21
  ["no-small-switch", "error"],
22
+ ["no-unused-collection", "error"],
18
23
  ["no-use-of-empty-return-value", "error"],
19
24
  ["no-useless-catch", "error"],
20
25
  ["prefer-immediate-return", "error"],
@@ -25,7 +30,7 @@ var sonarjsRules = [
25
30
  var sonarjsRuleModules = {};
26
31
  exports.rules = sonarjsRuleModules;
27
32
  var configs = {
28
- recommended: { rules: {} },
33
+ recommended: { plugins: ["sonarjs"], rules: {} },
29
34
  };
30
35
  exports.configs = configs;
31
36
  sonarjsRules.forEach(function (rule) { return (sonarjsRuleModules[rule[0]] = require("./rules/" + rule[0])); });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAqBA,IAAM,YAAY,GAAiC;IACjD,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,4BAA4B,EAAE,OAAO,CAAC;IACvC,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAChC,CAAC,wBAAwB,EAAE,OAAO,CAAC;IACnC,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC/B,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACpC,CAAC,wBAAwB,EAAE,OAAO,CAAC;IACnC,CAAC,0BAA0B,EAAE,OAAO,CAAC;IACrC,CAAC,2BAA2B,EAAE,OAAO,CAAC;IACtC,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAClC,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,8BAA8B,EAAE,OAAO,CAAC;IACzC,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACpC,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAClC,CAAC,8BAA8B,EAAE,OAAO,CAAC;IACzC,CAAC,cAAc,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,IAAM,kBAAkB,GAAQ,EAAE,CAAC;AASJ,mCAAK;AAPpC,IAAM,OAAO,GAAmC;IAC9C,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;CAC3B,CAAC;AAKoC,0BAAO;AAH7C,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAW,IAAI,CAAC,CAAC,CAAG,CAAC,CAAC,EAA7D,CAA6D,CAAC,CAAC;AAC5F,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,OAAO,CAAC,WAAW,CAAC,KAAM,CAAC,aAAW,IAAI,CAAC,CAAC,CAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAA5D,CAA4D,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAqBA,IAAM,YAAY,GAAiC;IACjD,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,4BAA4B,EAAE,OAAO,CAAC;IACvC,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC9B,CAAC,6BAA6B,EAAE,OAAO,CAAC;IACxC,CAAC,qBAAqB,EAAE,OAAO,CAAC;IAChC,CAAC,wBAAwB,EAAE,OAAO,CAAC;IACnC,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC/B,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACpC,CAAC,wBAAwB,EAAE,OAAO,CAAC;IACnC,CAAC,0BAA0B,EAAE,OAAO,CAAC;IACrC,CAAC,2BAA2B,EAAE,OAAO,CAAC;IACtC,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAClC,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,mBAAmB,EAAE,OAAO,CAAC;IAC9B,CAAC,0BAA0B,EAAE,OAAO,CAAC;IACrC,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC5B,CAAC,sBAAsB,EAAE,OAAO,CAAC;IACjC,CAAC,8BAA8B,EAAE,OAAO,CAAC;IACzC,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAC7B,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACpC,CAAC,uBAAuB,EAAE,OAAO,CAAC;IAClC,CAAC,8BAA8B,EAAE,OAAO,CAAC;IACzC,CAAC,cAAc,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,IAAM,kBAAkB,GAAQ,EAAE,CAAC;AASJ,mCAAK;AAPpC,IAAM,OAAO,GAA2D;IACtE,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;CACjD,CAAC;AAKoC,0BAAO;AAH7C,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,aAAW,IAAI,CAAC,CAAC,CAAG,CAAC,CAAC,EAA7D,CAA6D,CAAC,CAAC;AAC5F,YAAY,CAAC,OAAO,CAAC,UAAA,IAAI,IAAI,OAAA,CAAC,OAAO,CAAC,WAAW,CAAC,KAAM,CAAC,aAAW,IAAI,CAAC,CAAC,CAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAA5D,CAA4D,CAAC,CAAC"}
@@ -19,6 +19,13 @@
19
19
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
20
  */
21
21
  // https://jira.sonarsource.com/browse/RSPEC-3776
22
+ var __spreadArrays = (this && this.__spreadArrays) || function () {
23
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
24
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
25
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
26
+ r[k] = a[j];
27
+ return r;
28
+ };
22
29
  var nodes_1 = require("../utils/nodes");
23
30
  var locations_1 = require("../utils/locations");
24
31
  var DEFAULT_THRESHOLD = 15;
@@ -28,12 +35,15 @@ var rule = {
28
35
  { type: "integer", minimum: 0 },
29
36
  {
30
37
  // internal parameter
31
- enum: ["sonar-runtime"],
38
+ enum: ["sonar-runtime", "metric"],
32
39
  },
33
40
  ],
34
41
  },
35
42
  create: function (context) {
36
43
  var threshold = context.options[0] !== undefined ? context.options[0] : DEFAULT_THRESHOLD;
44
+ var isFileComplexity = context.options.includes("metric");
45
+ /** Complexity of the file */
46
+ var fileComplexity = 0;
37
47
  /** Complexity of the current function if it is *not* considered nested to the first level function */
38
48
  var complexityIfNotNested = [];
39
49
  /** Complexity of the current function if it is considered nested to the first level function */
@@ -69,6 +79,16 @@ var rule = {
69
79
  nestingNodes.delete(node);
70
80
  }
71
81
  },
82
+ Program: function () {
83
+ fileComplexity = 0;
84
+ },
85
+ "Program:exit": function (node) {
86
+ if (isFileComplexity) {
87
+ // as issues are the only communication channel of a rule
88
+ // we pass data as serialized json as an issue message
89
+ context.report({ node: node, message: fileComplexity.toString() });
90
+ }
91
+ },
72
92
  IfStatement: function (node) {
73
93
  visitIfStatement(node);
74
94
  },
@@ -221,14 +241,18 @@ var rule = {
221
241
  function flattenLogicalExpression(node) {
222
242
  if (nodes_1.isLogicalExpression(node)) {
223
243
  consideredLogicalExpressions.add(node);
224
- return flattenLogicalExpression(node.left).concat([node], flattenLogicalExpression(node.right));
244
+ return __spreadArrays(flattenLogicalExpression(node.left), [node], flattenLogicalExpression(node.right));
225
245
  }
226
246
  return [];
227
247
  }
228
248
  function addStructuralComplexity(location) {
229
249
  var added = nesting + 1;
230
250
  var complexityPoint = { complexity: added, location: location };
231
- if (enclosingFunctions.length === 1) {
251
+ if (enclosingFunctions.length === 0) {
252
+ // top level scope
253
+ fileComplexity += added;
254
+ }
255
+ else if (enclosingFunctions.length === 1) {
232
256
  // top level function
233
257
  topLevelHasStructuralComplexity = true;
234
258
  topLevelOwnComplexity.push(complexityPoint);
@@ -241,7 +265,11 @@ var rule = {
241
265
  }
242
266
  function addComplexity(location) {
243
267
  var complexityPoint = { complexity: 1, location: location };
244
- if (enclosingFunctions.length === 1) {
268
+ if (enclosingFunctions.length === 0) {
269
+ // top level scope
270
+ fileComplexity += 1;
271
+ }
272
+ else if (enclosingFunctions.length === 1) {
245
273
  // top level function
246
274
  topLevelOwnComplexity.push(complexityPoint);
247
275
  }
@@ -254,6 +282,10 @@ var rule = {
254
282
  function checkFunction(complexity, loc) {
255
283
  if (complexity === void 0) { complexity = []; }
256
284
  var complexityAmount = complexity.reduce(function (acc, cur) { return acc + cur.complexity; }, 0);
285
+ fileComplexity += complexityAmount;
286
+ if (isFileComplexity) {
287
+ return;
288
+ }
257
289
  if (complexityAmount > threshold) {
258
290
  var secondaryLocations = complexity.map(function (complexityPoint) {
259
291
  var complexity = complexityPoint.complexity, location = complexityPoint.location;
@@ -1 +1 @@
1
- {"version":3,"file":"cognitive-complexity.js","sourceRoot":"","sources":["../../src/rules/cognitive-complexity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cognitive-complexity.js","sourceRoot":"","sources":["../../src/rules/cognitive-complexity.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"max-switch-cases.js","sourceRoot":"","sources":["../../src/rules/max-switch-cases.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAKjD,IAAM,OAAO,GAAG,oGAAoG,CAAC;AAErH,IAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,IAAI,cAAc,GAAG,wBAAwB,CAAC;AAE9C,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,CAAC;aACX;SACF;KACF;IACD,MAAM,YAAC,OAAyB;QAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACrC;QACD,OAAO,EAAE,eAAe,EAAE,UAAC,IAAU,IAAK,OAAA,oBAAoB,CAAC,IAAuB,EAAE,OAAO,CAAC,EAAtD,CAAsD,EAAE,CAAC;IACrG,CAAC;CACF,CAAC;AAEF,8BAA8B,eAAgC,EAAE,OAAyB;IACvF,IAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAChD,UAAA,UAAU,IAAI,OAAA,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAA9D,CAA8D,CAC7E,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,GAAG,cAAc,EAAE;QACzC,IAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC;YACb,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,aAAc,CAAC,GAAG;YACvB,IAAI,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,EAAE,EAAE;SACzF,CAAC,CAAC;KACJ;AACH,CAAC;AAED,uBAAuB,UAAsB;IAC3C,OAAO,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC;AAClC,CAAC;AAED,iBAAS,IAAI,CAAC"}
1
+ {"version":3,"file":"max-switch-cases.js","sourceRoot":"","sources":["../../src/rules/max-switch-cases.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAKjD,IAAM,OAAO,GAAG,oGAAoG,CAAC;AAErH,IAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,IAAI,cAAc,GAAG,wBAAwB,CAAC;AAE9C,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,CAAC;aACX;SACF;KACF;IACD,MAAM,EAAN,UAAO,OAAyB;QAC9B,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACrC;QACD,OAAO,EAAE,eAAe,EAAE,UAAC,IAAU,IAAK,OAAA,oBAAoB,CAAC,IAAuB,EAAE,OAAO,CAAC,EAAtD,CAAsD,EAAE,CAAC;IACrG,CAAC;CACF,CAAC;AAEF,SAAS,oBAAoB,CAAC,eAAgC,EAAE,OAAyB;IACvF,IAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAChD,UAAA,UAAU,IAAI,OAAA,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAA9D,CAA8D,CAC7E,CAAC;IACF,IAAI,aAAa,CAAC,MAAM,GAAG,cAAc,EAAE;QACzC,IAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAC7E,OAAO,CAAC,MAAM,CAAC;YACb,OAAO,EAAE,OAAO;YAChB,GAAG,EAAE,aAAc,CAAC,GAAG;YACvB,IAAI,EAAE,EAAE,cAAc,EAAE,aAAa,CAAC,MAAM,GAAG,EAAE,EAAE,cAAc,EAAE,cAAc,GAAG,EAAE,EAAE;SACzF,CAAC,CAAC;KACJ;AACH,CAAC;AAED,SAAS,aAAa,CAAC,UAAsB;IAC3C,OAAO,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC;AAClC,CAAC;AAED,iBAAS,IAAI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"no-all-duplicated-branches.js","sourceRoot":"","sources":["../../src/rules/no-all-duplicated-branches.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAA0D;AAC1D,oDAAqD;AACrD,kDAA+E;AAE/E,IAAM,OAAO,GAAG,6FAA6F,CAAC;AAC9G,IAAM,8BAA8B,GAClC,+FAA+F,CAAC;AAElG,IAAM,IAAI,GAAoB;IAC5B,MAAM,YAAC,OAAyB;QAC9B,OAAO;YACL,WAAW,YAAC,IAAiB;gBAC3B,IAAM,MAAM,GAAG,IAA0B,CAAC;gBAE1C,mCAAmC;gBACnC,IAAM,MAAM,GAAG,iBAAS,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,qBAAa,CAAC,MAAM,CAAC,EAAE;oBACpB,IAAA,2CAAsD,EAApD,sBAAQ,EAAE,8BAAY,CAA+B;oBAC7D,IAAI,YAAY,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;wBAC3C,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;qBACpD;iBACF;YACH,CAAC;YAED,eAAe,YAAC,IAAiB;gBAC/B,IAAM,UAAU,GAAG,IAA8B,CAAC;gBAC5C,IAAA,mDAAiE,EAA/D,sBAAQ,EAAE,oCAAe,CAAuC;gBACxE,IAAI,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;oBAC9C,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;iBACxD;YACH,CAAC;YAED,qBAAqB,YAAC,IAAiB;gBACrC,IAAM,WAAW,GAAG,IAAoC,CAAC;gBACzD,IAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;gBACjE,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;oBAC3B,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;iBAChF;YACH,CAAC;SACF,CAAC;QAEF,uBAAuB,QAA4C;YACjE,OAAO,CACL,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,MAAM,EAAE,KAAK;oBACpC,OAAO,2BAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBACzE,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
1
+ {"version":3,"file":"no-all-duplicated-branches.js","sourceRoot":"","sources":["../../src/rules/no-all-duplicated-branches.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAA0D;AAC1D,oDAAqD;AACrD,kDAA+E;AAE/E,IAAM,OAAO,GAAG,6FAA6F,CAAC;AAC9G,IAAM,8BAA8B,GAClC,+FAA+F,CAAC;AAElG,IAAM,IAAI,GAAoB;IAC5B,MAAM,EAAN,UAAO,OAAyB;QAC9B,OAAO;YACL,WAAW,EAAX,UAAY,IAAiB;gBAC3B,IAAM,MAAM,GAAG,IAA0B,CAAC;gBAE1C,mCAAmC;gBACnC,IAAM,MAAM,GAAG,iBAAS,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,qBAAa,CAAC,MAAM,CAAC,EAAE;oBACpB,IAAA,2CAAsD,EAApD,sBAAQ,EAAE,8BAA0C,CAAC;oBAC7D,IAAI,YAAY,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;wBAC3C,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;qBACpD;iBACF;YACH,CAAC;YAED,eAAe,EAAf,UAAgB,IAAiB;gBAC/B,IAAM,UAAU,GAAG,IAA8B,CAAC;gBAC5C,IAAA,mDAAiE,EAA/D,sBAAQ,EAAE,oCAAqD,CAAC;gBACxE,IAAI,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;oBAC9C,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;iBACxD;YACH,CAAC;YAED,qBAAqB,EAArB,UAAsB,IAAiB;gBACrC,IAAM,WAAW,GAAG,IAAoC,CAAC;gBACzD,IAAM,QAAQ,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;gBACjE,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE;oBAC3B,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;iBAChF;YACH,CAAC;SACF,CAAC;QAEF,SAAS,aAAa,CAAC,QAA4C;YACjE,OAAO,CACL,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,MAAM,EAAE,KAAK;oBACpC,OAAO,2BAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBACzE,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Rule } from "eslint";
2
+ declare const rule: Rule.RuleModule;
3
+ export = rule;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /*
3
+ * eslint-plugin-sonarjs
4
+ * Copyright (C) 2018 SonarSource SA
5
+ * mailto:info AT sonarsource DOT com
6
+ *
7
+ * This program is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 3 of the License, or (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this program; if not, write to the Free Software Foundation,
19
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ */
21
+ // https://jira.sonarsource.com/browse/RSPEC-1066
22
+ var nodes_1 = require("../utils/nodes");
23
+ var locations_1 = require("../utils/locations");
24
+ var rule = {
25
+ meta: {
26
+ schema: [
27
+ {
28
+ // internal parameter
29
+ enum: ["sonar-runtime"],
30
+ },
31
+ ],
32
+ },
33
+ create: function (context) {
34
+ return {
35
+ IfStatement: function (node) {
36
+ var consequent = node.consequent;
37
+ if (nodes_1.isBlockStatement(consequent) && consequent.body.length === 1) {
38
+ consequent = consequent.body[0];
39
+ }
40
+ if (isIfStatementWithoutElse(node) && isIfStatementWithoutElse(consequent)) {
41
+ var ifKeyword = context.getSourceCode().getFirstToken(consequent);
42
+ var enclosingIfKeyword = context.getSourceCode().getFirstToken(node);
43
+ if (ifKeyword && enclosingIfKeyword) {
44
+ locations_1.report(context, {
45
+ message: "Merge this if statement with the nested one.",
46
+ loc: enclosingIfKeyword.loc,
47
+ }, [locations_1.issueLocation(ifKeyword.loc, ifKeyword.loc, "Nested \"if\" statement.")]);
48
+ }
49
+ }
50
+ },
51
+ };
52
+ function isIfStatementWithoutElse(node) {
53
+ return nodes_1.isIfStatement(node) && !node.alternate;
54
+ }
55
+ },
56
+ };
57
+ module.exports = rule;
58
+ //# sourceMappingURL=no-collapsible-if.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-collapsible-if.js","sourceRoot":"","sources":["../../src/rules/no-collapsible-if.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAAiE;AACjE,gDAA2D;AAE3D,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE;YACN;gBACE,qBAAqB;gBACrB,IAAI,EAAE,CAAC,eAAe,CAAC;aACxB;SACF;KACF;IACD,MAAM,EAAN,UAAO,OAAyB;QAC9B,OAAO;YACL,WAAW,EAAX,UAAY,IAAiB;gBACrB,IAAA,4BAAU,CAAgC;gBAChD,IAAI,wBAAgB,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;oBAChE,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjC;gBACD,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,UAAU,CAAC,EAAE;oBAC1E,IAAM,SAAS,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBACpE,IAAM,kBAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBACvE,IAAI,SAAS,IAAI,kBAAkB,EAAE;wBACnC,kBAAM,CACJ,OAAO,EACP;4BACE,OAAO,EAAE,8CAA8C;4BACvD,GAAG,EAAE,kBAAkB,CAAC,GAAG;yBAC5B,EACD,CAAC,yBAAa,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,0BAAwB,CAAC,CAAC,CACxE,CAAC;qBACH;iBACF;YACH,CAAC;SACF,CAAC;QAEF,SAAS,wBAAwB,CAAC,IAAiB;YACjD,OAAO,qBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAChD,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Rule } from "eslint";
2
+ declare const rule: Rule.RuleModule;
3
+ export = rule;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ /*
3
+ * eslint-plugin-sonarjs
4
+ * Copyright (C) 2018 SonarSource SA
5
+ * mailto:info AT sonarsource DOT com
6
+ *
7
+ * This program is free software; you can redistribute it and/or
8
+ * modify it under the terms of the GNU Lesser General Public
9
+ * License as published by the Free Software Foundation; either
10
+ * version 3 of the License, or (at your option) any later version.
11
+ *
12
+ * This program is distributed in the hope that it will be useful,
13
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
+ * Lesser General Public License for more details.
16
+ *
17
+ * You should have received a copy of the GNU Lesser General Public License
18
+ * along with this program; if not, write to the Free Software Foundation,
19
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ */
21
+ // https://jira.sonarsource.com/browse/RSPEC-3981
22
+ var parser_services_1 = require("../utils/parser-services");
23
+ var CollectionLike = ["Array", "Map", "Set", "WeakMap", "WeakSet"];
24
+ var CollectionSizeLike = ["length", "size"];
25
+ var rule = {
26
+ create: function (context) {
27
+ var services = context.parserServices;
28
+ var isTypeCheckerAvailable = parser_services_1.isRequiredParserServices(services);
29
+ return {
30
+ BinaryExpression: function (node) {
31
+ var expr = node;
32
+ if (["<", ">="].includes(expr.operator)) {
33
+ var lhs = expr.left;
34
+ var rhs = expr.right;
35
+ if (isZeroLiteral(rhs) && lhs.type === "MemberExpression") {
36
+ var object = lhs.object, property = lhs.property;
37
+ if (property.type === "Identifier" &&
38
+ CollectionSizeLike.includes(property.name) &&
39
+ (!isTypeCheckerAvailable || isCollection(object, services))) {
40
+ context.report({
41
+ message: "Fix this expression; " + property.name + " of \"" + context
42
+ .getSourceCode()
43
+ .getText(object) + "\" is always greater or equal to zero.",
44
+ node: node,
45
+ });
46
+ }
47
+ }
48
+ }
49
+ },
50
+ };
51
+ },
52
+ };
53
+ function isZeroLiteral(node) {
54
+ return node.type === "Literal" && node.value === 0;
55
+ }
56
+ function isCollection(node, services) {
57
+ var checker = services.program.getTypeChecker();
58
+ var tp = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
59
+ return !!tp.symbol && CollectionLike.includes(tp.symbol.name);
60
+ }
61
+ module.exports = rule;
62
+ //# sourceMappingURL=no-collection-size-mischeck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-collection-size-mischeck.js","sourceRoot":"","sources":["../../src/rules/no-collection-size-mischeck.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAKjD,4DAA4F;AAE5F,IAAM,cAAc,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACrE,IAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE9C,IAAM,IAAI,GAAoB;IAC5B,MAAM,EAAN,UAAO,OAAyB;QAC9B,IAAM,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;QACxC,IAAM,sBAAsB,GAAG,0CAAwB,CAAC,QAAQ,CAAC,CAAC;QAClE,OAAO;YACL,gBAAgB,EAAE,UAAC,IAAiB;gBAClC,IAAM,IAAI,GAAG,IAA+B,CAAC;gBAC7C,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oBACvC,IAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;oBACtB,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;oBACvB,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,kBAAkB,EAAE;wBACjD,IAAA,mBAAM,EAAE,uBAAQ,CAAS;wBACjC,IACE,QAAQ,CAAC,IAAI,KAAK,YAAY;4BAC9B,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;4BAC1C,CAAC,CAAC,sBAAsB,IAAI,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAC3D;4BACA,OAAO,CAAC,MAAM,CAAC;gCACb,OAAO,EAAE,0BAAwB,QAAQ,CAAC,IAAI,cAAQ,OAAO;qCAC1D,aAAa,EAAE;qCACf,OAAO,CAAC,MAAM,CAAC,2CAAuC;gCACzD,IAAI,MAAA;6BACL,CAAC,CAAC;yBACJ;qBACF;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,aAAa,CAAC,IAAiB;IACtC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,IAAiB,EAAE,QAAgC;IACvE,IAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IAClD,IAAM,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAqB,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,iBAAS,IAAI,CAAC"}
@@ -36,9 +36,10 @@ var rule = {
36
36
  return {
37
37
  Literal: function (node) {
38
38
  var literal = node;
39
- if (typeof literal.value === "string") {
39
+ var parent = nodes_1.getParent(context);
40
+ if (typeof literal.value === "string" && (parent && parent.type !== "ExpressionStatement")) {
40
41
  var stringContent = literal.value.trim();
41
- if (!isExcludedByUsageContext(context) &&
42
+ if (!isExcludedByUsageContext(context, literal) &&
42
43
  stringContent.length >= MIN_LENGTH &&
43
44
  !stringContent.match(NO_SEPARATOR_REGEXP)) {
44
45
  var sameStringLiterals = literalsByValue.get(stringContent) || [];
@@ -61,13 +62,16 @@ var rule = {
61
62
  };
62
63
  },
63
64
  };
64
- function isExcludedByUsageContext(context) {
65
+ function isExcludedByUsageContext(context, literal) {
65
66
  var parent = nodes_1.getParent(context);
66
67
  var parentType = parent.type;
67
- return EXCLUDED_CONTEXTS.includes(parentType) || isRequireContext(parent, context);
68
+ return (EXCLUDED_CONTEXTS.includes(parentType) || isRequireContext(parent, context) || isObjectPropertyKey(parent, literal));
68
69
  }
69
70
  function isRequireContext(parent, context) {
70
71
  return parent.type === "CallExpression" && context.getSourceCode().getText(parent.callee) === "require";
71
72
  }
73
+ function isObjectPropertyKey(parent, literal) {
74
+ return parent.type === "Property" && parent.key === literal;
75
+ }
72
76
  module.exports = rule;
73
77
  //# sourceMappingURL=no-duplicate-string.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"no-duplicate-string.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-string.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAA2C;AAE3C,mEAAmE;AACnE,IAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,IAAM,UAAU,GAAG,EAAE,CAAC;AACtB,IAAM,mBAAmB,GAAG,OAAO,CAAC;AACpC,IAAM,iBAAiB,GAAG,CAAC,mBAAmB,EAAE,cAAc,EAAE,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;AAClH,IAAM,OAAO,GAAG,wEAAwE,CAAC;AAEzF,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;KAC1C;IAED,MAAM,YAAC,OAAyB;QAC9B,IAAM,eAAe,GAAiC,IAAI,GAAG,EAAE,CAAC;QAChE,IAAM,SAAS,GAAW,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAEpG,OAAO;YACL,OAAO,EAAE,UAAC,IAAU;gBAClB,IAAM,OAAO,GAAG,IAAqB,CAAC;gBACtC,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;oBACrC,IAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBAE3C,IACE,CAAC,wBAAwB,CAAC,OAAO,CAAC;wBAClC,aAAa,CAAC,MAAM,IAAI,UAAU;wBAClC,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC,EACzC;wBACA,IAAM,kBAAkB,GAAG,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;wBACpE,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACjC,eAAe,CAAC,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;qBACxD;iBACF;YACH,CAAC;YAED,cAAc;gBACZ,eAAe,CAAC,OAAO,CAAC,UAAA,QAAQ;oBAC9B,IAAI,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE;wBAChC,OAAO,CAAC,MAAM,CAAC;4BACb,OAAO,EAAE,OAAO;4BAChB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;4BACjB,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE;yBACtC,CAAC,CAAC;qBACJ;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,kCAAkC,OAAyB;IACzD,IAAM,MAAM,GAAG,iBAAS,CAAC,OAAO,CAAE,CAAC;IACnC,IAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;IAE/B,OAAO,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrF,CAAC;AAED,0BAA0B,MAAY,EAAE,OAAyB;IAC/D,OAAO,MAAM,CAAC,IAAI,KAAK,gBAAgB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AAC1G,CAAC;AAED,iBAAS,IAAI,CAAC"}
1
+ {"version":3,"file":"no-duplicate-string.js","sourceRoot":"","sources":["../../src/rules/no-duplicate-string.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,27 @@
19
19
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
20
  */
21
21
  // https://jira.sonarsource.com/browse/RSPEC-1871
22
+ var __spreadArrays = (this && this.__spreadArrays) || function () {
23
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
24
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
25
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
26
+ r[k] = a[j];
27
+ return r;
28
+ };
22
29
  var nodes_1 = require("../utils/nodes");
23
30
  var equivalence_1 = require("../utils/equivalence");
24
31
  var conditions_1 = require("../utils/conditions");
32
+ var locations_1 = require("../utils/locations");
25
33
  var MESSAGE = "This {{type}}'s code block is the same as the block for the {{type}} on line {{line}}.";
26
34
  var rule = {
35
+ meta: {
36
+ schema: [
37
+ {
38
+ // internal parameter
39
+ enum: ["sonar-runtime"],
40
+ },
41
+ ],
42
+ },
27
43
  create: function (context) {
28
44
  return {
29
45
  IfStatement: function (node) {
@@ -36,11 +52,15 @@ var rule = {
36
52
  function visitIfStatement(ifStmt) {
37
53
  var parent = nodes_1.getParent(context);
38
54
  if (!nodes_1.isIfStatement(parent)) {
39
- var branches = conditions_1.collectIfBranches(ifStmt).branches;
40
- for (var i = 1; i < branches.length; i++) {
41
- if (hasRequiredSize([branches[i]])) {
55
+ var _a = conditions_1.collectIfBranches(ifStmt), branches_1 = _a.branches, endsWithElse = _a.endsWithElse;
56
+ if (allEquivalentWithoutDefault(branches_1, endsWithElse)) {
57
+ branches_1.slice(1).forEach(function (branch, i) { return reportIssue(branch, branches_1[i], "branch"); });
58
+ return;
59
+ }
60
+ for (var i = 1; i < branches_1.length; i++) {
61
+ if (hasRequiredSize([branches_1[i]])) {
42
62
  for (var j = 0; j < i; j++) {
43
- if (compareIfBranches(branches[i], branches[j])) {
63
+ if (compareIfBranches(branches_1[i], branches_1[j])) {
44
64
  break;
45
65
  }
46
66
  }
@@ -48,22 +68,22 @@ var rule = {
48
68
  }
49
69
  }
50
70
  }
51
- function visitSwitchStatement(_a) {
52
- var cases = _a.cases;
71
+ function visitSwitchStatement(switchStmt) {
72
+ var cases = switchStmt.cases;
73
+ var endsWithDefault = conditions_1.collectSwitchBranches(switchStmt).endsWithDefault;
74
+ var nonEmptyCases = cases.filter(function (c) { return conditions_1.takeWithoutBreak(expandSingleBlockStatement(c.consequent)).length > 0; });
75
+ var casesWithoutBreak = nonEmptyCases.map(function (c) { return conditions_1.takeWithoutBreak(expandSingleBlockStatement(c.consequent)); });
76
+ if (allEquivalentWithoutDefault(casesWithoutBreak, endsWithDefault)) {
77
+ nonEmptyCases.slice(1).forEach(function (caseStmt, i) { return reportIssue(caseStmt, nonEmptyCases[i], "case"); });
78
+ return;
79
+ }
53
80
  for (var i = 1; i < cases.length; i++) {
54
81
  var firstClauseWithoutBreak = conditions_1.takeWithoutBreak(expandSingleBlockStatement(cases[i].consequent));
55
82
  if (hasRequiredSize(firstClauseWithoutBreak)) {
56
83
  for (var j = 0; j < i; j++) {
57
84
  var secondClauseWithoutBreak = conditions_1.takeWithoutBreak(expandSingleBlockStatement(cases[j].consequent));
58
85
  if (equivalence_1.areEquivalent(firstClauseWithoutBreak, secondClauseWithoutBreak, context.getSourceCode())) {
59
- context.report({
60
- message: MESSAGE,
61
- data: {
62
- type: "case",
63
- line: String(cases[j].loc.start.line),
64
- },
65
- node: cases[i],
66
- });
86
+ reportIssue(cases[i], cases[j], "case");
67
87
  break;
68
88
  }
69
89
  }
@@ -72,7 +92,7 @@ var rule = {
72
92
  }
73
93
  function hasRequiredSize(nodes) {
74
94
  if (nodes.length > 0) {
75
- var tokens = context.getSourceCode().getTokens(nodes[0]).concat(context.getSourceCode().getTokens(nodes[nodes.length - 1])).filter(function (token) { return token.value !== "{" && token.value !== "}"; });
95
+ var tokens = __spreadArrays(context.getSourceCode().getTokens(nodes[0]), context.getSourceCode().getTokens(nodes[nodes.length - 1])).filter(function (token) { return token.value !== "{" && token.value !== "}"; });
76
96
  return tokens.length > 0 && tokens[tokens.length - 1].loc.end.line > tokens[0].loc.start.line;
77
97
  }
78
98
  return false;
@@ -80,14 +100,7 @@ var rule = {
80
100
  function compareIfBranches(a, b) {
81
101
  var equivalent = equivalence_1.areEquivalent(a, b, context.getSourceCode());
82
102
  if (equivalent && b.loc) {
83
- context.report({
84
- message: MESSAGE,
85
- data: {
86
- type: "branch",
87
- line: String(b.loc.start.line),
88
- },
89
- node: a,
90
- });
103
+ reportIssue(a, b, "branch");
91
104
  }
92
105
  return equivalent;
93
106
  }
@@ -100,6 +113,17 @@ var rule = {
100
113
  }
101
114
  return nodes;
102
115
  }
116
+ function allEquivalentWithoutDefault(branches, endsWithDefault) {
117
+ return (!endsWithDefault &&
118
+ branches.length > 1 &&
119
+ branches.slice(1).every(function (branch, index) { return equivalence_1.areEquivalent(branch, branches[index], context.getSourceCode()); }));
120
+ }
121
+ function reportIssue(node, equivalentNode, type) {
122
+ var equivalentNodeLoc = equivalentNode.loc;
123
+ locations_1.report(context, { message: MESSAGE, data: { type: type, line: String(equivalentNode.loc.start.line) }, node: node }, [
124
+ locations_1.issueLocation(equivalentNodeLoc, equivalentNodeLoc, "Original"),
125
+ ]);
126
+ }
103
127
  },
104
128
  };
105
129
  module.exports = rule;
@@ -1 +1 @@
1
- {"version":3,"file":"no-duplicated-branches.js","sourceRoot":"","sources":["../../src/rules/no-duplicated-branches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-duplicated-branches.js","sourceRoot":"","sources":["../../src/rules/no-duplicated-branches.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;;;;;;;;AAIjD,wCAA4E;AAC5E,oDAAqD;AACrD,kDAAiG;AACjG,gDAA2D;AAE3D,IAAM,OAAO,GAAG,wFAAwF,CAAC;AAEzG,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE;YACN;gBACE,qBAAqB;gBACrB,IAAI,EAAE,CAAC,eAAe,CAAC;aACxB;SACF;KACF;IACD,MAAM,EAAN,UAAO,OAAyB;QAC9B,OAAO;YACL,WAAW,EAAX,UAAY,IAAiB;gBAC3B,gBAAgB,CAAC,IAA0B,CAAC,CAAC;YAC/C,CAAC;YACD,eAAe,EAAf,UAAgB,IAAiB;gBAC/B,oBAAoB,CAAC,IAA8B,CAAC,CAAC;YACvD,CAAC;SACF,CAAC;QAEF,SAAS,gBAAgB,CAAC,MAA0B;YAClD,IAAM,MAAM,GAAG,iBAAS,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,qBAAa,CAAC,MAAM,CAAC,EAAE;gBACpB,IAAA,2CAAsD,EAApD,wBAAQ,EAAE,8BAA0C,CAAC;gBAE7D,IAAI,2BAA2B,CAAC,UAAQ,EAAE,YAAY,CAAC,EAAE;oBACvD,UAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,MAAM,EAAE,CAAC,IAAK,OAAA,WAAW,CAAC,MAAM,EAAE,UAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAA1C,CAA0C,CAAC,CAAC;oBACrF,OAAO;iBACR;gBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACxC,IAAI,eAAe,CAAC,CAAC,UAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;wBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;4BAC1B,IAAI,iBAAiB,CAAC,UAAQ,CAAC,CAAC,CAAC,EAAE,UAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;gCAC/C,MAAM;6BACP;yBACF;qBACF;iBACF;aACF;QACH,CAAC;QAED,SAAS,oBAAoB,CAAC,UAAkC;YACtD,IAAA,wBAAK,CAAgB;YACrB,IAAA,gFAAe,CAAuC;YAC9D,IAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,6BAAgB,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAArE,CAAqE,CAAC,CAAC;YAC/G,IAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,6BAAgB,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAA1D,CAA0D,CAAC,CAAC;YAE7G,IAAI,2BAA2B,CAAC,iBAAiB,EAAE,eAAe,CAAC,EAAE;gBACnE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAC,QAAQ,EAAE,CAAC,IAAK,OAAA,WAAW,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAA/C,CAA+C,CAAC,CAAC;gBACjG,OAAO;aACR;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrC,IAAM,uBAAuB,GAAG,6BAAgB,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;gBAElG,IAAI,eAAe,CAAC,uBAAuB,CAAC,EAAE;oBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC1B,IAAM,wBAAwB,GAAG,6BAAgB,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;wBAEnG,IAAI,2BAAa,CAAC,uBAAuB,EAAE,wBAAwB,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE;4BAC7F,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;4BACxC,MAAM;yBACP;qBACF;iBACF;aACF;QACH,CAAC;QAED,SAAS,eAAe,CAAC,KAAyB;YAChD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBACpB,IAAM,MAAM,GAAG,eACV,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC3C,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAC7D,MAAM,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,KAAK,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,KAAK,GAAG,EAA1C,CAA0C,CAAC,CAAC;gBAC9D,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;aAC/F;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,iBAAiB,CAAC,CAAmB,EAAE,CAAmB;YACjE,IAAM,UAAU,GAAG,2BAAa,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;YAChE,IAAI,UAAU,IAAI,CAAC,CAAC,GAAG,EAAE;gBACvB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;aAC7B;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,SAAS,0BAA0B,CAAC,KAAyB;YAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,wBAAgB,CAAC,IAAI,CAAC,EAAE;oBAC1B,OAAO,IAAI,CAAC,IAAI,CAAC;iBAClB;aACF;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS,2BAA2B,CAAC,QAA4C,EAAE,eAAwB;YACzG,OAAO,CACL,CAAC,eAAe;gBAChB,QAAQ,CAAC,MAAM,GAAG,CAAC;gBACnB,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,MAAM,EAAE,KAAK,IAAK,OAAA,2BAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAA/D,CAA+D,CAAC,CAC5G,CAAC;QACJ,CAAC;QAED,SAAS,WAAW,CAAC,IAAiB,EAAE,cAA2B,EAAE,IAAY;YAC/E,IAAM,iBAAiB,GAAG,cAAc,CAAC,GAA4B,CAAC;YACtE,kBAAM,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,MAAA,EAAE,IAAI,EAAE,MAAM,CAAC,cAAc,CAAC,GAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,MAAA,EAAE,EAAE;gBACxG,yBAAa,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,UAAU,CAAC;aAChE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}