@typescript-eslint/eslint-plugin 7.1.2-alpha.8 → 7.2.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.
|
@@ -46,14 +46,28 @@ exports.default = (0, util_1.createRule)({
|
|
|
46
46
|
const globalScope = context.sourceCode.getScope(context.sourceCode.ast);
|
|
47
47
|
const services = (0, util_1.getParserServices)(context);
|
|
48
48
|
const checker = services.program.getTypeChecker();
|
|
49
|
-
function
|
|
49
|
+
function parseArrayFilterExpressions(expression) {
|
|
50
50
|
if (expression.type === utils_1.AST_NODE_TYPES.SequenceExpression) {
|
|
51
51
|
// Only the last expression in (a, b, [1, 2, 3].filter(condition))[0] matters
|
|
52
52
|
const lastExpression = (0, util_1.nullThrows)(expression.expressions.at(-1), 'Expected to have more than zero expressions in a sequence expression');
|
|
53
|
-
return
|
|
53
|
+
return parseArrayFilterExpressions(lastExpression);
|
|
54
54
|
}
|
|
55
55
|
if (expression.type === utils_1.AST_NODE_TYPES.ChainExpression) {
|
|
56
|
-
return
|
|
56
|
+
return parseArrayFilterExpressions(expression.expression);
|
|
57
|
+
}
|
|
58
|
+
// This is the only reason we're returning a list rather than a single value.
|
|
59
|
+
if (expression.type === utils_1.AST_NODE_TYPES.ConditionalExpression) {
|
|
60
|
+
// Both branches of the ternary _must_ return results.
|
|
61
|
+
const consequentResult = parseArrayFilterExpressions(expression.consequent);
|
|
62
|
+
if (consequentResult.length === 0) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const alternateResult = parseArrayFilterExpressions(expression.alternate);
|
|
66
|
+
if (alternateResult.length === 0) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
// Accumulate the results from both sides and pass up the chain.
|
|
70
|
+
return [...consequentResult, ...alternateResult];
|
|
57
71
|
}
|
|
58
72
|
// Check if it looks like <<stuff>>(...), but not <<stuff>>?.(...)
|
|
59
73
|
if (expression.type === utils_1.AST_NODE_TYPES.CallExpression &&
|
|
@@ -69,15 +83,18 @@ exports.default = (0, util_1.createRule)({
|
|
|
69
83
|
// As long as the object is a (possibly nullable) array,
|
|
70
84
|
// this is an Array.prototype.filter expression.
|
|
71
85
|
if (isArrayish(filteredObjectType)) {
|
|
72
|
-
return
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
86
|
+
return [
|
|
87
|
+
{
|
|
88
|
+
isBracketSyntaxForFilter,
|
|
89
|
+
filterNode,
|
|
90
|
+
},
|
|
91
|
+
];
|
|
76
92
|
}
|
|
77
93
|
}
|
|
78
94
|
}
|
|
79
95
|
}
|
|
80
|
-
|
|
96
|
+
// not a filter expression.
|
|
97
|
+
return [];
|
|
81
98
|
}
|
|
82
99
|
/**
|
|
83
100
|
* Tells whether the type is a possibly nullable array/tuple or union thereof.
|
|
@@ -168,8 +185,8 @@ exports.default = (0, util_1.createRule)({
|
|
|
168
185
|
CallExpression(node) {
|
|
169
186
|
const object = getObjectIfArrayAtZeroExpression(node);
|
|
170
187
|
if (object) {
|
|
171
|
-
const
|
|
172
|
-
if (
|
|
188
|
+
const filterExpressions = parseArrayFilterExpressions(object);
|
|
189
|
+
if (filterExpressions.length !== 0) {
|
|
173
190
|
context.report({
|
|
174
191
|
node,
|
|
175
192
|
messageId: 'preferFind',
|
|
@@ -178,7 +195,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
178
195
|
messageId: 'preferFindSuggestion',
|
|
179
196
|
fix: (fixer) => {
|
|
180
197
|
return [
|
|
181
|
-
generateFixToReplaceFilterWithFind(fixer, filterExpression),
|
|
198
|
+
...filterExpressions.map(filterExpression => generateFixToReplaceFilterWithFind(fixer, filterExpression)),
|
|
182
199
|
// Get rid of the .at(0) or ['at'](0).
|
|
183
200
|
generateFixToRemoveArrayElementAccess(fixer, object, node),
|
|
184
201
|
];
|
|
@@ -196,8 +213,8 @@ exports.default = (0, util_1.createRule)({
|
|
|
196
213
|
['MemberExpression[computed=true]'](node) {
|
|
197
214
|
if (isMemberAccessOfZero(node)) {
|
|
198
215
|
const object = node.object;
|
|
199
|
-
const
|
|
200
|
-
if (
|
|
216
|
+
const filterExpressions = parseArrayFilterExpressions(object);
|
|
217
|
+
if (filterExpressions.length !== 0) {
|
|
201
218
|
context.report({
|
|
202
219
|
node,
|
|
203
220
|
messageId: 'preferFind',
|
|
@@ -206,7 +223,7 @@ exports.default = (0, util_1.createRule)({
|
|
|
206
223
|
messageId: 'preferFindSuggestion',
|
|
207
224
|
fix: (fixer) => {
|
|
208
225
|
return [
|
|
209
|
-
generateFixToReplaceFilterWithFind(fixer, filterExpression),
|
|
226
|
+
...filterExpressions.map(filterExpression => generateFixToReplaceFilterWithFind(fixer, filterExpression)),
|
|
210
227
|
// Get rid of the [0].
|
|
211
228
|
generateFixToRemoveArrayElementAccess(fixer, object, node),
|
|
212
229
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-find.js","sourceRoot":"","sources":["../../src/rules/prefer-find.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,oDAA0D;AAE1D,sDAAwC;AAGxC,kCAMiB;AAEjB,kBAAe,IAAA,iBAAU,EAAC;IACxB,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,WAAW,EACT,0HAA0H;YAC5H,oBAAoB,EAAE,IAAI;SAC3B;QACD,QAAQ,EAAE;YACR,UAAU,EAAE,+CAA+C;YAC3D,oBAAoB,EAAE,4CAA4C;SACnE;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,cAAc,EAAE,IAAI;KACrB;IAED,cAAc,EAAE,EAAE;IAElB,MAAM,CAAC,OAAO;QACZ,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAOlD,SAAS,
|
|
1
|
+
{"version":3,"file":"prefer-find.js","sourceRoot":"","sources":["../../src/rules/prefer-find.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typescript-eslint/eslint-plugin",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.2.0",
|
|
4
4
|
"description": "TypeScript plugin for ESLint",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist",
|
|
@@ -61,10 +61,10 @@
|
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@eslint-community/regexpp": "^4.5.1",
|
|
64
|
-
"@typescript-eslint/scope-manager": "7.
|
|
65
|
-
"@typescript-eslint/type-utils": "7.
|
|
66
|
-
"@typescript-eslint/utils": "7.
|
|
67
|
-
"@typescript-eslint/visitor-keys": "7.
|
|
64
|
+
"@typescript-eslint/scope-manager": "7.2.0",
|
|
65
|
+
"@typescript-eslint/type-utils": "7.2.0",
|
|
66
|
+
"@typescript-eslint/utils": "7.2.0",
|
|
67
|
+
"@typescript-eslint/visitor-keys": "7.2.0",
|
|
68
68
|
"debug": "^4.3.4",
|
|
69
69
|
"graphemer": "^1.4.0",
|
|
70
70
|
"ignore": "^5.2.4",
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
"@types/debug": "*",
|
|
77
77
|
"@types/marked": "*",
|
|
78
78
|
"@types/natural-compare": "*",
|
|
79
|
-
"@typescript-eslint/rule-schema-to-typescript-types": "7.
|
|
80
|
-
"@typescript-eslint/rule-tester": "7.
|
|
79
|
+
"@typescript-eslint/rule-schema-to-typescript-types": "7.2.0",
|
|
80
|
+
"@typescript-eslint/rule-tester": "7.2.0",
|
|
81
81
|
"ajv": "^6.12.6",
|
|
82
82
|
"chalk": "^5.3.0",
|
|
83
83
|
"cross-env": "^7.0.3",
|