eslint-plugin-sonarjs 0.2.0 → 0.3.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.
@@ -21,24 +21,29 @@
21
21
  // https://jira.sonarsource.com/browse/RSPEC-3776
22
22
  var nodes_1 = require("../utils/nodes");
23
23
  var locations_1 = require("../utils/locations");
24
- var MESSAGE = "Refactor this function to reduce its Cognitive Complexity from {{complexity}} to the {{threshold}} allowed.";
25
24
  var DEFAULT_THRESHOLD = 15;
26
25
  var rule = {
27
26
  meta: {
28
- schema: [{ type: "integer", minimum: 0 }],
27
+ schema: [
28
+ { type: "integer", minimum: 0 },
29
+ {
30
+ // internal parameter
31
+ enum: ["sonar-runtime"],
32
+ },
33
+ ],
29
34
  },
30
35
  create: function (context) {
31
36
  var threshold = context.options[0] !== undefined ? context.options[0] : DEFAULT_THRESHOLD;
32
37
  /** Complexity of the current function if it is *not* considered nested to the first level function */
33
- var complexityIfNotNested = 0;
38
+ var complexityIfNotNested = [];
34
39
  /** Complexity of the current function if it is considered nested to the first level function */
35
- var complexityIfNested = 0;
40
+ var complexityIfNested = [];
36
41
  /** Current nesting level (number of enclosing control flow statements and functions) */
37
42
  var nesting = 0;
38
43
  /** Indicator if the current top level function has a structural (generated by control flow statements) complexity */
39
44
  var topLevelHasStructuralComplexity = false;
40
45
  /** Own (not including nested functions) complexity of the current top function */
41
- var topLevelOwnComplexity = 0;
46
+ var topLevelOwnComplexity = [];
42
47
  /** Nodes that should increase nesting level */
43
48
  var nestingNodes = new Set();
44
49
  /** Set of already considered (with already computed complexity) logical expressions */
@@ -105,13 +110,13 @@ var rule = {
105
110
  if (enclosingFunctions.length === 0) {
106
111
  // top level function
107
112
  topLevelHasStructuralComplexity = false;
108
- topLevelOwnComplexity = 0;
113
+ topLevelOwnComplexity = [];
109
114
  secondLevelFunctions = [];
110
115
  }
111
116
  else if (enclosingFunctions.length === 1) {
112
117
  // second level function
113
- complexityIfNotNested = 0;
114
- complexityIfNested = 0;
118
+ complexityIfNotNested = [];
119
+ complexityIfNested = [];
115
120
  }
116
121
  else {
117
122
  nesting++;
@@ -126,7 +131,7 @@ var rule = {
126
131
  if (topLevelHasStructuralComplexity) {
127
132
  var totalComplexity_1 = topLevelOwnComplexity;
128
133
  secondLevelFunctions.forEach(function (secondLevelFunction) {
129
- totalComplexity_1 += secondLevelFunction.complexityIfNested;
134
+ totalComplexity_1 = totalComplexity_1.concat(secondLevelFunction.complexityIfNested);
130
135
  });
131
136
  checkFunction(totalComplexity_1, locations_1.getMainFunctionTokenLocation(node, nodes_1.getParent(context), context));
132
137
  }
@@ -154,12 +159,13 @@ var rule = {
154
159
  }
155
160
  function visitIfStatement(ifStatement) {
156
161
  var parent = nodes_1.getParent(context);
162
+ var ifLoc = locations_1.getFirstToken(ifStatement, context).loc;
157
163
  // if the current `if` statement is `else if`, do not count it in structural complexity
158
164
  if (nodes_1.isIfStatement(parent) && parent.alternate === ifStatement) {
159
- addComplexity();
165
+ addComplexity(ifLoc);
160
166
  }
161
167
  else {
162
- addStructuralComplexity();
168
+ addStructuralComplexity(ifLoc);
163
169
  }
164
170
  // always increase nesting level inside `then` statement
165
171
  nestingNodes.add(ifStatement.consequent);
@@ -168,15 +174,16 @@ var rule = {
168
174
  // - add +1 complexity
169
175
  if (ifStatement.alternate && !nodes_1.isIfStatement(ifStatement.alternate)) {
170
176
  nestingNodes.add(ifStatement.alternate);
171
- addComplexity();
177
+ var elseTokenLoc = locations_1.getFirstTokenAfter(ifStatement.consequent, context).loc;
178
+ addComplexity(elseTokenLoc);
172
179
  }
173
180
  }
174
181
  function visitLoop(loop) {
175
- addStructuralComplexity();
182
+ addStructuralComplexity(locations_1.getFirstToken(loop, context).loc);
176
183
  nestingNodes.add(loop.body);
177
184
  }
178
185
  function visitSwitchStatement(switchStatement) {
179
- addStructuralComplexity();
186
+ addStructuralComplexity(locations_1.getFirstToken(switchStatement, context).loc);
180
187
  for (var _i = 0, _a = switchStatement.cases; _i < _a.length; _i++) {
181
188
  var switchCase = _a[_i];
182
189
  nestingNodes.add(switchCase);
@@ -184,15 +191,16 @@ var rule = {
184
191
  }
185
192
  function visitContinueOrBreakStatement(statement) {
186
193
  if (statement.label) {
187
- addComplexity();
194
+ addComplexity(locations_1.getFirstToken(statement, context).loc);
188
195
  }
189
196
  }
190
197
  function visitCatchClause(catchClause) {
191
- addStructuralComplexity();
198
+ addStructuralComplexity(locations_1.getFirstToken(catchClause, context).loc);
192
199
  nestingNodes.add(catchClause.body);
193
200
  }
194
201
  function visitConditionalExpression(conditionalExpression) {
195
- addStructuralComplexity();
202
+ var questionTokenLoc = locations_1.getFirstTokenAfter(conditionalExpression.test, context).loc;
203
+ addStructuralComplexity(questionTokenLoc);
196
204
  nestingNodes.add(conditionalExpression.consequent);
197
205
  nestingNodes.add(conditionalExpression.alternate);
198
206
  }
@@ -203,7 +211,8 @@ var rule = {
203
211
  for (var _i = 0, flattenedLogicalExpressions_1 = flattenedLogicalExpressions; _i < flattenedLogicalExpressions_1.length; _i++) {
204
212
  var current = flattenedLogicalExpressions_1[_i];
205
213
  if (!previous || previous.operator !== current.operator) {
206
- addComplexity();
214
+ var operatorTokenLoc = locations_1.getFirstTokenAfter(logicalExpression.left, context).loc;
215
+ addComplexity(operatorTokenLoc);
207
216
  }
208
217
  previous = current;
209
218
  }
@@ -216,37 +225,45 @@ var rule = {
216
225
  }
217
226
  return [];
218
227
  }
219
- function addStructuralComplexity() {
228
+ function addStructuralComplexity(location) {
220
229
  var added = nesting + 1;
230
+ var complexityPoint = { complexity: added, location: location };
221
231
  if (enclosingFunctions.length === 1) {
222
232
  // top level function
223
233
  topLevelHasStructuralComplexity = true;
224
- topLevelOwnComplexity += added;
234
+ topLevelOwnComplexity.push(complexityPoint);
225
235
  }
226
236
  else {
227
237
  // second+ level function
228
- complexityIfNested += added + 1;
229
- complexityIfNotNested += added;
238
+ complexityIfNested.push({ complexity: added + 1, location: location });
239
+ complexityIfNotNested.push(complexityPoint);
230
240
  }
231
241
  }
232
- function addComplexity() {
242
+ function addComplexity(location) {
243
+ var complexityPoint = { complexity: 1, location: location };
233
244
  if (enclosingFunctions.length === 1) {
234
245
  // top level function
235
- topLevelOwnComplexity++;
246
+ topLevelOwnComplexity.push(complexityPoint);
236
247
  }
237
248
  else {
238
249
  // second+ level function
239
- complexityIfNested++;
240
- complexityIfNotNested++;
250
+ complexityIfNested.push(complexityPoint);
251
+ complexityIfNotNested.push(complexityPoint);
241
252
  }
242
253
  }
243
254
  function checkFunction(complexity, loc) {
244
- if (complexity > threshold) {
245
- context.report({
246
- message: MESSAGE,
247
- data: { complexity: String(complexity), threshold: String(threshold) },
248
- loc: loc,
255
+ if (complexity === void 0) { complexity = []; }
256
+ var complexityAmount = complexity.reduce(function (acc, cur) { return acc + cur.complexity; }, 0);
257
+ if (complexityAmount > threshold) {
258
+ var secondaryLocations = complexity.map(function (complexityPoint) {
259
+ var complexity = complexityPoint.complexity, location = complexityPoint.location;
260
+ var message = complexity === 1 ? "+1" : "+" + complexity + " (incl. " + (complexity - 1) + " for nesting)";
261
+ return locations_1.issueLocation(location, undefined, message);
249
262
  });
263
+ locations_1.report(context, {
264
+ message: "Refactor this function to reduce its Cognitive Complexity from " + complexityAmount + " to the " + threshold + " allowed.",
265
+ loc: loc,
266
+ }, secondaryLocations, complexityAmount - threshold);
250
267
  }
251
268
  }
252
269
  },
@@ -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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"}
@@ -21,7 +21,19 @@
21
21
  // https://jira.sonarsource.com/browse/RSPEC-4143
22
22
  var equivalence_1 = require("../utils/equivalence");
23
23
  var nodes_1 = require("../utils/nodes");
24
+ var locations_1 = require("../utils/locations");
25
+ var message = function (index, line) {
26
+ return "Verify this is the index that was intended; \"" + index + "\" was already set on line " + line + ".";
27
+ };
24
28
  var rule = {
29
+ meta: {
30
+ schema: [
31
+ {
32
+ // internal parameter
33
+ enum: ["sonar-runtime"],
34
+ },
35
+ ],
36
+ },
25
37
  create: function (context) {
26
38
  return {
27
39
  SwitchCase: function (node) {
@@ -48,14 +60,12 @@ var rule = {
48
60
  }
49
61
  var sameKeyWriteUsage = usedKeys.get(keyWriteUsage.indexOrKey);
50
62
  if (sameKeyWriteUsage && sameKeyWriteUsage.node.loc) {
51
- context.report({
63
+ var sameKeyWriteUsageLoc = sameKeyWriteUsage.node.loc;
64
+ var secondaryLocations = [locations_1.issueLocation(sameKeyWriteUsageLoc, sameKeyWriteUsageLoc, "Original value")];
65
+ locations_1.report(context, {
52
66
  node: keyWriteUsage.node,
53
- message: 'Verify this is the index that was intended; "{{index}}" was already set on line {{line}}.',
54
- data: {
55
- index: keyWriteUsage.indexOrKey,
56
- line: String(sameKeyWriteUsage.node.loc.start.line),
57
- },
58
- });
67
+ message: message(keyWriteUsage.indexOrKey, String(sameKeyWriteUsage.node.loc.start.line)),
68
+ }, secondaryLocations);
59
69
  }
60
70
  usedKeys.set(keyWriteUsage.indexOrKey, keyWriteUsage);
61
71
  collection = keyWriteUsage.collectionNode;
@@ -1 +1 @@
1
- {"version":3,"file":"no-element-overwrite.js","sourceRoot":"","sources":["../../src/rules/no-element-overwrite.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,oDAAqD;AACrD,wCAOwB;AAExB,IAAM,IAAI,GAAoB;IAC5B,MAAM,YAAC,OAAyB;QAC9B,OAAO;YACL,UAAU,YAAC,IAAiB;gBAC1B,IAAM,UAAU,GAAG,IAAyB,CAAC;gBAC7C,eAAe,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;YAED,cAAc,YAAC,IAAiB;gBAC9B,IAAM,KAAK,GAAG,IAA6B,CAAC;gBAC5C,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YAED,OAAO,YAAC,IAAiB;gBACvB,IAAM,OAAO,GAAG,IAAsB,CAAC;gBACvC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC;SACF,CAAC;QAEF,yBAAyB,UAA8D;YACrF,IAAM,QAAQ,GAAyC,IAAI,GAAG,EAAE,CAAC;YACjE,IAAI,UAAmC,CAAC;YACxC,UAAU,CAAC,OAAO,CAAC,UAAA,SAAS;gBAC1B,IAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAClD,IAAI,aAAa,EAAE;oBACjB,IAAI,UAAU,IAAI,CAAC,2BAAa,CAAC,aAAa,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE;wBACnG,QAAQ,CAAC,KAAK,EAAE,CAAC;qBAClB;oBACD,IAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBACjE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE;wBACnD,OAAO,CAAC,MAAM,CAAC;4BACb,IAAI,EAAE,aAAa,CAAC,IAAI;4BACxB,OAAO,EAAE,2FAA2F;4BACpG,IAAI,EAAE;gCACJ,KAAK,EAAE,aAAa,CAAC,UAAU;gCAC/B,IAAI,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;6BACpD;yBACF,CAAC,CAAC;qBACJ;oBACD,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;oBACtD,UAAU,GAAG,aAAa,CAAC,cAAc,CAAC;iBAC3C;qBAAM;oBACL,QAAQ,CAAC,KAAK,EAAE,CAAC;iBAClB;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,0BAA0B,IAAiB;YACzC,IAAI,6BAAqB,CAAC,IAAI,CAAC,EAAE;gBAC/B,OAAO,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACtF;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,4BAA4B,IAAiB;YAC3C,aAAa;YACb,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,0BAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC3E,IAAA,gBAAI,EAAE,kBAAK,CAAU;gBAC7B,IAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC1C,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;oBACtD,OAAO;wBACL,cAAc,EAAE,IAAI,CAAC,MAAM;wBAC3B,UAAU,EAAE,KAAK;wBACjB,IAAI,MAAA;qBACL,CAAC;iBACH;aACF;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,+BAA+B,IAAiB;YAC9C,IAAI,wBAAgB,CAAC,IAAI,CAAC,IAAI,0BAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC7D,IAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;gBACnC,IAAI,oBAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;oBACzC,IAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAChD,IAAM,SAAS,GAAG,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;oBACtE,IAAM,SAAS,GAAG,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;oBAEtE,IAAI,SAAS,IAAI,SAAS,EAAE;wBAC1B,IAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC5C,IAAI,GAAG,EAAE;4BACP,OAAO;gCACL,cAAc,EAAE,cAAc,CAAC,MAAM;gCACrC,UAAU,EAAE,GAAG;gCACf,IAAI,MAAA;6BACL,CAAC;yBACH;qBACF;iBACF;aACF;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,sBAAsB,IAAiB;YACrC,IAAI,iBAAS,CAAC,IAAI,CAAC,EAAE;gBACX,IAAA,kBAAK,CAAU;gBACvB,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;aAC3F;iBAAM,IAAI,oBAAY,CAAC,IAAI,CAAC,EAAE;gBAC7B,OAAO,IAAI,CAAC,IAAI,CAAC;aAClB;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,gBAAgB,KAAkB,EAAE,UAA6B;YAC/D,IAAM,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7D,IAAM,gBAAgB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAEvE,IAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,UAAC,KAAK,EAAE,KAAK;gBACpD,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE;oBAC7B,KACE,IAAI,eAAe,GAAG,KAAK,EAAE,UAAU,GAAG,CAAC,EAC3C,eAAe,GAAG,gBAAgB,CAAC,MAAM,IAAI,UAAU,GAAG,WAAW,CAAC,MAAM,EAC5E,eAAe,EAAE,EAAE,UAAU,EAAE,EAC/B;wBACA,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE;4BACnE,MAAM;yBACP;6BAAM,IAAI,UAAU,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;4BAChD,OAAO,IAAI,CAAC;yBACb;qBACF;iBACF;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC;YAEH,OAAO,UAAU,KAAK,SAAS,CAAC;QAClC,CAAC;IACH,CAAC;CACF,CAAC;AAEF,YAAY,MAAiB,EAAE,MAAiB;IAC9C,OAAO,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;AACvC,CAAC;AAED,4BAA4B,IAAiB;IAC3C,OAAO,8BAAsB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,GAAG,CAAC;AAC/D,CAAC;AAQD,iBAAS,IAAI,CAAC"}
1
+ {"version":3,"file":"no-element-overwrite.js","sourceRoot":"","sources":["../../src/rules/no-element-overwrite.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,16 @@
20
20
  */
21
21
  // https://jira.sonarsource.com/browse/RSPEC-930
22
22
  var nodes_1 = require("../utils/nodes");
23
+ var locations_1 = require("../utils/locations");
23
24
  var rule = {
25
+ meta: {
26
+ schema: [
27
+ {
28
+ // internal parameter
29
+ enum: ["sonar-runtime"],
30
+ },
31
+ ],
32
+ },
24
33
  create: function (context) {
25
34
  var callExpressionsToCheck = [];
26
35
  var usingArguments = new Set();
@@ -64,7 +73,7 @@ var rule = {
64
73
  callExpressionsToCheck.forEach(function (_a) {
65
74
  var callExpr = _a.callExpr, functionNode = _a.functionNode;
66
75
  if (!usingArguments.has(functionNode) && !emptyFunctions.has(functionNode)) {
67
- report(callExpr, functionNode.params.length, callExpr.arguments.length);
76
+ reportIssue(callExpr, functionNode);
68
77
  }
69
78
  });
70
79
  },
@@ -100,17 +109,43 @@ var rule = {
100
109
  }
101
110
  }
102
111
  }
103
- function report(callExpr, expected, provided) {
112
+ function reportIssue(callExpr, functionNode) {
113
+ var paramLength = functionNode.params.length;
114
+ var argsLength = callExpr.arguments.length;
104
115
  // prettier-ignore
105
- var expectedArguments = expected === 0 ? "no arguments" :
106
- expected === 1 ? "1 argument" :
107
- expected + " arguments";
116
+ var expectedArguments = paramLength === 0 ? "no arguments" :
117
+ paramLength === 1 ? "1 argument" :
118
+ paramLength + " arguments";
108
119
  // prettier-ignore
109
- var providedArguments = provided === 0 ? "none was" :
110
- provided === 1 ? "1 was" :
111
- provided + " were";
120
+ var providedArguments = argsLength === 0 ? "none was" :
121
+ argsLength === 1 ? "1 was" :
122
+ argsLength + " were";
112
123
  var message = "This function expects " + expectedArguments + ", but " + providedArguments + " provided.";
113
- context.report({ message: message, node: callExpr });
124
+ locations_1.report(context, {
125
+ message: message,
126
+ node: callExpr,
127
+ }, getSecondaryLocations(functionNode));
128
+ }
129
+ function getSecondaryLocations(functionNode) {
130
+ var paramLength = functionNode.params.length;
131
+ var secondaryLocations = [];
132
+ if (paramLength > 0) {
133
+ var startLoc = functionNode.params[0].loc;
134
+ var endLoc = functionNode.params[paramLength - 1].loc;
135
+ // defensive check as `loc` property may be undefined according to
136
+ // its type declaration
137
+ if (startLoc && endLoc) {
138
+ secondaryLocations.push(locations_1.issueLocation(startLoc, endLoc, "Formal parameters"));
139
+ }
140
+ }
141
+ else {
142
+ // as we're not providing parent node, `getMainFunctionTokenLocation` may return `undefined`
143
+ var fnToken = locations_1.getMainFunctionTokenLocation(functionNode, undefined, context);
144
+ if (fnToken) {
145
+ secondaryLocations.push(locations_1.issueLocation(fnToken, fnToken, "Formal parameters"));
146
+ }
147
+ }
148
+ return secondaryLocations;
114
149
  }
115
150
  },
116
151
  };
@@ -1 +1 @@
1
- {"version":3,"file":"no-extra-arguments.js","sourceRoot":"","sources":["../../src/rules/no-extra-arguments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-extra-arguments.js","sourceRoot":"","sources":["../../src/rules/no-extra-arguments.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,16 @@
21
21
  // https://jira.sonarsource.com/browse/RSPEC-1862
22
22
  var nodes_1 = require("../utils/nodes");
23
23
  var equivalence_1 = require("../utils/equivalence");
24
+ var locations_1 = require("../utils/locations");
24
25
  var rule = {
26
+ meta: {
27
+ schema: [
28
+ {
29
+ // internal parameter
30
+ enum: ["sonar-runtime"],
31
+ },
32
+ ],
33
+ },
25
34
  create: function (context) {
26
35
  return {
27
36
  IfStatement: function (node) {
@@ -32,8 +41,11 @@ var rule = {
32
41
  if (nodes_1.isIfStatement(statement)) {
33
42
  if (equivalence_1.areEquivalent(condition, statement.test, context.getSourceCode())) {
34
43
  var line = ifStmt.loc && ifStmt.loc.start.line;
35
- if (line !== undefined) {
36
- context.report({ message: "This branch duplicates the one on line " + line, node: statement.test });
44
+ if (line && condition.loc) {
45
+ locations_1.report(context, {
46
+ message: "This branch duplicates the one on line " + line,
47
+ node: statement.test,
48
+ }, [locations_1.issueLocation(condition.loc, condition.loc, "Original")]);
37
49
  }
38
50
  }
39
51
  statement = statement.alternate;
@@ -1 +1 @@
1
- {"version":3,"file":"no-identical-conditions.js","sourceRoot":"","sources":["../../src/rules/no-identical-conditions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAA+C;AAC/C,oDAAqD;AAErD,IAAM,IAAI,GAAoB;IAC5B,MAAM,YAAC,OAAyB;QAC9B,OAAO;YACL,WAAW,YAAC,IAAiB;gBAC3B,IAAM,MAAM,GAAG,IAA0B,CAAC;gBAC1C,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBACjC,OAAO,SAAS,EAAE;oBAChB,IAAI,qBAAa,CAAC,SAAS,CAAC,EAAE;wBAC5B,IAAI,2BAAa,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE;4BACrE,IAAM,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;4BACjD,IAAI,IAAI,KAAK,SAAS,EAAE;gCACtB,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,4CAA0C,IAAM,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;6BACrG;yBACF;wBACD,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;qBACjC;yBAAM;wBACL,MAAM;qBACP;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
1
+ {"version":3,"file":"no-identical-conditions.js","sourceRoot":"","sources":["../../src/rules/no-identical-conditions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAA+C;AAC/C,oDAAqD;AACrD,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,YAAC,OAAyB;QAC9B,OAAO;YACL,WAAW,YAAC,IAAiB;gBAC3B,IAAM,MAAM,GAAG,IAA0B,CAAC;gBAC1C,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;gBAC9B,IAAI,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;gBACjC,OAAO,SAAS,EAAE;oBAChB,IAAI,qBAAa,CAAC,SAAS,CAAC,EAAE;wBAC5B,IAAI,2BAAa,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE;4BACrE,IAAM,IAAI,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;4BACjD,IAAI,IAAI,IAAI,SAAS,CAAC,GAAG,EAAE;gCACzB,kBAAM,CACJ,OAAO,EACP;oCACE,OAAO,EAAE,4CAA0C,IAAM;oCACzD,IAAI,EAAE,SAAS,CAAC,IAAI;iCACrB,EACD,CAAC,yBAAa,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAC1D,CAAC;6BACH;yBACF;wBACD,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;qBACjC;yBAAM;wBACL,MAAM;qBACP;iBACF;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
@@ -21,9 +21,13 @@
21
21
  // https://jira.sonarsource.com/browse/RSPEC-1764
22
22
  var nodes_1 = require("../utils/nodes");
23
23
  var equivalence_1 = require("../utils/equivalence");
24
+ var locations_1 = require("../utils/locations");
24
25
  var EQUALITY_OPERATOR_TOKEN_KINDS = new Set(["==", "===", "!=", "!=="]);
25
26
  // consider only binary expressions with these operators
26
27
  var RELEVANT_OPERATOR_TOKEN_KINDS = new Set(["&&", "||", "/", "-", "<<", ">>", "<", "<=", ">", ">="]);
28
+ var message = function (operator) {
29
+ return "Correct one of the identical sub-expressions on both sides of operator \"" + operator + "\"";
30
+ };
27
31
  function hasRelevantOperator(node) {
28
32
  return (RELEVANT_OPERATOR_TOKEN_KINDS.has(node.operator) ||
29
33
  (EQUALITY_OPERATOR_TOKEN_KINDS.has(node.operator) && !hasIdentifierOperands(node)));
@@ -35,6 +39,14 @@ function isOneOntoOneShifting(node) {
35
39
  return node.operator === "<<" && nodes_1.isLiteral(node.left) && node.left.value === 1;
36
40
  }
37
41
  var rule = {
42
+ meta: {
43
+ schema: [
44
+ {
45
+ // internal parameter
46
+ enum: ["sonar-runtime"],
47
+ },
48
+ ],
49
+ },
38
50
  create: function (context) {
39
51
  return {
40
52
  LogicalExpression: function (node) {
@@ -48,13 +60,19 @@ var rule = {
48
60
  if (hasRelevantOperator(expr) &&
49
61
  !isOneOntoOneShifting(expr) &&
50
62
  equivalence_1.areEquivalent(expr.left, expr.right, context.getSourceCode())) {
51
- context.report({
52
- message: "Correct one of the identical sub-expressions on both sides of operator \"{{operator}}\"",
53
- data: { operator: expr.operator },
54
- node: expr,
55
- });
63
+ var secondaryLocations = [];
64
+ if (expr.left.loc) {
65
+ secondaryLocations.push(locations_1.issueLocation(expr.left.loc));
66
+ }
67
+ locations_1.report(context, {
68
+ message: message(expr.operator),
69
+ node: isSonarRuntime() ? expr.right : expr,
70
+ }, secondaryLocations);
56
71
  }
57
72
  }
73
+ function isSonarRuntime() {
74
+ return context.options[context.options.length - 1] === "sonar-runtime";
75
+ }
58
76
  },
59
77
  };
60
78
  module.exports = rule;
@@ -1 +1 @@
1
- {"version":3,"file":"no-identical-expressions.js","sourceRoot":"","sources":["../../src/rules/no-identical-expressions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAAyD;AACzD,oDAAqD;AAErD,IAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1E,wDAAwD;AACxD,IAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAExG,6BAA6B,IAA0C;IACrE,OAAO,CACL,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChD,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CACnF,CAAC;AACJ,CAAC;AAED,+BAA+B,IAA0C;IACvE,OAAO,oBAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,8BAA8B,IAA0C;IACtE,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,iBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,IAAM,IAAI,GAAoB;IAC5B,MAAM,YAAC,OAAyB;QAC9B,OAAO;YACL,iBAAiB,YAAC,IAAU;gBAC1B,KAAK,CAAC,IAAyB,CAAC,CAAC;YACnC,CAAC;YACD,gBAAgB,YAAC,IAAU;gBACzB,KAAK,CAAC,IAAwB,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;QAEF,eAAe,IAA0C;YACvD,IACE,mBAAmB,CAAC,IAAI,CAAC;gBACzB,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC3B,2BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAC7D;gBACA,OAAO,CAAC,MAAM,CAAC;oBACb,OAAO,EAAE,yFAAuF;oBAChG,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;oBACjC,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;aACJ;QACH,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
1
+ {"version":3,"file":"no-identical-expressions.js","sourceRoot":"","sources":["../../src/rules/no-identical-expressions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAAyD;AACzD,oDAAqD;AACrD,gDAA0E;AAE1E,IAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAE1E,wDAAwD;AACxD,IAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAExG,IAAM,OAAO,GAAG,UAAC,QAAgB;IAC/B,OAAA,8EAA2E,QAAQ,OAAG;AAAtF,CAAsF,CAAC;AAEzF,6BAA6B,IAA0C;IACrE,OAAO,CACL,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChD,CAAC,6BAA6B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CACnF,CAAC;AACJ,CAAC;AAED,+BAA+B,IAA0C;IACvE,OAAO,oBAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED,8BAA8B,IAA0C;IACtE,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,iBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AACjF,CAAC;AAED,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE;YACN;gBACE,qBAAqB;gBACrB,IAAI,EAAE,CAAC,eAAe,CAAC;aACxB;SACF;KACF;IACD,MAAM,YAAC,OAAyB;QAC9B,OAAO;YACL,iBAAiB,YAAC,IAAU;gBAC1B,KAAK,CAAC,IAAyB,CAAC,CAAC;YACnC,CAAC;YACD,gBAAgB,YAAC,IAAU;gBACzB,KAAK,CAAC,IAAwB,CAAC,CAAC;YAClC,CAAC;SACF,CAAC;QAEF,eAAe,IAA0C;YACvD,IACE,mBAAmB,CAAC,IAAI,CAAC;gBACzB,CAAC,oBAAoB,CAAC,IAAI,CAAC;gBAC3B,2BAAa,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,EAC7D;gBACA,IAAM,kBAAkB,GAAoB,EAAE,CAAC;gBAC/C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;oBACjB,kBAAkB,CAAC,IAAI,CAAC,yBAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;iBACvD;gBACD,kBAAM,CACJ,OAAO,EACP;oBACE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC/B,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;iBAC3C,EACD,kBAAkB,CACnB,CAAC;aACH;QACH,CAAC;QAED;YACE,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,eAAe,CAAC;QACzE,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
@@ -22,8 +22,17 @@
22
22
  var equivalence_1 = require("../utils/equivalence");
23
23
  var locations_1 = require("../utils/locations");
24
24
  var nodes_1 = require("../utils/nodes");
25
- var MESSAGE = "Update this function so that its implementation is not identical to the one on line {{line}}.";
25
+ var message = function (line) {
26
+ return "Update this function so that its implementation is not identical to the one on line " + line + ".";
27
+ };
26
28
  var rule = {
29
+ meta: {
30
+ schema: [
31
+ {
32
+ enum: ["sonar-runtime"],
33
+ },
34
+ ],
35
+ },
27
36
  create: function (context) {
28
37
  var functions = [];
29
38
  return {
@@ -55,11 +64,14 @@ var rule = {
55
64
  if (equivalence_1.areEquivalent(duplicatingFunction.body, originalFunction.body, context.getSourceCode()) &&
56
65
  originalFunction.loc) {
57
66
  var loc = locations_1.getMainFunctionTokenLocation(duplicatingFunction, functions[i].parent, context);
58
- context.report({
59
- message: MESSAGE,
60
- data: { line: String(originalFunction.loc.start.line) },
67
+ var originalFunctionLoc = locations_1.getMainFunctionTokenLocation(originalFunction, functions[j].parent, context);
68
+ var secondaryLocations = [
69
+ locations_1.issueLocation(originalFunctionLoc, originalFunctionLoc, "Original implementation"),
70
+ ];
71
+ locations_1.report(context, {
72
+ message: message(String(originalFunction.loc.start.line)),
61
73
  loc: loc,
62
- });
74
+ }, secondaryLocations);
63
75
  break;
64
76
  }
65
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"no-identical-functions.js","sourceRoot":"","sources":["../../src/rules/no-identical-functions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"no-identical-functions.js","sourceRoot":"","sources":["../../src/rules/no-identical-functions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,oDAAqD;AACrD,gDAAyF;AACzF,wCAA2C;AAE3C,IAAM,OAAO,GAAG,UAAC,IAAY;IAC3B,OAAA,yFAAuF,IAAI,MAAG;AAA9F,CAA8F,CAAC;AAEjG,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,CAAC,eAAe,CAAC;aACxB;SACF;KACF;IACD,MAAM,YAAC,OAAyB;QAC9B,IAAM,SAAS,GAA0E,EAAE,CAAC;QAE5F,OAAO;YACL,mBAAmB,YAAC,IAAiB;gBACnC,aAAa,CAAC,IAAkC,CAAC,CAAC;YACpD,CAAC;YACD,kBAAkB,YAAC,IAAiB;gBAClC,aAAa,CAAC,IAAiC,CAAC,CAAC;YACnD,CAAC;YACD,uBAAuB,YAAC,IAAiB;gBACvC,aAAa,CAAC,IAAsC,CAAC,CAAC;YACxD,CAAC;YAED,cAAc;gBACZ,gBAAgB,EAAE,CAAC;YACrB,CAAC;SACF,CAAC;QAEF,uBAAuB,IAAqB;YAC1C,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAC1B,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aAChE;QACH,CAAC;QAED;YACE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO;YAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACzC,IAAM,mBAAmB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAM,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;oBAE/C,IACE,2BAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;wBACvF,gBAAgB,CAAC,GAAG,EACpB;wBACA,IAAM,GAAG,GAAG,wCAA4B,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBAC5F,IAAM,mBAAmB,GAAG,wCAA4B,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;wBACzG,IAAM,kBAAkB,GAAG;4BACzB,yBAAa,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,CAAC;yBACnF,CAAC;wBACF,kBAAM,CACJ,OAAO,EACP;4BACE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;4BACzD,GAAG,KAAA;yBACJ,EACD,kBAAkB,CACnB,CAAC;wBACF,MAAM;qBACP;iBACF;aACF;QACH,CAAC;QAED,qBAAqB,IAA0C;YAC7D,IAAM,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEvD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE;gBAChD,MAAM,CAAC,KAAK,EAAE,CAAC;aAChB;YAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE;gBAChE,MAAM,CAAC,GAAG,EAAE,CAAC;aACd;YAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,IAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC3C,IAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;gBAExD,OAAO,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC;aACjC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
@@ -40,7 +40,7 @@ var rule = {
40
40
  var lastButOne_1 = statements[statements.length - 2];
41
41
  var declaredIdentifier_1 = getOnlyDeclaredVariable(lastButOne_1);
42
42
  if (returnedIdentifier_1 && declaredIdentifier_1) {
43
- var sameVariable = context.getScope().variables.find(function (variable) {
43
+ var sameVariable = getVariables(context).find(function (variable) {
44
44
  return (variable.references.find(function (ref) { return ref.identifier === returnedIdentifier_1; }) !== undefined &&
45
45
  variable.references.find(function (ref) { return ref.identifier === declaredIdentifier_1.id; }) !== undefined);
46
46
  });
@@ -90,6 +90,15 @@ var rule = {
90
90
  var action = nodes_1.isReturnStatement(node) ? "return" : "throw";
91
91
  return "Immediately " + action + " this expression instead of assigning it to the temporary variable \"" + variable + "\".";
92
92
  }
93
+ function getVariables(context) {
94
+ var _a = context.getScope(), variableScope = _a.variableScope, currentScopeVariables = _a.variables;
95
+ if (variableScope === context.getScope()) {
96
+ return currentScopeVariables;
97
+ }
98
+ else {
99
+ return currentScopeVariables.concat(variableScope.variables);
100
+ }
101
+ }
93
102
  },
94
103
  };
95
104
  module.exports = rule;
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-immediate-return.js","sourceRoot":"","sources":["../../src/rules/prefer-immediate-return.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-immediate-return.js","sourceRoot":"","sources":["../../src/rules/prefer-immediate-return.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,iDAAiD;AAIjD,wCAA0G;AAE1G,IAAM,IAAI,GAAoB;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM;KAChB;IACD,MAAM,YAAC,OAAyB;QAC9B,OAAO;YACL,cAAc,YAAC,IAAiB;gBAC9B,iBAAiB,CAAE,IAA8B,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;YACD,UAAU,YAAC,IAAiB;gBAC1B,iBAAiB,CAAE,IAA0B,CAAC,UAAU,CAAC,CAAC;YAC5D,CAAC;SACF,CAAC;QAEF,2BAA2B,UAA8B;YACvD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzB,IAAM,MAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAM,oBAAkB,GAAG,uBAAuB,CAAC,MAAI,CAAC,CAAC;gBAEzD,IAAM,YAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACrD,IAAM,oBAAkB,GAAG,uBAAuB,CAAC,YAAU,CAAC,CAAC;gBAE/D,IAAI,oBAAkB,IAAI,oBAAkB,EAAE;oBAC5C,IAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAA,QAAQ;wBACtD,OAAO,CACL,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,UAAU,KAAK,oBAAkB,EAArC,CAAqC,CAAC,KAAK,SAAS;4BACpF,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,UAAU,KAAK,oBAAkB,CAAC,EAAE,EAAxC,CAAwC,CAAC,KAAK,SAAS,CACxF,CAAC;oBACJ,CAAC,CAAC,CAAC;oBAEH,yDAAyD;oBACzD,IAAI,YAAY,IAAI,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,UAAA,GAAG,IAAI,OAAA,GAAG,CAAC,MAAM,EAAE,EAAZ,CAAY,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;wBACpF,OAAO,CAAC,MAAM,CAAC;4BACb,OAAO,EAAE,aAAa,CAAC,MAAI,EAAE,oBAAkB,CAAC,IAAI,CAAC;4BACrD,IAAI,EAAE,oBAAkB,CAAC,IAAI;4BAC7B,GAAG,EAAE,UAAA,KAAK,IAAI,OAAA,GAAG,CAAC,KAAK,EAAE,MAAI,EAAE,YAAU,EAAE,oBAAkB,CAAC,IAAI,CAAC,EAArD,CAAqD;yBACpE,CAAC,CAAC;qBACJ;iBACF;aACF;QACH,CAAC;QAED,aACE,KAAqB,EACrB,IAAsB,EACtB,UAA4B,EAC5B,UAA6B;YAE7B,IAAM,oBAAoB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEzE,IAAI,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,oBAAoB,EAAE;gBAC1D,IAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACnE,IAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAClE,IAAM,SAAS,GAAG,cAAc,IAAI,cAAc,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5E,OAAO;oBACL,KAAK,CAAC,WAAW,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;oBACnD,KAAK,CAAC,oBAAoB,CACxB,CAAC,CAAC,EAAE,eAAe,CAAC,EACjB,oBAAoB,CAAC,KAAK,SAAI,cAAc,GAAG,SAAW,CAC9D;iBACF,CAAC;aACH;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;QACH,CAAC;QAED,iCAAiC,IAAsB;YACrD,OAAO,CAAC,yBAAiB,CAAC,IAAI,CAAC,IAAI,wBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,oBAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACxG,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACf,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;QAED,iCAAiC,IAAsB;YACrD,IAAI,6BAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC3D,IAAA,yBAAmC,EAAjC,UAAE,EAAE,cAAI,CAA0B;gBAC1C,IAAI,oBAAY,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;oBAC5B,OAAO,EAAE,EAAE,IAAA,EAAE,IAAI,MAAA,EAAE,CAAC;iBACrB;aACF;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,uBAAuB,IAAiB,EAAE,QAAgB;YACxD,IAAM,MAAM,GAAG,yBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;YAC5D,OAAO,iBAAe,MAAM,6EAAuE,QAAQ,QAAI,CAAC;QAClH,CAAC;QAED,sBAAsB,OAAyB;YACvC,IAAA,uBAAwE,EAAtE,gCAAa,EAAE,oCAAgC,CAAwB;YAC/E,IAAI,aAAa,KAAK,OAAO,CAAC,QAAQ,EAAE,EAAE;gBACxC,OAAO,qBAAqB,CAAC;aAC9B;iBAAM;gBACL,OAAO,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;aAC9D;QACH,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
@@ -1,5 +1,17 @@
1
- import { Rule } from "eslint";
1
+ import { Rule, AST } from "eslint";
2
2
  import * as estree from "estree";
3
+ export interface IssueLocation {
4
+ column: number;
5
+ line: number;
6
+ endColumn: number;
7
+ endLine: number;
8
+ message?: string;
9
+ }
10
+ export interface EncodedMessage {
11
+ message: string;
12
+ cost?: number;
13
+ secondaryLocations: IssueLocation[];
14
+ }
3
15
  /**
4
16
  * Returns a location of the "main" function token:
5
17
  * - function name for a function declaration, method or accessor
@@ -7,3 +19,18 @@ import * as estree from "estree";
7
19
  * - "=>" for an arrow function
8
20
  */
9
21
  export declare function getMainFunctionTokenLocation(fn: estree.Function, parent: estree.Node | undefined, context: Rule.RuleContext): estree.SourceLocation;
22
+ export declare type ReportDescriptor = Rule.ReportDescriptor & {
23
+ message: string;
24
+ };
25
+ /**
26
+ * Wrapper for `context.report`, supporting secondary locations and cost.
27
+ * Encode those extra information in the issue message when rule is executed
28
+ * in Sonar* environment.
29
+ */
30
+ export declare function report(context: Rule.RuleContext, reportDescriptor: ReportDescriptor, secondaryLocations?: IssueLocation[], cost?: number): void;
31
+ /**
32
+ * Converts `SourceLocation` range into `IssueLocation`
33
+ */
34
+ export declare function issueLocation(startLoc: estree.SourceLocation, endLoc?: estree.SourceLocation, message?: string): IssueLocation;
35
+ export declare function getFirstTokenAfter(node: estree.Node, context: Rule.RuleContext): AST.Token | null;
36
+ export declare function getFirstToken(node: estree.Node, context: Rule.RuleContext): AST.Token;
@@ -38,10 +38,48 @@ function getMainFunctionTokenLocation(fn, parent, context) {
38
38
  return location;
39
39
  }
40
40
  exports.getMainFunctionTokenLocation = getMainFunctionTokenLocation;
41
+ /**
42
+ * Wrapper for `context.report`, supporting secondary locations and cost.
43
+ * Encode those extra information in the issue message when rule is executed
44
+ * in Sonar* environment.
45
+ */
46
+ function report(context, reportDescriptor, secondaryLocations, cost) {
47
+ if (secondaryLocations === void 0) { secondaryLocations = []; }
48
+ var message = reportDescriptor.message;
49
+ if (context.options[context.options.length - 1] === "sonar-runtime") {
50
+ var encodedMessage = { secondaryLocations: secondaryLocations, message: message, cost: cost };
51
+ reportDescriptor.message = JSON.stringify(encodedMessage);
52
+ }
53
+ context.report(reportDescriptor);
54
+ }
55
+ exports.report = report;
56
+ /**
57
+ * Converts `SourceLocation` range into `IssueLocation`
58
+ */
59
+ function issueLocation(startLoc, endLoc, message) {
60
+ if (endLoc === void 0) { endLoc = startLoc; }
61
+ if (message === void 0) { message = ""; }
62
+ return {
63
+ line: startLoc.start.line,
64
+ column: startLoc.start.column,
65
+ endLine: endLoc.end.line,
66
+ endColumn: endLoc.end.column,
67
+ message: message,
68
+ };
69
+ }
70
+ exports.issueLocation = issueLocation;
41
71
  function getTokenByValue(node, value, context) {
42
72
  return context
43
73
  .getSourceCode()
44
74
  .getTokens(node)
45
75
  .find(function (token) { return token.value === value; });
46
76
  }
77
+ function getFirstTokenAfter(node, context) {
78
+ return context.getSourceCode().getTokenAfter(node);
79
+ }
80
+ exports.getFirstTokenAfter = getFirstTokenAfter;
81
+ function getFirstToken(node, context) {
82
+ return context.getSourceCode().getTokens(node)[0];
83
+ }
84
+ exports.getFirstToken = getFirstToken;
47
85
  //# sourceMappingURL=locations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locations.js","sourceRoot":"","sources":["../../src/utils/locations.ts"],"names":[],"mappings":";;AAsBA;;;;;GAKG;AACH,sCACE,EAAmB,EACnB,MAA+B,EAC/B,OAAyB;IAEzB,IAAI,QAAkD,CAAC;IAEvD,IAAI,EAAE,CAAC,IAAI,KAAK,qBAAqB,EAAE;QACrC,qGAAqG;QACrG,IAAI,EAAE,CAAC,EAAE,EAAE;YACT,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;SACtB;aAAM;YACL,IAAM,KAAK,GAAG,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC;SAC/B;KACF;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,oBAAoB,EAAE;QAC3C,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE;YAChF,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;SAC3B;aAAM;YACL,IAAM,KAAK,GAAG,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;YACvD,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC;SAC/B;KACF;SAAM,IAAI,EAAE,CAAC,IAAI,KAAK,yBAAyB,EAAE;QAChD,IAAM,KAAK,GAAG,OAAO;aAClB,aAAa,EAAE;aACf,eAAe,CAAC,EAAE,CAAC,IAAI,CAAC;aACxB,OAAO,EAAE;aACT,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,KAAK,KAAK,IAAI,EAApB,CAAoB,CAAC,CAAC;QAEvC,QAAQ,GAAG,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC;KAC/B;IAED,OAAO,QAAS,CAAC;AACnB,CAAC;AAjCD,oEAiCC;AAED,yBAAyB,IAAiB,EAAE,KAAa,EAAE,OAAyB;IAClF,OAAO,OAAO;SACX,aAAa,EAAE;SACf,SAAS,CAAC,IAAI,CAAC;SACf,IAAI,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,KAAK,KAAK,KAAK,EAArB,CAAqB,CAAC,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"locations.js","sourceRoot":"","sources":["../../src/utils/locations.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-plugin-sonarjs",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "SonarJS rules for ESLint",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",