eslint-plugin-sonarjs 0.12.0 → 0.13.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 +12 -5
- 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-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 +45 -0
- package/lib/rules/prefer-single-boolean-return.js.map +1 -1
- package/package.json +4 -4
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,7 +27,7 @@ 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`])
|
|
@@ -36,14 +36,14 @@ Code Smells, or maintainability issues, are raised for places of code which migh
|
|
|
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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"}
|
|
@@ -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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"}
|
|
@@ -5,9 +5,13 @@ const rule = {
|
|
|
5
5
|
meta: {
|
|
6
6
|
messages: {
|
|
7
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',
|
|
@@ -25,6 +29,7 @@ const rule = {
|
|
|
25
29
|
context.report({
|
|
26
30
|
messageId: 'replaceIfThenElseByReturn',
|
|
27
31
|
node,
|
|
32
|
+
suggest: getSuggestion(node),
|
|
28
33
|
});
|
|
29
34
|
}
|
|
30
35
|
},
|
|
@@ -53,6 +58,46 @@ const rule = {
|
|
|
53
58
|
// `statement.argument` can be `null`, replace it with `undefined` in this case
|
|
54
59
|
return (0, nodes_1.isReturnStatement)(statement) && (0, nodes_1.isBooleanLiteral)(statement.argument || undefined);
|
|
55
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
|
+
}
|
|
56
101
|
},
|
|
57
102
|
};
|
|
58
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,EAAE,8DAA8D;
|
|
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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-sonarjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"description": "SonarJS rules for ESLint",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
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
36
|
"@types/eslint": "7.29.0",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"eslint-config-prettier": "2.9.0",
|
|
46
46
|
"eslint-plugin-import": "2.25.2",
|
|
47
47
|
"eslint-plugin-notice": "0.6.7",
|
|
48
|
-
"eslint-plugin-sonarjs": "0.
|
|
48
|
+
"eslint-plugin-sonarjs": "0.12.0",
|
|
49
49
|
"jest": "27.3.1",
|
|
50
50
|
"jest-sonar-reporter": "2.0.0",
|
|
51
51
|
"lint-staged": "12.1.2",
|
|
52
52
|
"lodash": "4.17.21",
|
|
53
|
-
"minimist": "1.2.
|
|
53
|
+
"minimist": "1.2.6",
|
|
54
54
|
"prettier": "2.3.0",
|
|
55
55
|
"rimraf": "2.6.2",
|
|
56
56
|
"ts-jest": "27.0.7",
|