eslint-plugin-sonarjs 0.11.0 → 0.14.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.
- package/README.md +13 -6
- package/lib/rules/no-collection-size-mischeck.js +20 -0
- package/lib/rules/no-collection-size-mischeck.js.map +1 -1
- package/lib/rules/no-gratuitous-expressions.js +12 -1
- package/lib/rules/no-gratuitous-expressions.js.map +1 -1
- package/lib/rules/no-identical-functions.d.ts +2 -1
- package/lib/rules/no-identical-functions.js +4 -1
- package/lib/rules/no-identical-functions.js.map +1 -1
- package/lib/rules/no-inverted-boolean-check.js +9 -2
- package/lib/rules/no-inverted-boolean-check.js.map +1 -1
- package/lib/rules/no-nested-template-literals.js +11 -4
- package/lib/rules/no-nested-template-literals.js.map +1 -1
- package/lib/rules/no-redundant-boolean.js.map +1 -1
- package/lib/rules/no-redundant-jump.js +12 -0
- package/lib/rules/no-redundant-jump.js.map +1 -1
- package/lib/rules/no-same-line-conditional.js +13 -0
- package/lib/rules/no-same-line-conditional.js.map +1 -1
- package/lib/rules/non-existent-operator.js +19 -0
- package/lib/rules/non-existent-operator.js.map +1 -1
- package/lib/rules/prefer-single-boolean-return.js +61 -7
- package/lib/rules/prefer-single-boolean-return.js.map +1 -1
- package/lib/utils/index.js +5 -1
- package/lib/utils/index.js.map +1 -1
- package/package.json +29 -23
- package/.jfrog/projects/npm.yaml +0 -8
- package/wss-unified-agent.config +0 -20
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Rules in this category aim to find places in code which have a high chance of be
|
|
|
17
17
|
* Return values from functions without side effects should not be ignored ([`no-ignored-return`]) (*uses-types*)
|
|
18
18
|
* Loops with at most one iteration should be refactored ([`no-one-iteration-loop`])
|
|
19
19
|
* The output of functions that don't return anything should not be used ([`no-use-of-empty-return-value`])
|
|
20
|
-
* Non-existent operators '=+', '=-' and '=!' should not be used ([`non-existent-operator`])
|
|
20
|
+
* Non-existent operators '=+', '=-' and '=!' should not be used ([`non-existent-operator`]) (:wrench: *fixable*)
|
|
21
21
|
|
|
22
22
|
### Code Smell Detection :pig:
|
|
23
23
|
|
|
@@ -27,23 +27,23 @@ Code Smells, or maintainability issues, are raised for places of code which migh
|
|
|
27
27
|
* "if ... else if" constructs should end with "else" clauses ([`elseif-without-else`]) (*disabled*)
|
|
28
28
|
* "switch" statements should not have too many "case" clauses ([`max-switch-cases`])
|
|
29
29
|
* Collapsible "if" statements should be merged ([`no-collapsible-if`])
|
|
30
|
-
* Collection sizes and array length comparisons should make sense ([`no-collection-size-mischeck`]) (*uses-types*)
|
|
30
|
+
* Collection sizes and array length comparisons should make sense ([`no-collection-size-mischeck`]) (:wrench: *fixable*, *uses-types*)
|
|
31
31
|
* String literals should not be duplicated ([`no-duplicate-string`])
|
|
32
32
|
* Two branches in a conditional structure should not have exactly the same implementation ([`no-duplicated-branches`])
|
|
33
33
|
* Boolean expressions should not be gratuitous ([`no-gratuitous-expressions`])
|
|
34
34
|
* Functions should not have identical implementations ([`no-identical-functions`])
|
|
35
|
-
* Boolean checks should not be inverted ([`no-inverted-boolean-check`]) (:wrench: *fixable*)
|
|
35
|
+
* Boolean checks should not be inverted ([`no-inverted-boolean-check`]) (:wrench: *fixable*, *disabled*)
|
|
36
36
|
* "switch" statements should not be nested ([`no-nested-switch`])
|
|
37
37
|
* Template literals should not be nested ([`no-nested-template-literals`])
|
|
38
38
|
* Boolean literals should not be redundant ([`no-redundant-boolean`])
|
|
39
|
-
* Jump statements should not be redundant ([`no-redundant-jump`])
|
|
40
|
-
* Conditionals should start on new lines ([`no-same-line-conditional`])
|
|
39
|
+
* Jump statements should not be redundant ([`no-redundant-jump`]) (:wrench: *fixable*)
|
|
40
|
+
* Conditionals should start on new lines ([`no-same-line-conditional`]) (:wrench: *fixable*)
|
|
41
41
|
* "switch" statements should have at least 3 "case" clauses ([`no-small-switch`])
|
|
42
42
|
* Collection and array contents should be used ([`no-unused-collection`])
|
|
43
43
|
* "catch" clauses should do more than rethrow ([`no-useless-catch`])
|
|
44
44
|
* Local variables should not be declared and then immediately returned or thrown ([`prefer-immediate-return`]) (:wrench: *fixable*)
|
|
45
45
|
* Object literal syntax should be used ([`prefer-object-literal`])
|
|
46
|
-
* Return of boolean expressions should not be wrapped into an "if-then-else" statement ([`prefer-single-boolean-return`])
|
|
46
|
+
* Return of boolean expressions should not be wrapped into an "if-then-else" statement ([`prefer-single-boolean-return`]) (:wrench: *fixable*)
|
|
47
47
|
* A "while" loop should be used instead of a "for" loop ([`prefer-while`]) (:wrench: *fixable*)
|
|
48
48
|
|
|
49
49
|
[`cognitive-complexity`]: ./docs/rules/cognitive-complexity.md
|
|
@@ -126,6 +126,13 @@ npm install eslint-plugin-sonarjs -g # or install globally
|
|
|
126
126
|
## Available Configurations
|
|
127
127
|
|
|
128
128
|
This plugin provides only `recommended` configuration. Almost all rules are activated in this profile with a few exceptions (check `disabled` tag in the rules list). `recommended` configuration activates rules with `error` severity.
|
|
129
|
+
|
|
130
|
+
## ESLint and Sonar
|
|
131
|
+
|
|
132
|
+
This plugin exposes to ESLint users a subset of JS/TS rules from Sonar-* products (aka [SonarJS](https://github.com/SonarSource/SonarJS)). We extracted the rules which are not available in ESLint core or other ESLint plugins to be beneficial for ESLint community.
|
|
133
|
+
|
|
134
|
+
If you are a [SonarQube](https://www.sonarqube.org) or [SonarCloud](https://sonarcloud.io) user, to lint your code locally, we suggest to use [SonarLint](https://www.sonarlint.org) IDE extension (available for VSCode, JetBrains IDEs and Eclipse). You can connect SonarLint to your SonarQube/SonarCloud project to synchronize rules configuration, issue statuses, etc.
|
|
135
|
+
|
|
129
136
|
## Contributing
|
|
130
137
|
|
|
131
138
|
You want to participate in the development of the project? Have a look at our [contributing](./docs/CONTRIBUTING.md) guide!
|
|
@@ -27,9 +27,11 @@ const rule = {
|
|
|
27
27
|
meta: {
|
|
28
28
|
messages: {
|
|
29
29
|
fixCollectionSizeCheck: 'Fix this expression; {{propertyName}} of "{{objectName}}" is always greater or equal to zero.',
|
|
30
|
+
suggestFixedSizeCheck: 'Use "{{operator}}" for {{operation}} check',
|
|
30
31
|
},
|
|
31
32
|
schema: [],
|
|
32
33
|
type: 'problem',
|
|
34
|
+
hasSuggestions: true,
|
|
33
35
|
docs: {
|
|
34
36
|
description: 'Collection sizes and array length comparisons should make sense',
|
|
35
37
|
recommended: 'error',
|
|
@@ -57,6 +59,7 @@ const rule = {
|
|
|
57
59
|
objectName: context.getSourceCode().getText(object),
|
|
58
60
|
},
|
|
59
61
|
node,
|
|
62
|
+
suggest: getSuggestion(expr, property.name, context),
|
|
60
63
|
});
|
|
61
64
|
}
|
|
62
65
|
}
|
|
@@ -73,5 +76,22 @@ function isCollection(node, services) {
|
|
|
73
76
|
const tp = checker.getTypeAtLocation(services.esTreeNodeToTSNodeMap.get(node));
|
|
74
77
|
return !!tp.symbol && CollectionLike.includes(tp.symbol.name);
|
|
75
78
|
}
|
|
79
|
+
function getSuggestion(expr, operation, context) {
|
|
80
|
+
const { left, operator } = expr;
|
|
81
|
+
const operatorToken = context
|
|
82
|
+
.getSourceCode()
|
|
83
|
+
.getTokenAfter(left, token => token.value === operator);
|
|
84
|
+
const fixedOperator = operator === '<' ? '==' : '>';
|
|
85
|
+
return [
|
|
86
|
+
{
|
|
87
|
+
messageId: 'suggestFixedSizeCheck',
|
|
88
|
+
data: {
|
|
89
|
+
operation,
|
|
90
|
+
operator: fixedOperator,
|
|
91
|
+
},
|
|
92
|
+
fix: fixer => fixer.replaceText(operatorToken, fixedOperator),
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
}
|
|
76
96
|
module.exports = rule;
|
|
77
97
|
//# sourceMappingURL=no-collection-size-mischeck.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-collection-size-mischeck.js","sourceRoot":"","sources":["../../src/rules/no-collection-size-mischeck.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,8DAA4F;AAC5F,gDAAwC;AAExC,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACrE,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,sBAAsB,EACpB,+FAA+F;
|
|
1
|
+
{"version":3,"file":"no-collection-size-mischeck.js","sourceRoot":"","sources":["../../src/rules/no-collection-size-mischeck.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,10 @@ const rule = {
|
|
|
45
45
|
create(context) {
|
|
46
46
|
const truthyMap = new Map();
|
|
47
47
|
const falsyMap = new Map();
|
|
48
|
+
function isInsideJSX() {
|
|
49
|
+
const ancestors = context.getAncestors();
|
|
50
|
+
return !!ancestors.find(ancestor => ancestor.type === 'JSXExpressionContainer');
|
|
51
|
+
}
|
|
48
52
|
return {
|
|
49
53
|
IfStatement: (node) => {
|
|
50
54
|
const { test } = node;
|
|
@@ -76,7 +80,7 @@ const rule = {
|
|
|
76
80
|
const id = node;
|
|
77
81
|
const symbol = getSymbol(id, context.getScope());
|
|
78
82
|
const { parent } = node;
|
|
79
|
-
if (!symbol || !parent) {
|
|
83
|
+
if (!symbol || !parent || (isInsideJSX() && isLogicalAndRhs(id, parent))) {
|
|
80
84
|
return;
|
|
81
85
|
}
|
|
82
86
|
if (!isLogicalAnd(parent) &&
|
|
@@ -136,6 +140,13 @@ function isLogicalOrLhs(id, expression) {
|
|
|
136
140
|
expression.operator === '||' &&
|
|
137
141
|
expression.left === id);
|
|
138
142
|
}
|
|
143
|
+
function isLogicalAndRhs(id, expression) {
|
|
144
|
+
var _a;
|
|
145
|
+
return (((_a = expression.parent) === null || _a === void 0 ? void 0 : _a.type) !== 'LogicalExpression' &&
|
|
146
|
+
expression.type === 'LogicalExpression' &&
|
|
147
|
+
expression.operator === '&&' &&
|
|
148
|
+
expression.right === id);
|
|
149
|
+
}
|
|
139
150
|
function isLogicalNegation(expression) {
|
|
140
151
|
return expression.type === 'UnaryExpression' && expression.operator === '!';
|
|
141
152
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-gratuitous-expressions.js","sourceRoot":"","sources":["../../src/rules/no-gratuitous-expressions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,kDAA4C;AAC5C,0CAA6D;AAC7D,gDAAwC;AAExC,MAAM,OAAO,GAAG,qEAAqE,CAAC;AAEtF,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,yBAAyB,EAAE,OAAO;YAClC,YAAY,EAAE,sBAAsB;SACrC;QACD,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,8CAA8C;YAC3D,WAAW,EAAE,OAAO;YACpB,GAAG,EAAE,IAAA,kBAAO,EAAC,UAAU,CAAC;SACzB;QACD,MAAM,EAAE;YACN;gBACE,0DAA0D;gBAC1D,IAAI,EAAE,CAAC,eAAe,CAAC;aACxB;SACF;KACF;IACD,MAAM,CAAC,OAAO;QACZ,MAAM,SAAS,GAAwD,IAAI,GAAG,EAAE,CAAC;QACjF,MAAM,QAAQ,GAAwD,IAAI,GAAG,EAAE,CAAC;QAEhF,OAAO;YACL,WAAW,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACnC,MAAM,EAAE,IAAI,EAAE,GAAG,IAA4B,CAAC;gBAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;oBAC9D,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBACnD;YACH,CAAC;YAED,YAAY,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACpC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACxB,IAAI,IAAA,qBAAa,EAAC,MAAM,CAAC,EAAE;oBACzB,6GAA6G;oBAC7G,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAExC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE;wBAC9B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;wBAC/D,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;wBAC3E,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,kBAAkB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;qBAC1E;yBAAM,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,IAAA,oBAAY,EAAC,MAAM,CAAC,IAAI,CAAC,EAAE;wBACjE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;qBACjF;iBACF;YACH,CAAC;YAED,iBAAiB,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACzC,MAAM,IAAI,GAAG,IAA0B,CAAC;gBACxC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAED,UAAU,EAAE,CAAC,IAAmB,EAAE,EAAE;gBAClC,MAAM,EAAE,GAAG,IAA2B,CAAC;gBACvC,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACjD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"no-gratuitous-expressions.js","sourceRoot":"","sources":["../../src/rules/no-gratuitous-expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
const equivalence_1 = require("../utils/equivalence");
|
|
23
23
|
const locations_1 = require("../utils/locations");
|
|
24
24
|
const docs_url_1 = require("../utils/docs-url");
|
|
25
|
+
const DEFAULT_MIN_LINES = 3;
|
|
25
26
|
const message = 'Update this function so that its implementation is not identical to the one on line {{line}}.';
|
|
26
27
|
const rule = {
|
|
27
28
|
meta: {
|
|
@@ -36,6 +37,7 @@ const rule = {
|
|
|
36
37
|
url: (0, docs_url_1.default)(__filename),
|
|
37
38
|
},
|
|
38
39
|
schema: [
|
|
40
|
+
{ type: 'integer', minimum: 3 },
|
|
39
41
|
{
|
|
40
42
|
enum: ['sonar-runtime'],
|
|
41
43
|
},
|
|
@@ -43,6 +45,7 @@ const rule = {
|
|
|
43
45
|
},
|
|
44
46
|
create(context) {
|
|
45
47
|
const functions = [];
|
|
48
|
+
const minLines = typeof context.options[0] === 'number' ? context.options[0] : DEFAULT_MIN_LINES;
|
|
46
49
|
return {
|
|
47
50
|
FunctionDeclaration(node) {
|
|
48
51
|
visitFunction(node);
|
|
@@ -97,7 +100,7 @@ const rule = {
|
|
|
97
100
|
if (tokens.length > 0) {
|
|
98
101
|
const firstLine = tokens[0].loc.start.line;
|
|
99
102
|
const lastLine = tokens[tokens.length - 1].loc.end.line;
|
|
100
|
-
return lastLine - firstLine
|
|
103
|
+
return lastLine - firstLine + 1 >= minLines;
|
|
101
104
|
}
|
|
102
105
|
return false;
|
|
103
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-identical-functions.js","sourceRoot":"","sources":["../../src/rules/no-identical-functions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,sDAAqD;AACrD,kDAAyF;AACzF,gDAAwC;
|
|
1
|
+
{"version":3,"file":"no-identical-functions.js","sourceRoot":"","sources":["../../src/rules/no-identical-functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,14 +35,16 @@ const rule = {
|
|
|
35
35
|
meta: {
|
|
36
36
|
messages: {
|
|
37
37
|
useOppositeOperator: 'Use the opposite operator ({{invertedOperator}}) instead.',
|
|
38
|
+
suggestOperationInversion: 'Invert inner operation (apply if NaN is not expected)',
|
|
38
39
|
},
|
|
39
40
|
schema: [],
|
|
40
41
|
type: 'suggestion',
|
|
41
42
|
docs: {
|
|
42
43
|
description: 'Boolean checks should not be inverted',
|
|
43
|
-
recommended:
|
|
44
|
+
recommended: false,
|
|
44
45
|
url: (0, docs_url_1.default)(__filename),
|
|
45
46
|
},
|
|
47
|
+
hasSuggestions: true,
|
|
46
48
|
fixable: 'code',
|
|
47
49
|
},
|
|
48
50
|
create(context) {
|
|
@@ -62,9 +64,14 @@ function visitUnaryExpression(unaryExpression, context) {
|
|
|
62
64
|
const [start, end] = ((_a = unaryExpression.parent) === null || _a === void 0 ? void 0 : _a.type) === 'UnaryExpression' ? ['(', ')'] : ['', ''];
|
|
63
65
|
context.report({
|
|
64
66
|
messageId: 'useOppositeOperator',
|
|
67
|
+
suggest: [
|
|
68
|
+
{
|
|
69
|
+
messageId: 'suggestOperationInversion',
|
|
70
|
+
fix: fixer => fixer.replaceText(unaryExpression, `${start}${left} ${invertedOperator} ${right}${end}`),
|
|
71
|
+
},
|
|
72
|
+
],
|
|
65
73
|
data: { invertedOperator },
|
|
66
74
|
node: unaryExpression,
|
|
67
|
-
fix: fixer => fixer.replaceText(unaryExpression, `${start}${left} ${invertedOperator} ${right}${end}`),
|
|
68
75
|
});
|
|
69
76
|
}
|
|
70
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-inverted-boolean-check.js","sourceRoot":"","sources":["../../src/rules/no-inverted-boolean-check.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,0CAAoD;AACpD,gDAAwC;AAExC,MAAM,iBAAiB,GAAmC;IACxD,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,mBAAmB,EAAE,2DAA2D;
|
|
1
|
+
{"version":3,"file":"no-inverted-boolean-check.js","sourceRoot":"","sources":["../../src/rules/no-inverted-boolean-check.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,0CAAoD;AACpD,gDAAwC;AAExC,MAAM,iBAAiB,GAAmC;IACxD,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;IACZ,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,mBAAmB,EAAE,2DAA2D;YAChF,yBAAyB,EAAE,uDAAuD;SACnF;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,uCAAuC;YACpD,WAAW,EAAE,KAAK;YAClB,GAAG,EAAE,IAAA,kBAAO,EAAC,UAAU,CAAC;SACzB;QACD,cAAc,EAAE,IAAI;QACpB,OAAO,EAAE,MAAM;KAChB;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,eAAe,EAAE,CAAC,IAAmB,EAAE,EAAE,CACvC,oBAAoB,CAAC,IAAgC,EAAE,OAAO,CAAC;SAClE,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,oBAAoB,CAC3B,eAAyC,EACzC,OAA+C;;IAE/C,IAAI,eAAe,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAA,0BAAkB,EAAC,eAAe,CAAC,QAAQ,CAAC,EAAE;QACpF,MAAM,SAAS,GAA8B,eAAe,CAAC,QAAQ,CAAC;QACtE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,gBAAgB,EAAE;YACpB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC/D,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAChB,CAAA,MAAA,eAAe,CAAC,MAAM,0CAAE,IAAI,MAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,MAAM,CAAC;gBACb,SAAS,EAAE,qBAAqB;gBAChC,OAAO,EAAE;oBACP;wBACE,SAAS,EAAE,2BAA2B;wBACtC,GAAG,EAAE,KAAK,CAAC,EAAE,CACX,KAAK,CAAC,WAAW,CACf,eAAe,EACf,GAAG,KAAK,GAAG,IAAI,IAAI,gBAAgB,IAAI,KAAK,GAAG,GAAG,EAAE,CACrD;qBACJ;iBACF;gBACD,IAAI,EAAE,EAAE,gBAAgB,EAAE;gBAC1B,IAAI,EAAE,eAAe;aACtB,CAAC,CAAC;SACJ;KACF;AACH,CAAC;AAED,iBAAS,IAAI,CAAC"}
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
20
20
|
*/
|
|
21
21
|
// https://sonarsource.github.io/rspec/#/rspec/S4624
|
|
22
|
+
const utils_1 = require("../utils");
|
|
22
23
|
const docs_url_1 = require("../utils/docs-url");
|
|
23
24
|
const rule = {
|
|
24
25
|
meta: {
|
|
@@ -36,10 +37,16 @@ const rule = {
|
|
|
36
37
|
create(context) {
|
|
37
38
|
return {
|
|
38
39
|
'TemplateLiteral TemplateLiteral': (node) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
40
|
+
const ancestors = (0, utils_1.ancestorsChain)(node, new Set(['TemplateLiteral']));
|
|
41
|
+
const nestingTemplate = ancestors[ancestors.length - 1];
|
|
42
|
+
const { start: nestingStart, end: nestingEnd } = nestingTemplate.loc;
|
|
43
|
+
const { start: nestedStart, end: nestedEnd } = node.loc;
|
|
44
|
+
if (nestedStart.line === nestingStart.line || nestedEnd.line === nestingEnd.line) {
|
|
45
|
+
context.report({
|
|
46
|
+
messageId: 'nestedTemplateLiterals',
|
|
47
|
+
node,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
43
50
|
},
|
|
44
51
|
};
|
|
45
52
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-nested-template-literals.js","sourceRoot":"","sources":["../../src/rules/no-nested-template-literals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,gDAAwC;AAExC,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,sBAAsB,EAAE,yDAAyD;SAClF;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,wCAAwC;YACrD,WAAW,EAAE,OAAO;YACpB,GAAG,EAAE,IAAA,kBAAO,EAAC,UAAU,CAAC;SACzB;KACF;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,iCAAiC,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACzD,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"no-nested-template-literals.js","sourceRoot":"","sources":["../../src/rules/no-nested-template-literals.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,oCAA0C;AAC1C,gDAAwC;AAExC,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,sBAAsB,EAAE,yDAAyD;SAClF;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,wCAAwC;YACrD,WAAW,EAAE,OAAO;YACpB,GAAG,EAAE,IAAA,kBAAO,EAAC,UAAU,CAAC;SACzB;KACF;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,iCAAiC,EAAE,CAAC,IAAmB,EAAE,EAAE;gBACzD,MAAM,SAAS,GAAG,IAAA,sBAAc,EAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBAExD,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC;gBACrE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;gBAExD,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,EAAE;oBAChF,OAAO,CAAC,MAAM,CAAC;wBACb,SAAS,EAAE,wBAAwB;wBACnC,IAAI;qBACL,CAAC,CAAC;iBACJ;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-redundant-boolean.js","sourceRoot":"","sources":["../../src/rules/no-redundant-boolean.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,0CAA0F;AAC1F,gDAAwC;AAExC,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,wBAAwB,EAAE,yCAAyC;SACpE;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,0CAA0C;YACvD,WAAW,EAAE,OAAO;YACpB,GAAG,EAAE,IAAA,kBAAO,EAAC,UAAU,CAAC;SACzB;KACF;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,gBAAgB,CAAC,IAAmB;gBAClC,MAAM,UAAU,GAAG,IAAiC,CAAC;gBACrD,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE;oBAChE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;YACH,CAAC;YAED,iBAAiB,CAAC,IAAmB;gBACnC,MAAM,UAAU,GAAG,IAAkC,CAAC;gBACtD,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE;oBAChC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;gBAED,yGAAyG;gBACzG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACxB,IACE,UAAU,CAAC,QAAQ,KAAK,IAAI;oBAC5B,CAAC,CAAC,IAAA,+BAAuB,EAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC,EAC1F;oBACA,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;YACH,CAAC;YAED,eAAe,CAAC,IAAmB;gBACjC,MAAM,eAAe,GAAG,IAAgC,CAAC;gBACzD,IAAI,eAAe,CAAC,QAAQ,KAAK,GAAG,EAAE;oBACpC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;iBAC/C;YACH,CAAC;SACF,CAAC;QAEF,SAAS,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"no-redundant-boolean.js","sourceRoot":"","sources":["../../src/rules/no-redundant-boolean.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,0CAA0F;AAC1F,gDAAwC;AAExC,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,wBAAwB,EAAE,yCAAyC;SACpE;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,WAAW,EAAE,0CAA0C;YACvD,WAAW,EAAE,OAAO;YACpB,GAAG,EAAE,IAAA,kBAAO,EAAC,UAAU,CAAC;SACzB;KACF;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,gBAAgB,CAAC,IAAmB;gBAClC,MAAM,UAAU,GAAG,IAAiC,CAAC;gBACrD,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE;oBAChE,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;YACH,CAAC;YAED,iBAAiB,CAAC,IAAmB;gBACnC,MAAM,UAAU,GAAG,IAAkC,CAAC;gBACtD,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAErC,IAAI,UAAU,CAAC,QAAQ,KAAK,IAAI,EAAE;oBAChC,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;gBAED,yGAAyG;gBACzG,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACxB,IACE,UAAU,CAAC,QAAQ,KAAK,IAAI;oBAC5B,CAAC,CAAC,IAAA,+BAAuB,EAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,IAAA,qBAAa,EAAC,MAAM,CAAC,CAAC,EAC1F;oBACA,mBAAmB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;YACH,CAAC;YAED,eAAe,CAAC,IAAmB;gBACjC,MAAM,eAAe,GAAG,IAAgC,CAAC;gBACzD,IAAI,eAAe,CAAC,QAAQ,KAAK,GAAG,EAAE;oBACpC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;iBAC/C;YACH,CAAC;SACF,CAAC;QAEF,SAAS,mBAAmB,CAAC,UAA4D;YACvF,IAAI,IAAA,wBAAgB,EAAC,UAAU,CAAC,EAAE;gBAChC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,0BAA0B,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;aAC7E;QACH,CAAC;IACH,CAAC;CACF,CAAC;AAEF,iBAAS,IAAI,CAAC"}
|
|
@@ -25,9 +25,11 @@ const rule = {
|
|
|
25
25
|
meta: {
|
|
26
26
|
messages: {
|
|
27
27
|
removeRedundantJump: 'Remove this redundant jump.',
|
|
28
|
+
suggestJumpRemoval: 'Remove this redundant jump',
|
|
28
29
|
},
|
|
29
30
|
schema: [],
|
|
30
31
|
type: 'suggestion',
|
|
32
|
+
hasSuggestions: true,
|
|
31
33
|
docs: {
|
|
32
34
|
description: 'Jump statements should not be redundant',
|
|
33
35
|
recommended: 'error',
|
|
@@ -40,9 +42,19 @@ const rule = {
|
|
|
40
42
|
if (!withArgument) {
|
|
41
43
|
const block = node.parent;
|
|
42
44
|
if (block.body[block.body.length - 1] === node && block.body.length > 1) {
|
|
45
|
+
const previousComments = context.getSourceCode().getCommentsBefore(node);
|
|
46
|
+
const previousToken = previousComments.length === 0
|
|
47
|
+
? context.getSourceCode().getTokenBefore(node)
|
|
48
|
+
: previousComments[previousComments.length - 1];
|
|
43
49
|
context.report({
|
|
44
50
|
messageId: 'removeRedundantJump',
|
|
45
51
|
node,
|
|
52
|
+
suggest: [
|
|
53
|
+
{
|
|
54
|
+
messageId: 'suggestJumpRemoval',
|
|
55
|
+
fix: fixer => fixer.removeRange([previousToken.range[1], node.range[1]]),
|
|
56
|
+
},
|
|
57
|
+
],
|
|
46
58
|
});
|
|
47
59
|
}
|
|
48
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-redundant-jump.js","sourceRoot":"","sources":["../../src/rules/no-redundant-jump.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,gDAAwC;AAExC,MAAM,KAAK,GAAG,gFAAgF,CAAC;AAE/F,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,mBAAmB,EAAE,6BAA6B;
|
|
1
|
+
{"version":3,"file":"no-redundant-jump.js","sourceRoot":"","sources":["../../src/rules/no-redundant-jump.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,8 +27,11 @@ const rule = {
|
|
|
27
27
|
messages: {
|
|
28
28
|
sameLineCondition: message,
|
|
29
29
|
sonarRuntime: '{{sonarRuntimeData}}',
|
|
30
|
+
suggestAddingElse: 'Add "else" keyword',
|
|
31
|
+
suggestAddingNewline: 'Move this "if" to a new line',
|
|
30
32
|
},
|
|
31
33
|
type: 'problem',
|
|
34
|
+
hasSuggestions: true,
|
|
32
35
|
docs: {
|
|
33
36
|
description: 'Conditionals should start on new lines',
|
|
34
37
|
recommended: 'error',
|
|
@@ -57,6 +60,16 @@ const rule = {
|
|
|
57
60
|
(0, locations_1.report)(context, {
|
|
58
61
|
messageId: 'sameLineCondition',
|
|
59
62
|
loc: followingIfToken.loc,
|
|
63
|
+
suggest: [
|
|
64
|
+
{
|
|
65
|
+
messageId: 'suggestAddingElse',
|
|
66
|
+
fix: fixer => fixer.insertTextBefore(followingIfToken, 'else '),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
messageId: 'suggestAddingNewline',
|
|
70
|
+
fix: fixer => fixer.replaceTextRange([precedingIf.range[1], followingIf.range[0]], '\n' + ' '.repeat(precedingIf.loc.start.column)),
|
|
71
|
+
},
|
|
72
|
+
],
|
|
60
73
|
}, [(0, locations_1.issueLocation)(precedingIfLastToken.loc)], message);
|
|
61
74
|
}
|
|
62
75
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-same-line-conditional.js","sourceRoot":"","sources":["../../src/rules/no-same-line-conditional.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,gDAAwC;AACxC,kDAA2D;AAE3D,MAAM,OAAO,GAAG,yDAAyD,CAAC;AAO1E,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,iBAAiB,EAAE,OAAO;YAC1B,YAAY,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"no-same-line-conditional.js","sourceRoot":"","sources":["../../src/rules/no-same-line-conditional.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,11 @@ const rule = {
|
|
|
24
24
|
meta: {
|
|
25
25
|
messages: {
|
|
26
26
|
useExistingOperator: 'Was "{{operator}}=" meant instead?',
|
|
27
|
+
suggestExistingOperator: 'Replace with "{{operator}}" operator',
|
|
27
28
|
},
|
|
28
29
|
schema: [],
|
|
29
30
|
type: 'problem',
|
|
31
|
+
hasSuggestions: true,
|
|
30
32
|
docs: {
|
|
31
33
|
description: 'Non-existent operators "=+", "=-" and "=!" should not be used',
|
|
32
34
|
recommended: 'error',
|
|
@@ -49,6 +51,7 @@ const rule = {
|
|
|
49
51
|
},
|
|
50
52
|
};
|
|
51
53
|
function checkOperator(context, unaryNode) {
|
|
54
|
+
var _a;
|
|
52
55
|
if (unaryNode &&
|
|
53
56
|
unaryNode.type === 'UnaryExpression' &&
|
|
54
57
|
isUnaryOperatorOfInterest(unaryNode.operator)) {
|
|
@@ -61,12 +64,28 @@ function checkOperator(context, unaryNode) {
|
|
|
61
64
|
expressionFirstToken != null &&
|
|
62
65
|
areAdjacent(assignmentOperatorToken, unaryOperatorToken) &&
|
|
63
66
|
!areAdjacent(unaryOperatorToken, expressionFirstToken)) {
|
|
67
|
+
const suggest = [];
|
|
68
|
+
if (((_a = unaryNode.parent) === null || _a === void 0 ? void 0 : _a.type) === 'AssignmentExpression') {
|
|
69
|
+
const range = [
|
|
70
|
+
assignmentOperatorToken.range[0],
|
|
71
|
+
unaryOperatorToken.range[1],
|
|
72
|
+
];
|
|
73
|
+
const invertedOperators = unaryOperatorToken.value + assignmentOperatorToken.value;
|
|
74
|
+
suggest.push({
|
|
75
|
+
messageId: 'suggestExistingOperator',
|
|
76
|
+
data: {
|
|
77
|
+
operator: invertedOperators,
|
|
78
|
+
},
|
|
79
|
+
fix: fixer => fixer.replaceTextRange(range, invertedOperators),
|
|
80
|
+
});
|
|
81
|
+
}
|
|
64
82
|
context.report({
|
|
65
83
|
messageId: 'useExistingOperator',
|
|
66
84
|
data: {
|
|
67
85
|
operator: unaryNode.operator,
|
|
68
86
|
},
|
|
69
87
|
loc: { start: assignmentOperatorToken.loc.start, end: unaryOperatorToken.loc.end },
|
|
88
|
+
suggest,
|
|
70
89
|
});
|
|
71
90
|
}
|
|
72
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"non-existent-operator.js","sourceRoot":"","sources":["../../src/rules/non-existent-operator.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,oDAAoD;AAGpD,gDAAwC;AAExC,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,mBAAmB,EAAE,oCAAoC;
|
|
1
|
+
{"version":3,"file":"non-existent-operator.js","sourceRoot":"","sources":["../../src/rules/non-existent-operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,14 @@ const docs_url_1 = require("../utils/docs-url");
|
|
|
4
4
|
const rule = {
|
|
5
5
|
meta: {
|
|
6
6
|
messages: {
|
|
7
|
-
replaceIfThenElseByReturn: 'Replace this if-then-else
|
|
7
|
+
replaceIfThenElseByReturn: 'Replace this if-then-else flow by a single return statement.',
|
|
8
|
+
suggest: 'Replace with single return statement',
|
|
9
|
+
suggestCast: 'Replace with single return statement using "!!" cast',
|
|
10
|
+
suggestBoolean: 'Replace with single return statement without cast (condition should be boolean!)',
|
|
8
11
|
},
|
|
9
12
|
schema: [],
|
|
10
13
|
type: 'suggestion',
|
|
14
|
+
hasSuggestions: true,
|
|
11
15
|
docs: {
|
|
12
16
|
description: 'Return of boolean expressions should not be wrapped into an "if-then-else" statement',
|
|
13
17
|
recommended: 'error',
|
|
@@ -17,20 +21,30 @@ const rule = {
|
|
|
17
21
|
create(context) {
|
|
18
22
|
return {
|
|
19
23
|
IfStatement(node) {
|
|
20
|
-
const ifStmt = node;
|
|
21
24
|
if (
|
|
22
25
|
// ignore `else if`
|
|
23
|
-
!(0, nodes_1.isIfStatement)(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
returnsBoolean(ifStmt.consequent)) {
|
|
26
|
+
!(0, nodes_1.isIfStatement)(node.parent) &&
|
|
27
|
+
returnsBoolean(node.consequent) &&
|
|
28
|
+
alternateReturnsBoolean(node)) {
|
|
27
29
|
context.report({
|
|
28
30
|
messageId: 'replaceIfThenElseByReturn',
|
|
29
|
-
node
|
|
31
|
+
node,
|
|
32
|
+
suggest: getSuggestion(node),
|
|
30
33
|
});
|
|
31
34
|
}
|
|
32
35
|
},
|
|
33
36
|
};
|
|
37
|
+
function alternateReturnsBoolean(node) {
|
|
38
|
+
if (node.alternate) {
|
|
39
|
+
return returnsBoolean(node.alternate);
|
|
40
|
+
}
|
|
41
|
+
const { parent } = node;
|
|
42
|
+
if ((parent === null || parent === void 0 ? void 0 : parent.type) === 'BlockStatement') {
|
|
43
|
+
const ifStmtIndex = parent.body.findIndex(stmt => stmt === node);
|
|
44
|
+
return isSimpleReturnBooleanLiteral(parent.body[ifStmtIndex + 1]);
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
34
48
|
function returnsBoolean(statement) {
|
|
35
49
|
return (statement !== undefined &&
|
|
36
50
|
(isBlockReturningBooleanLiteral(statement) || isSimpleReturnBooleanLiteral(statement)));
|
|
@@ -44,6 +58,46 @@ const rule = {
|
|
|
44
58
|
// `statement.argument` can be `null`, replace it with `undefined` in this case
|
|
45
59
|
return (0, nodes_1.isReturnStatement)(statement) && (0, nodes_1.isBooleanLiteral)(statement.argument || undefined);
|
|
46
60
|
}
|
|
61
|
+
function getSuggestion(ifStmt) {
|
|
62
|
+
const getFix = (condition) => {
|
|
63
|
+
return (fixer) => {
|
|
64
|
+
const singleReturn = `return ${condition};`;
|
|
65
|
+
if (ifStmt.alternate) {
|
|
66
|
+
return fixer.replaceText(ifStmt, singleReturn);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const parent = ifStmt.parent;
|
|
70
|
+
const ifStmtIndex = parent.body.findIndex(stmt => stmt === ifStmt);
|
|
71
|
+
const returnStmt = parent.body[ifStmtIndex + 1];
|
|
72
|
+
const range = [ifStmt.range[0], returnStmt.range[1]];
|
|
73
|
+
return fixer.replaceTextRange(range, singleReturn);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
const shouldNegate = isReturningFalse(ifStmt.consequent);
|
|
78
|
+
const shouldCast = !isBooleanExpression(ifStmt.test);
|
|
79
|
+
const testText = context.getSourceCode().getText(ifStmt.test);
|
|
80
|
+
if (shouldNegate) {
|
|
81
|
+
return [{ messageId: 'suggest', fix: getFix(`!(${testText})`) }];
|
|
82
|
+
}
|
|
83
|
+
else if (!shouldCast) {
|
|
84
|
+
return [{ messageId: 'suggest', fix: getFix(testText) }];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return [
|
|
88
|
+
{ messageId: 'suggestCast', fix: getFix(`!!(${testText})`) },
|
|
89
|
+
{ messageId: 'suggestBoolean', fix: getFix(testText) },
|
|
90
|
+
];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function isReturningFalse(stmt) {
|
|
94
|
+
const returnStmt = (stmt.type === 'BlockStatement' ? stmt.body[0] : stmt);
|
|
95
|
+
return returnStmt.argument.value === false;
|
|
96
|
+
}
|
|
97
|
+
function isBooleanExpression(expr) {
|
|
98
|
+
return ((expr.type === 'UnaryExpression' || expr.type === 'BinaryExpression') &&
|
|
99
|
+
['!', '==', '===', '!=', '!==', '<', '<=', '>', '>=', 'in', 'instanceof'].includes(expr.operator));
|
|
100
|
+
}
|
|
47
101
|
},
|
|
48
102
|
};
|
|
49
103
|
module.exports = rule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-single-boolean-return.js","sourceRoot":"","sources":["../../src/rules/prefer-single-boolean-return.ts"],"names":[],"mappings":";AAqBA,0CAKwB;AACxB,gDAAwC;AAExC,MAAM,IAAI,GAA0C;IAClD,IAAI,EAAE;QACJ,QAAQ,EAAE;YACR,yBAAyB,
|
|
1
|
+
{"version":3,"file":"prefer-single-boolean-return.js","sourceRoot":"","sources":["../../src/rules/prefer-single-boolean-return.ts"],"names":[],"mappings":"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"}
|
package/lib/utils/index.js
CHANGED
|
@@ -20,7 +20,11 @@
|
|
|
20
20
|
*/
|
|
21
21
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
22
22
|
if (k2 === undefined) k2 = k;
|
|
23
|
-
Object.
|
|
23
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
24
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
25
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
26
|
+
}
|
|
27
|
+
Object.defineProperty(o, k2, desc);
|
|
24
28
|
}) : (function(o, m, k, k2) {
|
|
25
29
|
if (k2 === undefined) k2 = k;
|
|
26
30
|
o[k2] = m[k];
|
package/lib/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,qDAAmC;AACnC,iDAA+B;AAC/B,+CAA6B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-sonarjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "SonarJS rules for ESLint",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -30,32 +30,38 @@
|
|
|
30
30
|
"check-format": "prettier --list-different \"{src,tests}/**/*.ts\""
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"eslint": "^5.0.0 || ^6.0.0 || ^7.0.0|| ^8.0.0"
|
|
33
|
+
"eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@
|
|
37
|
-
"@
|
|
38
|
-
"@
|
|
39
|
-
"@
|
|
40
|
-
"@
|
|
41
|
-
"@
|
|
42
|
-
"@
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"eslint-
|
|
49
|
-
"
|
|
36
|
+
"@babel/core": "7.18.9",
|
|
37
|
+
"@babel/eslint-parser": "7.18.9",
|
|
38
|
+
"@babel/plugin-proposal-export-default-from": "^7.18.9",
|
|
39
|
+
"@babel/plugin-proposal-function-bind": "^7.18.9",
|
|
40
|
+
"@babel/preset-env": "7.18.9",
|
|
41
|
+
"@babel/preset-flow": "7.18.6",
|
|
42
|
+
"@babel/preset-react": "7.18.6",
|
|
43
|
+
"@types/eslint": "8.4.5",
|
|
44
|
+
"@types/jest": "28.1.6",
|
|
45
|
+
"@types/lodash": "4.14.182",
|
|
46
|
+
"@types/minimist": "1.2.2",
|
|
47
|
+
"@types/node": "14.14.31",
|
|
48
|
+
"@typescript-eslint/experimental-utils": "5.30.7",
|
|
49
|
+
"@typescript-eslint/parser": "5.30.7",
|
|
50
|
+
"eslint": "8.20.0",
|
|
51
|
+
"eslint-config-prettier": "8.5.0",
|
|
52
|
+
"eslint-plugin-import": "2.26.0",
|
|
53
|
+
"eslint-plugin-notice": "0.9.10",
|
|
54
|
+
"eslint-plugin-sonarjs": "0.14.0-570",
|
|
55
|
+
"jest": "28.1.3",
|
|
50
56
|
"jest-sonar-reporter": "2.0.0",
|
|
51
|
-
"lint-staged": "
|
|
57
|
+
"lint-staged": "13.0.3",
|
|
52
58
|
"lodash": "4.17.21",
|
|
53
|
-
"minimist": "1.2.
|
|
54
|
-
"prettier": "2.
|
|
55
|
-
"rimraf": "
|
|
56
|
-
"ts-jest": "
|
|
57
|
-
"ts-node": "9.1
|
|
58
|
-
"typescript": "4.
|
|
59
|
+
"minimist": "1.2.6",
|
|
60
|
+
"prettier": "2.7.1",
|
|
61
|
+
"rimraf": "3.0.2",
|
|
62
|
+
"ts-jest": "28.0.7",
|
|
63
|
+
"ts-node": "10.9.1",
|
|
64
|
+
"typescript": "4.7.4"
|
|
59
65
|
},
|
|
60
66
|
"prettier": {
|
|
61
67
|
"printWidth": 100,
|
package/.jfrog/projects/npm.yaml
DELETED
package/wss-unified-agent.config
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# WhiteSource documentation https://whitesource.atlassian.net/wiki/spaces/WD/pages/1544880156/Unified+Agent+Configuration+Parameters
|
|
2
|
-
|
|
3
|
-
excludes=ruling/**
|
|
4
|
-
fileSystemScan=False
|
|
5
|
-
resolveAllDependencies=False
|
|
6
|
-
|
|
7
|
-
maven.aggregateModules=True
|
|
8
|
-
maven.downloadMissingDependencies=False
|
|
9
|
-
maven.m2RepositoryPath=.m2/repository
|
|
10
|
-
maven.resolveDependencies=True
|
|
11
|
-
maven.runPreStep=False
|
|
12
|
-
|
|
13
|
-
npm.includeDevDependencies=True
|
|
14
|
-
npm.resolveDependencies=True
|
|
15
|
-
|
|
16
|
-
wss.url=https://saas-eu.whitesourcesoftware.com/agent
|
|
17
|
-
|
|
18
|
-
forceUpdate=true
|
|
19
|
-
checkPolicies=true
|
|
20
|
-
forceUpdate.failBuildOnPolicyViolation=true
|