@pobammer-ts/eslint-cease-nonsense-rules 0.10.1 → 1.0.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/dist/rules/ban-react-fc.js +6 -37
- package/dist/rules/ban-react-fc.js.map +1 -1
- package/dist/rules/enforce-ianitor-check-type.d.ts +7 -0
- package/dist/rules/enforce-ianitor-check-type.js +71 -159
- package/dist/rules/enforce-ianitor-check-type.js.map +1 -1
- package/dist/rules/no-color3-constructor.d.ts +0 -17
- package/dist/rules/no-color3-constructor.js +11 -32
- package/dist/rules/no-color3-constructor.js.map +1 -1
- package/dist/rules/no-instance-methods-without-this.js +2 -3
- package/dist/rules/no-instance-methods-without-this.js.map +1 -1
- package/dist/rules/no-print.d.ts +0 -15
- package/dist/rules/no-print.js +0 -21
- package/dist/rules/no-print.js.map +1 -1
- package/dist/rules/no-shorthand-names.d.ts +0 -24
- package/dist/rules/no-shorthand-names.js +32 -86
- package/dist/rules/no-shorthand-names.js.map +1 -1
- package/dist/rules/no-warn.d.ts +0 -15
- package/dist/rules/no-warn.js +0 -21
- package/dist/rules/no-warn.js.map +1 -1
- package/dist/rules/prefer-sequence-overloads.js +26 -23
- package/dist/rules/prefer-sequence-overloads.js.map +1 -1
- package/dist/rules/prefer-udim2-shorthand.d.ts +0 -14
- package/dist/rules/prefer-udim2-shorthand.js +138 -44
- package/dist/rules/prefer-udim2-shorthand.js.map +1 -1
- package/dist/rules/require-named-effect-functions.js +271 -59
- package/dist/rules/require-named-effect-functions.js.map +1 -1
- package/dist/rules/require-react-component-keys.d.ts +3 -39
- package/dist/rules/require-react-component-keys.js +58 -158
- package/dist/rules/require-react-component-keys.js.map +1 -1
- package/dist/rules/use-exhaustive-dependencies.d.ts +0 -59
- package/dist/rules/use-exhaustive-dependencies.js +120 -329
- package/dist/rules/use-exhaustive-dependencies.js.map +1 -1
- package/dist/rules/use-hook-at-top-level.js +17 -118
- package/dist/rules/use-hook-at-top-level.js.map +1 -1
- package/package.json +11 -8
|
@@ -1,45 +1,9 @@
|
|
|
1
1
|
import type { TSESLint } from "@typescript-eslint/utils";
|
|
2
|
-
/**
|
|
3
|
-
* Configuration options for the require-react-component-keys rule.
|
|
4
|
-
*
|
|
5
|
-
* @example
|
|
6
|
-
* // Roblox-TS project with custom utilities
|
|
7
|
-
* {
|
|
8
|
-
* "cease-nonsense/require-react-component-keys": ["error", {
|
|
9
|
-
* "iterationMethods": ["map", "filter", "forEach", "each"],
|
|
10
|
-
* "memoizationHooks": ["useCallback", "useMemo", "useBinding"]
|
|
11
|
-
* }]
|
|
12
|
-
* }
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* // Lodash/Ramda project
|
|
16
|
-
* {
|
|
17
|
-
* "cease-nonsense/require-react-component-keys": ["error", {
|
|
18
|
-
* "iterationMethods": ["map", "filter", "forEach", "each", "forOwn"]
|
|
19
|
-
* }]
|
|
20
|
-
* }
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* // Remove specific methods from being flagged
|
|
24
|
-
* {
|
|
25
|
-
* "cease-nonsense/require-react-component-keys": ["error", {
|
|
26
|
-
* "iterationMethods": ["map", "filter"] // Allow forEach without keys
|
|
27
|
-
* }]
|
|
28
|
-
* }
|
|
29
|
-
*/
|
|
30
2
|
interface RuleOptions {
|
|
31
3
|
readonly allowRootKeys?: boolean;
|
|
32
|
-
readonly ignoreCallExpressions?:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
* Defaults to standard array methods like 'map', 'filter', 'forEach', etc.
|
|
36
|
-
*/
|
|
37
|
-
readonly iterationMethods?: Array<string>;
|
|
38
|
-
/**
|
|
39
|
-
* Hook names that indicate memoization contexts where keys are required.
|
|
40
|
-
* Defaults to React hooks like 'useCallback' and 'useMemo'.
|
|
41
|
-
*/
|
|
42
|
-
readonly memoizationHooks?: Array<string>;
|
|
4
|
+
readonly ignoreCallExpressions?: ReadonlyArray<string>;
|
|
5
|
+
readonly iterationMethods?: ReadonlyArray<string>;
|
|
6
|
+
readonly memoizationHooks?: ReadonlyArray<string>;
|
|
43
7
|
}
|
|
44
8
|
type Options = [RuleOptions?];
|
|
45
9
|
type MessageIds = "missingKey" | "rootComponentWithKey";
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { TSESTree } from "@typescript-eslint/types";
|
|
2
|
-
/**
|
|
3
|
-
* Default configuration values for the rule.
|
|
4
|
-
*/
|
|
5
2
|
const DEFAULT_OPTIONS = {
|
|
6
3
|
allowRootKeys: false,
|
|
7
4
|
ignoreCallExpressions: ["ReactTree.mount", "CreateReactStory"],
|
|
@@ -19,10 +16,6 @@ const DEFAULT_OPTIONS = {
|
|
|
19
16
|
],
|
|
20
17
|
memoizationHooks: ["useCallback", "useMemo"],
|
|
21
18
|
};
|
|
22
|
-
/**
|
|
23
|
-
* Parent node types that simply wrap another expression without changing its semantics.
|
|
24
|
-
* These should be skipped when walking up the AST to analyze structural context.
|
|
25
|
-
*/
|
|
26
19
|
const WRAPPER_PARENT_TYPES = new Set([
|
|
27
20
|
"ParenthesizedExpression",
|
|
28
21
|
"TSAsExpression",
|
|
@@ -32,9 +25,6 @@ const WRAPPER_PARENT_TYPES = new Set([
|
|
|
32
25
|
"TSInstantiationExpression",
|
|
33
26
|
"ChainExpression",
|
|
34
27
|
]);
|
|
35
|
-
/**
|
|
36
|
-
* Node types that act as transparent wrappers when walking from a call argument to its call expression.
|
|
37
|
-
*/
|
|
38
28
|
const ARGUMENT_WRAPPER_TYPES = new Set([
|
|
39
29
|
...WRAPPER_PARENT_TYPES,
|
|
40
30
|
"AwaitExpression",
|
|
@@ -43,116 +33,73 @@ const ARGUMENT_WRAPPER_TYPES = new Set([
|
|
|
43
33
|
"SequenceExpression",
|
|
44
34
|
"SpreadElement",
|
|
45
35
|
]);
|
|
46
|
-
/**
|
|
47
|
-
* Walks up the AST from a starting node, skipping wrapper expressions that do not
|
|
48
|
-
* materially affect JSX placement (e.g. parentheses, type assertions).
|
|
49
|
-
*
|
|
50
|
-
* @param node - The starting node whose wrappers should be skipped.
|
|
51
|
-
* @returns The first ancestor node that is not a simple wrapper, or undefined.
|
|
52
|
-
*/
|
|
53
36
|
function ascendPastWrappers(node) {
|
|
54
37
|
let current = node;
|
|
55
38
|
while (current && WRAPPER_PARENT_TYPES.has(current.type))
|
|
56
39
|
current = current.parent;
|
|
57
40
|
return current;
|
|
58
41
|
}
|
|
59
|
-
/**
|
|
60
|
-
* Checks if a JSX element has a key attribute.
|
|
61
|
-
*
|
|
62
|
-
* @param node - The JSX element to check.
|
|
63
|
-
* @returns True if the element has a key attribute.
|
|
64
|
-
*/
|
|
65
42
|
function hasKeyAttribute(node) {
|
|
66
43
|
for (const attribute of node.openingElement.attributes)
|
|
67
|
-
if (attribute.type ===
|
|
44
|
+
if (attribute.type === TSESTree.AST_NODE_TYPES.JSXAttribute && attribute.name.name === "key")
|
|
68
45
|
return true;
|
|
69
46
|
return false;
|
|
70
47
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Checks if a CallExpression is for React.forwardRef or React.memo.
|
|
73
|
-
*
|
|
74
|
-
* @param callExpr - The CallExpression to check.
|
|
75
|
-
* @returns True if the call is for forwardRef or memo.
|
|
76
|
-
*/
|
|
77
48
|
function isReactComponentHOC(callExpr) {
|
|
78
49
|
const { callee } = callExpr;
|
|
79
|
-
if (callee.type ===
|
|
50
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.Identifier)
|
|
80
51
|
return callee.name === "forwardRef" || callee.name === "memo";
|
|
81
|
-
if (callee.type ===
|
|
82
|
-
callee.object.type ===
|
|
52
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
53
|
+
callee.object.type === TSESTree.AST_NODE_TYPES.Identifier &&
|
|
83
54
|
callee.object.name === "React" &&
|
|
84
|
-
callee.property.type ===
|
|
55
|
+
callee.property.type === TSESTree.AST_NODE_TYPES.Identifier)
|
|
85
56
|
return callee.property.name === "forwardRef" || callee.property.name === "memo";
|
|
86
57
|
return false;
|
|
87
58
|
}
|
|
88
|
-
/**
|
|
89
|
-
* Finds the nearest function-like ancestor for a given node.
|
|
90
|
-
*
|
|
91
|
-
* @param node - The starting node.
|
|
92
|
-
* @returns The nearest function declaration/expression/arrow function ancestor if any.
|
|
93
|
-
*/
|
|
94
59
|
function getEnclosingFunctionLike(node) {
|
|
95
60
|
let current = node.parent;
|
|
96
61
|
while (current) {
|
|
97
|
-
if (current.type ===
|
|
98
|
-
current.type ===
|
|
99
|
-
current.type ===
|
|
62
|
+
if (current.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression ||
|
|
63
|
+
current.type === TSESTree.AST_NODE_TYPES.FunctionExpression ||
|
|
64
|
+
current.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration)
|
|
100
65
|
return current;
|
|
101
66
|
current = current.parent;
|
|
102
67
|
}
|
|
103
68
|
return undefined;
|
|
104
69
|
}
|
|
105
|
-
/**
|
|
106
|
-
* Checks if a CallExpression represents an array iteration or memoization context that requires keys.
|
|
107
|
-
*
|
|
108
|
-
* @param callExpr - The CallExpression to check.
|
|
109
|
-
* @param iterationMethods - Set of method names that indicate iteration contexts.
|
|
110
|
-
* @param memoizationHooks - Set of hook names that indicate memoization contexts.
|
|
111
|
-
* @returns True if the call represents an iteration or memo context.
|
|
112
|
-
*/
|
|
113
70
|
function isIterationOrMemoCallback(callExpr, iterationMethods, memoizationHooks) {
|
|
114
71
|
const { callee } = callExpr;
|
|
115
|
-
|
|
116
|
-
if (callee.type === "Identifier" && memoizationHooks.has(callee.name))
|
|
72
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.Identifier && memoizationHooks.has(callee.name))
|
|
117
73
|
return true;
|
|
118
|
-
if (callee.type ===
|
|
74
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
75
|
+
callee.property.type === TSESTree.AST_NODE_TYPES.Identifier) {
|
|
119
76
|
const methodName = callee.property.name;
|
|
120
|
-
// Check for Array iteration methods
|
|
121
77
|
if (iterationMethods.has(methodName))
|
|
122
78
|
return true;
|
|
123
|
-
// Check for Array.from with mapper
|
|
124
79
|
if (methodName === "from" &&
|
|
125
|
-
callee.object.type ===
|
|
126
|
-
callee.object.object.type ===
|
|
80
|
+
callee.object.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
81
|
+
callee.object.object.type === TSESTree.AST_NODE_TYPES.Identifier &&
|
|
127
82
|
callee.object.object.name === "Array" &&
|
|
128
|
-
callExpr.arguments.length >= 2
|
|
129
|
-
)
|
|
83
|
+
callExpr.arguments.length >= 2)
|
|
130
84
|
return true;
|
|
131
|
-
// Check for Array.prototype.[method].call pattern
|
|
132
85
|
if (methodName === "call" &&
|
|
133
|
-
callee.object.type ===
|
|
134
|
-
callee.object.object.type ===
|
|
135
|
-
callee.object.object.property.type ===
|
|
86
|
+
callee.object.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
87
|
+
callee.object.object.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
88
|
+
callee.object.object.property.type === TSESTree.AST_NODE_TYPES.Identifier &&
|
|
136
89
|
iterationMethods.has(callee.object.object.property.name))
|
|
137
90
|
return true;
|
|
138
91
|
}
|
|
139
92
|
return false;
|
|
140
93
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Walks upward from a potential call argument to find the enclosing CallExpression, if any.
|
|
143
|
-
*
|
|
144
|
-
* @param node - The starting node.
|
|
145
|
-
* @returns The nearest CallExpression where the node participates as an argument.
|
|
146
|
-
*/
|
|
147
94
|
function findEnclosingCallExpression(node) {
|
|
148
95
|
let current = node;
|
|
149
96
|
let parent = node.parent;
|
|
150
97
|
while (parent) {
|
|
151
|
-
if (parent.type ===
|
|
98
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.CallExpression) {
|
|
152
99
|
for (const argument of parent.arguments) {
|
|
153
100
|
if (argument === current)
|
|
154
101
|
return parent;
|
|
155
|
-
if (argument.type ===
|
|
102
|
+
if (argument.type === TSESTree.AST_NODE_TYPES.SpreadElement && argument.argument === current)
|
|
156
103
|
return parent;
|
|
157
104
|
}
|
|
158
105
|
return undefined;
|
|
@@ -166,13 +113,6 @@ function findEnclosingCallExpression(node) {
|
|
|
166
113
|
}
|
|
167
114
|
return undefined;
|
|
168
115
|
}
|
|
169
|
-
/**
|
|
170
|
-
* Fetches the declared variable associated with a function-like node, if any.
|
|
171
|
-
*
|
|
172
|
-
* @param context - ESLint rule context.
|
|
173
|
-
* @param functionLike - The function-like node.
|
|
174
|
-
* @returns The corresponding scope variable, when available.
|
|
175
|
-
*/
|
|
176
116
|
function getVariableForFunction(context, functionLike) {
|
|
177
117
|
if (functionLike.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration) {
|
|
178
118
|
const declared = context.sourceCode.getDeclaredVariables(functionLike);
|
|
@@ -180,7 +120,7 @@ function getVariableForFunction(context, functionLike) {
|
|
|
180
120
|
return declared[0];
|
|
181
121
|
return undefined;
|
|
182
122
|
}
|
|
183
|
-
const parent = functionLike
|
|
123
|
+
const { parent } = functionLike;
|
|
184
124
|
if (!parent)
|
|
185
125
|
return undefined;
|
|
186
126
|
if (parent.type === TSESTree.AST_NODE_TYPES.VariableDeclarator ||
|
|
@@ -191,45 +131,24 @@ function getVariableForFunction(context, functionLike) {
|
|
|
191
131
|
}
|
|
192
132
|
return undefined;
|
|
193
133
|
}
|
|
194
|
-
/**
|
|
195
|
-
* Checks whether a scope reference is used as an argument to a call expression that requires keys.
|
|
196
|
-
*
|
|
197
|
-
* @param reference - The reference to evaluate.
|
|
198
|
-
* @param iterationMethods - Set of method names that indicate iteration contexts.
|
|
199
|
-
* @param memoizationHooks - Set of hook names that indicate memoization contexts.
|
|
200
|
-
* @returns True if the reference participates in an iteration or memoization call as an argument.
|
|
201
|
-
*/
|
|
202
134
|
function referenceActsAsCallback(reference, iterationMethods, memoizationHooks) {
|
|
203
135
|
if (!reference.isRead())
|
|
204
136
|
return false;
|
|
205
137
|
const callExpression = findEnclosingCallExpression(reference.identifier);
|
|
206
138
|
if (!callExpression)
|
|
207
139
|
return false;
|
|
208
|
-
// React HOCs don't need keys on top-level returns
|
|
209
140
|
if (isReactComponentHOC(callExpression))
|
|
210
141
|
return false;
|
|
211
|
-
// Only iteration or memoization contexts need keys on top-level returns
|
|
212
142
|
return isIterationOrMemoCallback(callExpression, iterationMethods, memoizationHooks);
|
|
213
143
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
*
|
|
217
|
-
* @param context - ESLint rule context.
|
|
218
|
-
* @param fn - The function node to inspect.
|
|
219
|
-
* @param iterationMethods - Set of method names that indicate iteration contexts.
|
|
220
|
-
* @param memoizationHooks - Set of hook names that indicate memoization contexts.
|
|
221
|
-
* @returns True if the function participates in iteration or memoization invocations.
|
|
222
|
-
*/
|
|
223
|
-
function isFunctionUsedAsCallback(context, fn, iterationMethods, memoizationHooks) {
|
|
224
|
-
const inlineCall = findEnclosingCallExpression(fn);
|
|
144
|
+
function isFunctionUsedAsCallback(context, functionLike, iterationMethods, memoizationHooks) {
|
|
145
|
+
const inlineCall = findEnclosingCallExpression(functionLike);
|
|
225
146
|
if (inlineCall) {
|
|
226
|
-
// React HOCs don't need keys on top-level returns
|
|
227
147
|
if (isReactComponentHOC(inlineCall))
|
|
228
148
|
return false;
|
|
229
|
-
// Only iteration or memoization contexts need keys on top-level returns
|
|
230
149
|
return isIterationOrMemoCallback(inlineCall, iterationMethods, memoizationHooks);
|
|
231
150
|
}
|
|
232
|
-
const variable = getVariableForFunction(context,
|
|
151
|
+
const variable = getVariableForFunction(context, functionLike);
|
|
233
152
|
if (!variable)
|
|
234
153
|
return false;
|
|
235
154
|
for (const reference of variable.references)
|
|
@@ -237,76 +156,71 @@ function isFunctionUsedAsCallback(context, fn, iterationMethods, memoizationHook
|
|
|
237
156
|
return true;
|
|
238
157
|
return false;
|
|
239
158
|
}
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
159
|
+
const SHOULD_ASCEND_TYPES = new Set([
|
|
160
|
+
TSESTree.AST_NODE_TYPES.ConditionalExpression,
|
|
161
|
+
TSESTree.AST_NODE_TYPES.LogicalExpression,
|
|
162
|
+
]);
|
|
163
|
+
const IS_FUNCTION_EXPRESSION = new Set([
|
|
164
|
+
TSESTree.AST_NODE_TYPES.FunctionExpression,
|
|
165
|
+
TSESTree.AST_NODE_TYPES.ArrowFunctionExpression,
|
|
166
|
+
]);
|
|
246
167
|
function isTopLevelReturn(node) {
|
|
247
168
|
let parent = ascendPastWrappers(node.parent);
|
|
248
169
|
if (!parent)
|
|
249
170
|
return false;
|
|
250
|
-
if (parent.type ===
|
|
171
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer)
|
|
251
172
|
parent = ascendPastWrappers(parent.parent);
|
|
252
173
|
if (!parent)
|
|
253
174
|
return false;
|
|
254
|
-
while (parent && (parent.type
|
|
175
|
+
while (parent && SHOULD_ASCEND_TYPES.has(parent.type))
|
|
255
176
|
parent = ascendPastWrappers(parent.parent);
|
|
256
177
|
if (!parent)
|
|
257
178
|
return false;
|
|
258
|
-
if (parent.type ===
|
|
179
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer)
|
|
259
180
|
parent = ascendPastWrappers(parent.parent);
|
|
260
181
|
if (!parent)
|
|
261
182
|
return false;
|
|
262
|
-
if (parent.type ===
|
|
183
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.ReturnStatement) {
|
|
263
184
|
let currentNode = ascendPastWrappers(parent.parent);
|
|
264
|
-
if (currentNode?.type ===
|
|
185
|
+
if (currentNode?.type === TSESTree.AST_NODE_TYPES.BlockStatement)
|
|
265
186
|
currentNode = ascendPastWrappers(currentNode.parent);
|
|
266
187
|
if (!currentNode)
|
|
267
188
|
return false;
|
|
268
|
-
if (
|
|
189
|
+
if (IS_FUNCTION_EXPRESSION.has(currentNode.type)) {
|
|
269
190
|
const functionParent = ascendPastWrappers(currentNode.parent);
|
|
270
|
-
if (functionParent?.type ===
|
|
191
|
+
if (functionParent?.type === TSESTree.AST_NODE_TYPES.CallExpression)
|
|
271
192
|
return isReactComponentHOC(functionParent);
|
|
272
193
|
return true;
|
|
273
194
|
}
|
|
274
|
-
return currentNode.type ===
|
|
195
|
+
return currentNode.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration;
|
|
275
196
|
}
|
|
276
|
-
if (parent.type ===
|
|
197
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
277
198
|
const functionParent = ascendPastWrappers(parent.parent);
|
|
278
|
-
if (functionParent?.type ===
|
|
199
|
+
if (functionParent?.type === TSESTree.AST_NODE_TYPES.CallExpression)
|
|
279
200
|
return isReactComponentHOC(functionParent);
|
|
280
201
|
return true;
|
|
281
202
|
}
|
|
282
203
|
return false;
|
|
283
204
|
}
|
|
284
|
-
/**
|
|
285
|
-
* Checks if a JSX element is an argument to an ignored call expression.
|
|
286
|
-
*
|
|
287
|
-
* @param node - The JSX element or fragment to check.
|
|
288
|
-
* @param ignoreList - List of function names to ignore.
|
|
289
|
-
* @returns True if the element is passed to an ignored function.
|
|
290
|
-
*/
|
|
291
205
|
function isIgnoredCallExpression(node, ignoreList) {
|
|
292
206
|
let parent = node.parent;
|
|
293
207
|
if (!parent)
|
|
294
208
|
return false;
|
|
295
|
-
if (parent.type ===
|
|
209
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer) {
|
|
296
210
|
parent = parent.parent;
|
|
297
211
|
if (!parent)
|
|
298
212
|
return false;
|
|
299
213
|
}
|
|
300
214
|
const maxDepth = 20;
|
|
301
|
-
for (let depth = 0; depth < maxDepth && parent; depth
|
|
215
|
+
for (let depth = 0; depth < maxDepth && parent; depth += 1) {
|
|
302
216
|
const { type } = parent;
|
|
303
|
-
if (type ===
|
|
217
|
+
if (type === TSESTree.AST_NODE_TYPES.CallExpression) {
|
|
304
218
|
const { callee } = parent;
|
|
305
|
-
if (callee.type ===
|
|
219
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.Identifier)
|
|
306
220
|
return ignoreList.includes(callee.name);
|
|
307
|
-
if (callee.type ===
|
|
308
|
-
callee.object.type ===
|
|
309
|
-
callee.property.type ===
|
|
221
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
222
|
+
callee.object.type === TSESTree.AST_NODE_TYPES.Identifier &&
|
|
223
|
+
callee.property.type === TSESTree.AST_NODE_TYPES.Identifier)
|
|
310
224
|
return ignoreList.includes(`${callee.object.name}.${callee.property.name}`);
|
|
311
225
|
return false;
|
|
312
226
|
}
|
|
@@ -314,51 +228,35 @@ function isIgnoredCallExpression(node, ignoreList) {
|
|
|
314
228
|
}
|
|
315
229
|
return false;
|
|
316
230
|
}
|
|
317
|
-
/**
|
|
318
|
-
* Checks if a JSX element is passed as a prop value.
|
|
319
|
-
*
|
|
320
|
-
* @param node - The JSX element or fragment to check.
|
|
321
|
-
* @returns True if the element is passed as a prop value.
|
|
322
|
-
*/
|
|
323
231
|
function isJSXPropValue(node) {
|
|
324
|
-
let parent = node
|
|
232
|
+
let { parent } = node;
|
|
325
233
|
if (!parent)
|
|
326
234
|
return false;
|
|
327
|
-
while (parent &&
|
|
235
|
+
while (parent &&
|
|
236
|
+
(parent.type === TSESTree.AST_NODE_TYPES.ConditionalExpression ||
|
|
237
|
+
parent.type === TSESTree.AST_NODE_TYPES.LogicalExpression))
|
|
328
238
|
parent = parent.parent;
|
|
329
239
|
if (!parent)
|
|
330
240
|
return false;
|
|
331
|
-
if (parent.type ===
|
|
241
|
+
if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer) {
|
|
332
242
|
parent = parent.parent;
|
|
333
243
|
if (!parent)
|
|
334
244
|
return false;
|
|
335
245
|
}
|
|
336
|
-
return parent.type ===
|
|
246
|
+
return parent.type === TSESTree.AST_NODE_TYPES.JSXAttribute;
|
|
337
247
|
}
|
|
338
248
|
const docs = {
|
|
339
249
|
description: "Enforce key props on all React elements except top-level returns",
|
|
340
250
|
recommended: true,
|
|
341
251
|
};
|
|
342
252
|
const requireReactComponentKeys = {
|
|
343
|
-
/**
|
|
344
|
-
* Creates the ESLint rule visitor.
|
|
345
|
-
*
|
|
346
|
-
* @param context - The ESLint rule context.
|
|
347
|
-
* @returns The visitor object with AST node handlers.
|
|
348
|
-
*/
|
|
349
253
|
create(context) {
|
|
350
254
|
const options = {
|
|
351
255
|
...DEFAULT_OPTIONS,
|
|
352
256
|
...context.options[0],
|
|
353
257
|
};
|
|
354
|
-
// Convert arrays to Sets for performance
|
|
355
258
|
const iterationMethods = new Set(options.iterationMethods);
|
|
356
259
|
const memoizationHooks = new Set(options.memoizationHooks);
|
|
357
|
-
/**
|
|
358
|
-
* Checks a JSX element or fragment for required key prop.
|
|
359
|
-
*
|
|
360
|
-
* @param node - The JSX element or fragment to check.
|
|
361
|
-
*/
|
|
362
260
|
function checkElement(node) {
|
|
363
261
|
const functionLike = getEnclosingFunctionLike(node);
|
|
364
262
|
const isCallback = functionLike
|
|
@@ -366,7 +264,9 @@ const requireReactComponentKeys = {
|
|
|
366
264
|
: false;
|
|
367
265
|
const isRoot = isTopLevelReturn(node);
|
|
368
266
|
if (isRoot && !isCallback) {
|
|
369
|
-
if (!options.allowRootKeys &&
|
|
267
|
+
if (!options.allowRootKeys &&
|
|
268
|
+
node.type === TSESTree.AST_NODE_TYPES.JSXElement &&
|
|
269
|
+
hasKeyAttribute(node)) {
|
|
370
270
|
context.report({
|
|
371
271
|
messageId: "rootComponentWithKey",
|
|
372
272
|
node,
|
|
@@ -378,7 +278,7 @@ const requireReactComponentKeys = {
|
|
|
378
278
|
return;
|
|
379
279
|
if (isJSXPropValue(node))
|
|
380
280
|
return;
|
|
381
|
-
if (node.type ===
|
|
281
|
+
if (node.type === TSESTree.AST_NODE_TYPES.JSXFragment) {
|
|
382
282
|
context.report({
|
|
383
283
|
messageId: "missingKey",
|
|
384
284
|
node,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"require-react-component-keys.js","sourceRoot":"","sources":["../../src/rules/require-react-component-keys.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"require-react-component-keys.js","sourceRoot":"","sources":["../../src/rules/require-react-component-keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,14 @@
|
|
|
1
1
|
import { TSESTree } from "@typescript-eslint/types";
|
|
2
2
|
import type { Rule, Scope } from "eslint";
|
|
3
|
-
/**
|
|
4
|
-
* Stable result configuration.
|
|
5
|
-
*/
|
|
6
3
|
type StableResult = boolean | ReadonlySet<number> | ReadonlySet<string>;
|
|
7
4
|
declare function resetTestingMetrics(): void;
|
|
8
|
-
/**
|
|
9
|
-
* Minimal definition information used for stability analysis.
|
|
10
|
-
*/
|
|
11
5
|
interface VariableDefinitionLike {
|
|
12
6
|
readonly node: TSESTree.Node | Rule.Node;
|
|
13
7
|
readonly type: string;
|
|
14
8
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Minimal variable interface compatible with ESLint scope variables.
|
|
17
|
-
*/
|
|
18
9
|
interface VariableLike {
|
|
19
10
|
readonly defs: ReadonlyArray<VariableDefinitionLike>;
|
|
20
11
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Capture information from closure analysis.
|
|
23
|
-
*/
|
|
24
12
|
interface CaptureInfo {
|
|
25
13
|
readonly name: string;
|
|
26
14
|
readonly node: TSESTree.Node;
|
|
@@ -28,58 +16,11 @@ interface CaptureInfo {
|
|
|
28
16
|
readonly variable: VariableLike | undefined;
|
|
29
17
|
readonly depth: number;
|
|
30
18
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Checks if a stable array index is being accessed.
|
|
33
|
-
*
|
|
34
|
-
* @param stableResult - The stable result set.
|
|
35
|
-
* @param node - The variable declarator node.
|
|
36
|
-
* @param identifierName - The identifier name being accessed.
|
|
37
|
-
* @returns True if accessing a stable array index.
|
|
38
|
-
*/
|
|
39
19
|
declare function isStableArrayIndex(stableResult: StableResult | undefined, node: Scope.Definition["node"], identifierName: string): boolean;
|
|
40
|
-
/**
|
|
41
|
-
* Checks if a value is stable (doesn't need to be in dependencies).
|
|
42
|
-
*
|
|
43
|
-
* @param variable - The variable to check.
|
|
44
|
-
* @param identifierName - The identifier name being accessed.
|
|
45
|
-
* @param stableHooks - Map of stable hooks.
|
|
46
|
-
* @returns True if the value is stable.
|
|
47
|
-
*/
|
|
48
20
|
declare function isStableValue(variable: VariableLike | undefined, identifierName: string, stableHooks: Map<string, StableResult>): boolean;
|
|
49
|
-
/**
|
|
50
|
-
* Checks if an identifier is in a TypeScript type-only position.
|
|
51
|
-
* Type parameters and type annotations are compile-time only and should not be dependencies.
|
|
52
|
-
*
|
|
53
|
-
* @param identifier - The identifier node to check.
|
|
54
|
-
* @returns True if the identifier is in a type-only position.
|
|
55
|
-
*/
|
|
56
21
|
declare function isInTypePosition(identifier: TSESTree.Identifier): boolean;
|
|
57
|
-
/**
|
|
58
|
-
* Checks if a variable is declared directly in the component/hook body OR is a prop (parameter).
|
|
59
|
-
* Per React rules, only variables "declared directly inside the component body" are reactive.
|
|
60
|
-
* This includes props (function parameters).
|
|
61
|
-
* Variables from outer scopes (module-level, parent functions) are non-reactive.
|
|
62
|
-
*
|
|
63
|
-
* @param variable - The variable to check.
|
|
64
|
-
* @param closureNode - The closure node (useEffect callback, etc.).
|
|
65
|
-
* @returns True if the variable is declared in the component body or is a prop.
|
|
66
|
-
*/
|
|
67
22
|
declare function isDeclaredInComponentBody(variable: VariableLike, closureNode: TSESTree.Node): boolean;
|
|
68
|
-
/**
|
|
69
|
-
* Collects all captured identifiers from a closure.
|
|
70
|
-
*
|
|
71
|
-
* @param node - The closure node (function/arrow function).
|
|
72
|
-
* @param scope - The scope of the closure.
|
|
73
|
-
* @param sourceCode - The source code instance.
|
|
74
|
-
* @returns Array of captured identifiers.
|
|
75
|
-
*/
|
|
76
23
|
declare function collectCaptures(node: TSESTree.Node, scope: Scope.Scope, sourceCode: Rule.RuleContext["sourceCode"]): ReadonlyArray<CaptureInfo>;
|
|
77
|
-
/**
|
|
78
|
-
* Converts stableResult configuration to internal format.
|
|
79
|
-
*
|
|
80
|
-
* @param stableResult - The stable result configuration.
|
|
81
|
-
* @returns The internal stable result format.
|
|
82
|
-
*/
|
|
83
24
|
declare function convertStableResult(stableResult: boolean | number | ReadonlyArray<number> | ReadonlyArray<string>): StableResult;
|
|
84
25
|
declare const useExhaustiveDependencies: Rule.RuleModule;
|
|
85
26
|
export declare const __testing: {
|