@pobammer-ts/eslint-cease-nonsense-rules 0.10.0 → 0.11.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.
Files changed (32) hide show
  1. package/dist/rules/ban-react-fc.js +2 -30
  2. package/dist/rules/ban-react-fc.js.map +1 -1
  3. package/dist/rules/enforce-ianitor-check-type.js +69 -157
  4. package/dist/rules/enforce-ianitor-check-type.js.map +1 -1
  5. package/dist/rules/no-color3-constructor.d.ts +0 -17
  6. package/dist/rules/no-color3-constructor.js +9 -31
  7. package/dist/rules/no-color3-constructor.js.map +1 -1
  8. package/dist/rules/no-instance-methods-without-this.js +2 -3
  9. package/dist/rules/no-instance-methods-without-this.js.map +1 -1
  10. package/dist/rules/no-print.d.ts +0 -15
  11. package/dist/rules/no-print.js +0 -21
  12. package/dist/rules/no-print.js.map +1 -1
  13. package/dist/rules/no-shorthand-names.d.ts +0 -24
  14. package/dist/rules/no-shorthand-names.js +18 -72
  15. package/dist/rules/no-shorthand-names.js.map +1 -1
  16. package/dist/rules/no-warn.d.ts +0 -15
  17. package/dist/rules/no-warn.js +0 -21
  18. package/dist/rules/no-warn.js.map +1 -1
  19. package/dist/rules/prefer-sequence-overloads.js +9 -16
  20. package/dist/rules/prefer-sequence-overloads.js.map +1 -1
  21. package/dist/rules/prefer-udim2-shorthand.d.ts +0 -14
  22. package/dist/rules/prefer-udim2-shorthand.js +17 -46
  23. package/dist/rules/prefer-udim2-shorthand.js.map +1 -1
  24. package/dist/rules/require-named-effect-functions.js +197 -59
  25. package/dist/rules/require-named-effect-functions.js.map +1 -1
  26. package/dist/rules/require-react-component-keys.d.ts +5 -6
  27. package/dist/rules/require-react-component-keys.js +119 -129
  28. package/dist/rules/require-react-component-keys.js.map +1 -1
  29. package/dist/rules/use-exhaustive-dependencies.d.ts +0 -42
  30. package/dist/rules/use-exhaustive-dependencies.js +100 -227
  31. package/dist/rules/use-exhaustive-dependencies.js.map +1 -1
  32. package/package.json +9 -7
@@ -1,14 +1,21 @@
1
- /**
2
- * Default configuration values for the rule.
3
- */
1
+ import { TSESTree } from "@typescript-eslint/types";
4
2
  const DEFAULT_OPTIONS = {
5
3
  allowRootKeys: false,
6
4
  ignoreCallExpressions: ["ReactTree.mount", "CreateReactStory"],
5
+ iterationMethods: [
6
+ "map",
7
+ "filter",
8
+ "forEach",
9
+ "flatMap",
10
+ "reduce",
11
+ "reduceRight",
12
+ "some",
13
+ "every",
14
+ "find",
15
+ "findIndex",
16
+ ],
17
+ memoizationHooks: ["useCallback", "useMemo"],
7
18
  };
8
- /**
9
- * Parent node types that simply wrap another expression without changing its semantics.
10
- * These should be skipped when walking up the AST to analyze structural context.
11
- */
12
19
  const WRAPPER_PARENT_TYPES = new Set([
13
20
  "ParenthesizedExpression",
14
21
  "TSAsExpression",
@@ -18,9 +25,6 @@ const WRAPPER_PARENT_TYPES = new Set([
18
25
  "TSInstantiationExpression",
19
26
  "ChainExpression",
20
27
  ]);
21
- /**
22
- * Node types that act as transparent wrappers when walking from a call argument to its call expression.
23
- */
24
28
  const ARGUMENT_WRAPPER_TYPES = new Set([
25
29
  ...WRAPPER_PARENT_TYPES,
26
30
  "AwaitExpression",
@@ -29,37 +33,18 @@ const ARGUMENT_WRAPPER_TYPES = new Set([
29
33
  "SequenceExpression",
30
34
  "SpreadElement",
31
35
  ]);
32
- /**
33
- * Walks up the AST from a starting node, skipping wrapper expressions that do not
34
- * materially affect JSX placement (e.g. parentheses, type assertions).
35
- *
36
- * @param node - The starting node whose wrappers should be skipped.
37
- * @returns The first ancestor node that is not a simple wrapper, or undefined.
38
- */
39
36
  function ascendPastWrappers(node) {
40
37
  let current = node;
41
38
  while (current && WRAPPER_PARENT_TYPES.has(current.type))
42
39
  current = current.parent;
43
40
  return current;
44
41
  }
45
- /**
46
- * Checks if a JSX element has a key attribute.
47
- *
48
- * @param node - The JSX element to check.
49
- * @returns True if the element has a key attribute.
50
- */
51
42
  function hasKeyAttribute(node) {
52
43
  for (const attribute of node.openingElement.attributes)
53
44
  if (attribute.type === "JSXAttribute" && attribute.name.name === "key")
54
45
  return true;
55
46
  return false;
56
47
  }
57
- /**
58
- * Checks if a CallExpression is for React.forwardRef or React.memo.
59
- *
60
- * @param callExpr - The CallExpression to check.
61
- * @returns True if the call is for forwardRef or memo.
62
- */
63
48
  function isReactComponentHOC(callExpr) {
64
49
  const { callee } = callExpr;
65
50
  if (callee.type === "Identifier")
@@ -71,12 +56,6 @@ function isReactComponentHOC(callExpr) {
71
56
  return callee.property.name === "forwardRef" || callee.property.name === "memo";
72
57
  return false;
73
58
  }
74
- /**
75
- * Finds the nearest function-like ancestor for a given node.
76
- *
77
- * @param node - The starting node.
78
- * @returns The nearest function declaration/expression/arrow function ancestor if any.
79
- */
80
59
  function getEnclosingFunctionLike(node) {
81
60
  let current = node.parent;
82
61
  while (current) {
@@ -88,12 +67,29 @@ function getEnclosingFunctionLike(node) {
88
67
  }
89
68
  return undefined;
90
69
  }
91
- /**
92
- * Walks upward from a potential call argument to find the enclosing CallExpression, if any.
93
- *
94
- * @param node - The starting node.
95
- * @returns The nearest CallExpression where the node participates as an argument.
96
- */
70
+ function isIterationOrMemoCallback(callExpr, iterationMethods, memoizationHooks) {
71
+ const { callee } = callExpr;
72
+ if (callee.type === "Identifier" && memoizationHooks.has(callee.name))
73
+ return true;
74
+ if (callee.type === "MemberExpression" && callee.property.type === "Identifier") {
75
+ const methodName = callee.property.name;
76
+ if (iterationMethods.has(methodName))
77
+ return true;
78
+ if (methodName === "from" &&
79
+ callee.object.type === "MemberExpression" &&
80
+ callee.object.object.type === "Identifier" &&
81
+ callee.object.object.name === "Array" &&
82
+ callExpr.arguments.length >= 2)
83
+ return true;
84
+ if (methodName === "call" &&
85
+ callee.object.type === "MemberExpression" &&
86
+ callee.object.object.type === "MemberExpression" &&
87
+ callee.object.object.property.type === "Identifier" &&
88
+ iterationMethods.has(callee.object.object.property.name))
89
+ return true;
90
+ }
91
+ return false;
92
+ }
97
93
  function findEnclosingCallExpression(node) {
98
94
  let current = node;
99
95
  let parent = node.parent;
@@ -116,134 +112,114 @@ function findEnclosingCallExpression(node) {
116
112
  }
117
113
  return undefined;
118
114
  }
119
- /**
120
- * Fetches the declared variable associated with a function-like node, if any.
121
- *
122
- * @param context - ESLint rule context.
123
- * @param fn - The function-like node.
124
- * @returns The corresponding scope variable, when available.
125
- */
126
- function getVariableForFunction(context, fn) {
127
- if (fn.type === "FunctionDeclaration") {
128
- const declared = context.sourceCode.getDeclaredVariables(fn);
115
+ function getVariableForFunction(context, functionLike) {
116
+ if (functionLike.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration) {
117
+ const declared = context.sourceCode.getDeclaredVariables(functionLike);
129
118
  if (declared.length > 0)
130
119
  return declared[0];
131
120
  return undefined;
132
121
  }
133
- const parent = fn.parent;
122
+ const { parent } = functionLike;
134
123
  if (!parent)
135
124
  return undefined;
136
- if (parent.type === "VariableDeclarator" || parent.type === "AssignmentExpression") {
125
+ if (parent.type === TSESTree.AST_NODE_TYPES.VariableDeclarator ||
126
+ parent.type === TSESTree.AST_NODE_TYPES.AssignmentExpression) {
137
127
  const declared = context.sourceCode.getDeclaredVariables(parent);
138
128
  if (declared.length > 0)
139
129
  return declared[0];
140
130
  }
141
131
  return undefined;
142
132
  }
143
- /**
144
- * Checks whether a scope reference is used as an argument to a call expression that is not a React HOC.
145
- *
146
- * @param reference - The reference to evaluate.
147
- * @returns True if the reference participates in a non-HOC call as an argument.
148
- */
149
- function referenceActsAsCallback(reference) {
133
+ function referenceActsAsCallback(reference, iterationMethods, memoizationHooks) {
150
134
  if (!reference.isRead())
151
135
  return false;
152
136
  const callExpression = findEnclosingCallExpression(reference.identifier);
153
137
  if (!callExpression)
154
138
  return false;
155
- return !isReactComponentHOC(callExpression);
139
+ if (isReactComponentHOC(callExpression))
140
+ return false;
141
+ return isIterationOrMemoCallback(callExpression, iterationMethods, memoizationHooks);
156
142
  }
157
- /**
158
- * Determines whether a function-like node is used as a callback (passed to a call expression),
159
- * excluding known React component HOCs.
160
- *
161
- * @param context - ESLint rule context.
162
- * @param fn - The function node to inspect.
163
- * @returns True if the function participates in callback invocations.
164
- */
165
- function isFunctionUsedAsCallback(context, fn) {
166
- const inlineCall = findEnclosingCallExpression(fn);
167
- if (inlineCall && !isReactComponentHOC(inlineCall))
168
- return true;
169
- const variable = getVariableForFunction(context, fn);
143
+ function isFunctionUsedAsCallback(context, functionLike, iterationMethods, memoizationHooks) {
144
+ const inlineCall = findEnclosingCallExpression(functionLike);
145
+ if (inlineCall) {
146
+ if (isReactComponentHOC(inlineCall))
147
+ return false;
148
+ return isIterationOrMemoCallback(inlineCall, iterationMethods, memoizationHooks);
149
+ }
150
+ const variable = getVariableForFunction(context, functionLike);
170
151
  if (!variable)
171
152
  return false;
172
153
  for (const reference of variable.references)
173
- if (referenceActsAsCallback(reference))
154
+ if (referenceActsAsCallback(reference, iterationMethods, memoizationHooks))
174
155
  return true;
175
156
  return false;
176
157
  }
177
- /**
178
- * Checks if a JSX element is a top-level return from a component.
179
- *
180
- * @param node - The JSX element or fragment to check.
181
- * @returns True if the element is directly returned from a component.
182
- */
158
+ const SHOULD_ASCEND_TYPES = new Set([
159
+ TSESTree.AST_NODE_TYPES.ConditionalExpression,
160
+ TSESTree.AST_NODE_TYPES.LogicalExpression,
161
+ ]);
162
+ const IS_FUNCTION_EXPRESSION = new Set([
163
+ TSESTree.AST_NODE_TYPES.FunctionExpression,
164
+ TSESTree.AST_NODE_TYPES.ArrowFunctionExpression,
165
+ ]);
183
166
  function isTopLevelReturn(node) {
184
167
  let parent = ascendPastWrappers(node.parent);
185
168
  if (!parent)
186
169
  return false;
187
- if (parent.type === "JSXExpressionContainer")
170
+ if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer)
188
171
  parent = ascendPastWrappers(parent.parent);
189
172
  if (!parent)
190
173
  return false;
191
- while (parent && (parent.type === "ConditionalExpression" || parent.type === "LogicalExpression"))
174
+ while (parent && SHOULD_ASCEND_TYPES.has(parent.type))
192
175
  parent = ascendPastWrappers(parent.parent);
193
176
  if (!parent)
194
177
  return false;
195
- if (parent.type === "JSXExpressionContainer")
178
+ if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer)
196
179
  parent = ascendPastWrappers(parent.parent);
197
180
  if (!parent)
198
181
  return false;
199
- if (parent.type === "ReturnStatement") {
182
+ if (parent.type === TSESTree.AST_NODE_TYPES.ReturnStatement) {
200
183
  let currentNode = ascendPastWrappers(parent.parent);
201
- if (currentNode?.type === "BlockStatement")
184
+ if (currentNode?.type === TSESTree.AST_NODE_TYPES.BlockStatement)
202
185
  currentNode = ascendPastWrappers(currentNode.parent);
203
186
  if (!currentNode)
204
187
  return false;
205
- if (currentNode.type === "ArrowFunctionExpression" || currentNode.type === "FunctionExpression") {
188
+ if (IS_FUNCTION_EXPRESSION.has(currentNode.type)) {
206
189
  const functionParent = ascendPastWrappers(currentNode.parent);
207
- if (functionParent?.type === "CallExpression")
190
+ if (functionParent?.type === TSESTree.AST_NODE_TYPES.CallExpression)
208
191
  return isReactComponentHOC(functionParent);
209
192
  return true;
210
193
  }
211
- return currentNode.type === "FunctionDeclaration";
194
+ return currentNode.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration;
212
195
  }
213
- if (parent.type === "ArrowFunctionExpression") {
196
+ if (parent.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
214
197
  const functionParent = ascendPastWrappers(parent.parent);
215
- if (functionParent?.type === "CallExpression")
198
+ if (functionParent?.type === TSESTree.AST_NODE_TYPES.CallExpression)
216
199
  return isReactComponentHOC(functionParent);
217
200
  return true;
218
201
  }
219
202
  return false;
220
203
  }
221
- /**
222
- * Checks if a JSX element is an argument to an ignored call expression.
223
- *
224
- * @param node - The JSX element or fragment to check.
225
- * @param ignoreList - List of function names to ignore.
226
- * @returns True if the element is passed to an ignored function.
227
- */
228
204
  function isIgnoredCallExpression(node, ignoreList) {
229
205
  let parent = node.parent;
230
206
  if (!parent)
231
207
  return false;
232
- if (parent.type === "JSXExpressionContainer") {
208
+ if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer) {
233
209
  parent = parent.parent;
234
210
  if (!parent)
235
211
  return false;
236
212
  }
237
213
  const maxDepth = 20;
238
- for (let depth = 0; depth < maxDepth && parent; depth++) {
214
+ for (let depth = 0; depth < maxDepth && parent; depth += 1) {
239
215
  const { type } = parent;
240
- if (type === "CallExpression") {
216
+ if (type === TSESTree.AST_NODE_TYPES.CallExpression) {
241
217
  const { callee } = parent;
242
- if (callee.type === "Identifier")
218
+ if (callee.type === TSESTree.AST_NODE_TYPES.Identifier)
243
219
  return ignoreList.includes(callee.name);
244
- if (callee.type === "MemberExpression" &&
245
- callee.object.type === "Identifier" &&
246
- callee.property.type === "Identifier")
220
+ if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
221
+ callee.object.type === TSESTree.AST_NODE_TYPES.Identifier &&
222
+ callee.property.type === TSESTree.AST_NODE_TYPES.Identifier)
247
223
  return ignoreList.includes(`${callee.object.name}.${callee.property.name}`);
248
224
  return false;
249
225
  }
@@ -251,54 +227,45 @@ function isIgnoredCallExpression(node, ignoreList) {
251
227
  }
252
228
  return false;
253
229
  }
254
- /**
255
- * Checks if a JSX element is passed as a prop value.
256
- *
257
- * @param node - The JSX element or fragment to check.
258
- * @returns True if the element is passed as a prop value.
259
- */
260
230
  function isJSXPropValue(node) {
261
- let parent = node.parent;
231
+ let { parent } = node;
262
232
  if (!parent)
263
233
  return false;
264
- while (parent && (parent.type === "ConditionalExpression" || parent.type === "LogicalExpression"))
234
+ while (parent &&
235
+ (parent.type === TSESTree.AST_NODE_TYPES.ConditionalExpression ||
236
+ parent.type === TSESTree.AST_NODE_TYPES.LogicalExpression))
265
237
  parent = parent.parent;
266
238
  if (!parent)
267
239
  return false;
268
- if (parent.type === "JSXExpressionContainer") {
240
+ if (parent.type === TSESTree.AST_NODE_TYPES.JSXExpressionContainer) {
269
241
  parent = parent.parent;
270
242
  if (!parent)
271
243
  return false;
272
244
  }
273
- return parent.type === "JSXAttribute";
245
+ return parent.type === TSESTree.AST_NODE_TYPES.JSXAttribute;
274
246
  }
275
247
  const docs = {
276
248
  description: "Enforce key props on all React elements except top-level returns",
277
249
  recommended: true,
278
250
  };
279
251
  const requireReactComponentKeys = {
280
- /**
281
- * Creates the ESLint rule visitor.
282
- *
283
- * @param context - The ESLint rule context.
284
- * @returns The visitor object with AST node handlers.
285
- */
286
252
  create(context) {
287
253
  const options = {
288
254
  ...DEFAULT_OPTIONS,
289
255
  ...context.options[0],
290
256
  };
291
- /**
292
- * Checks a JSX element or fragment for required key prop.
293
- *
294
- * @param node - The JSX element or fragment to check.
295
- */
257
+ const iterationMethods = new Set(options.iterationMethods);
258
+ const memoizationHooks = new Set(options.memoizationHooks);
296
259
  function checkElement(node) {
297
260
  const functionLike = getEnclosingFunctionLike(node);
298
- const isCallback = functionLike ? isFunctionUsedAsCallback(context, functionLike) : false;
261
+ const isCallback = functionLike
262
+ ? isFunctionUsedAsCallback(context, functionLike, iterationMethods, memoizationHooks)
263
+ : false;
299
264
  const isRoot = isTopLevelReturn(node);
300
265
  if (isRoot && !isCallback) {
301
- if (!options.allowRootKeys && node.type === "JSXElement" && hasKeyAttribute(node)) {
266
+ if (!options.allowRootKeys &&
267
+ node.type === TSESTree.AST_NODE_TYPES.JSXElement &&
268
+ hasKeyAttribute(node)) {
302
269
  context.report({
303
270
  messageId: "rootComponentWithKey",
304
271
  node,
@@ -310,7 +277,7 @@ const requireReactComponentKeys = {
310
277
  return;
311
278
  if (isJSXPropValue(node))
312
279
  return;
313
- if (node.type === "JSXFragment") {
280
+ if (node.type === TSESTree.AST_NODE_TYPES.JSXFragment) {
314
281
  context.report({
315
282
  messageId: "missingKey",
316
283
  node,
@@ -355,6 +322,29 @@ const requireReactComponentKeys = {
355
322
  items: { type: "string" },
356
323
  type: "array",
357
324
  },
325
+ iterationMethods: {
326
+ default: [
327
+ "map",
328
+ "filter",
329
+ "forEach",
330
+ "flatMap",
331
+ "reduce",
332
+ "reduceRight",
333
+ "some",
334
+ "every",
335
+ "find",
336
+ "findIndex",
337
+ ],
338
+ description: "Array method names that indicate iteration contexts where keys are required",
339
+ items: { type: "string" },
340
+ type: "array",
341
+ },
342
+ memoizationHooks: {
343
+ default: ["useCallback", "useMemo"],
344
+ description: "Hook names that indicate memoization contexts where keys are required",
345
+ items: { type: "string" },
346
+ type: "array",
347
+ },
358
348
  },
359
349
  type: "object",
360
350
  },
@@ -1 +1 @@
1
- {"version":3,"file":"require-react-component-keys.js","sourceRoot":"","sources":["../../src/rules/require-react-component-keys.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,eAAe,GAA0B;IAC9C,aAAa,EAAE,KAAK;IACpB,qBAAqB,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;CAC9D,CAAC;AAEF;;;GAGG;AACH,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACpC,yBAAyB;IACzB,gBAAgB;IAChB,uBAAuB;IACvB,iBAAiB;IACjB,qBAAqB;IACrB,2BAA2B;IAC3B,iBAAiB;CACjB,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IACtC,GAAG,oBAAoB;IACvB,iBAAiB;IACjB,uBAAuB;IACvB,mBAAmB;IACnB,oBAAoB;IACpB,eAAe;CACf,CAAC,CAAC;AAQH;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,IAA+B;IAC1D,IAAI,OAAO,GAAG,IAAI,CAAC;IACnB,OAAO,OAAO,IAAI,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IACnF,OAAO,OAAO,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAAyB;IACjD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU;QACrD,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;IAErF,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,QAAiC;IAC7D,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;IAE5B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC;IAEhG,IACC,MAAM,CAAC,IAAI,KAAK,kBAAkB;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;QAC9B,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;QAErC,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC;IAEjF,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,IAAmB;IACpD,IAAI,OAAO,GAA8B,IAAI,CAAC,MAAM,CAAC;IAErD,OAAO,OAAO,EAAE,CAAC;QAChB,IACC,OAAO,CAAC,IAAI,KAAK,yBAAyB;YAC1C,OAAO,CAAC,IAAI,KAAK,oBAAoB;YACrC,OAAO,CAAC,IAAI,KAAK,qBAAqB;YAEtC,OAAO,OAAO,CAAC;QAEhB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC1B,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,2BAA2B,CAAC,IAAmB;IACvD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAEzB,OAAO,MAAM,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;YACtC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACzC,IAAI,QAAQ,KAAK,OAAO;oBAAE,OAAO,MAAM,CAAC;gBACxC,IAAI,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO;oBAAE,OAAO,MAAM,CAAC;YACvF,CAAC;YACD,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,MAAM,CAAC;YACjB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvB,SAAS;QACV,CAAC;QAED,MAAM;IACP,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAC9B,OAAkD,EAClD,EAAgB;IAEhB,IAAI,EAAE,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5C,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;QACpF,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAAC,SAAmC;IACnE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtC,MAAM,cAAc,GAAG,2BAA2B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACzE,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAElC,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,wBAAwB,CAAC,OAAkD,EAAE,EAAgB;IACrG,MAAM,UAAU,GAAG,2BAA2B,CAAC,EAAE,CAAC,CAAC;IACnD,IAAI,UAAU,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,UAAU;QAAE,IAAI,uBAAuB,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;IAEjG,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,IAAgD;IACzE,IAAI,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;QAAE,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,uBAAuB,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC;QAChG,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB;QAAE,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACvC,IAAI,WAAW,GAA8B,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/E,IAAI,WAAW,EAAE,IAAI,KAAK,gBAAgB;YAAE,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEjG,IAAI,CAAC,WAAW;YAAE,OAAO,KAAK,CAAC;QAE/B,IAAI,WAAW,CAAC,IAAI,KAAK,yBAAyB,IAAI,WAAW,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;YACjG,MAAM,cAAc,GAAG,kBAAkB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAE9D,IAAI,cAAc,EAAE,IAAI,KAAK,gBAAgB;gBAAE,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC;YAE1F,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,WAAW,CAAC,IAAI,KAAK,qBAAqB,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;QAC/C,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,IAAI,cAAc,EAAE,IAAI,KAAK,gBAAgB;YAAE,OAAO,mBAAmB,CAAC,cAAc,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,uBAAuB,CAAC,IAAgD,EAAE,UAAoB;IACtG,IAAI,MAAM,GAA8B,IAAI,CAAC,MAAM,CAAC;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;IAC3B,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,IAAI,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACzD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;QAExB,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;YAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1E,IACC,MAAM,CAAC,IAAI,KAAK,kBAAkB;gBAClC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY;gBACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY;gBAErC,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAE7E,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,cAAc,CAAC,IAAgD;IACvE,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,uBAAuB,IAAI,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC;QAChG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAExB,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAE1B,IAAI,MAAM,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC;AACvC,CAAC;AAED,MAAM,IAAI,GAA4B;IACrC,WAAW,EAAE,kEAAkE;IAC/E,WAAW,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,yBAAyB,GAAkF;IAChH;;;;;OAKG;IACH,MAAM,CAAC,OAAO;QACb,MAAM,OAAO,GAA0B;YACtC,GAAG,eAAe;YAClB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;SACrB,CAAC;QAEF;;;;WAIG;QACH,SAAS,YAAY,CAAC,IAAgD;YACrE,MAAM,YAAY,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,wBAAwB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1F,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEtC,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnF,OAAO,CAAC,MAAM,CAAC;wBACd,SAAS,EAAE,sBAAsB;wBACjC,IAAI;qBACJ,CAAC,CAAC;gBACJ,CAAC;gBACD,OAAO;YACR,CAAC;YAED,IAAI,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,qBAAqB,CAAC;gBAAE,OAAO;YACzE,IAAI,cAAc,CAAC,IAAI,CAAC;gBAAE,OAAO;YAEjC,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACjC,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,YAAY;oBACvB,IAAI;iBACJ,CAAC,CAAC;gBACH,OAAO;YACR,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC;oBACd,SAAS,EAAE,YAAY;oBACvB,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,OAAO;YACN,UAAU,CAAC,IAAI;gBACd,YAAY,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;YAED,WAAW,CAAC,IAAI;gBACf,YAAY,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;SACD,CAAC;IACH,CAAC;IACD,cAAc,EAAE,CAAC,eAAe,CAAC;IACjC,IAAI,EAAE;QACL,IAAI;QACJ,QAAQ,EAAE;YACT,UAAU,EAAE,gEAAgE;YAC5E,oBAAoB,EAAE,kDAAkD;SACxE;QACD,MAAM,EAAE;YACP;gBACC,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACX,aAAa,EAAE;wBACd,OAAO,EAAE,KAAK;wBACd,WAAW,EAAE,2CAA2C;wBACxD,IAAI,EAAE,SAAS;qBACf;oBACD,qBAAqB,EAAE;wBACtB,OAAO,EAAE,CAAC,iBAAiB,CAAC;wBAC5B,WAAW,EAAE,oDAAoD;wBACjE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,IAAI,EAAE,OAAO;qBACb;iBACD;gBACD,IAAI,EAAE,QAAQ;aACd;SACD;QACD,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,yBAAyB,CAAC"}
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,23 +16,7 @@ 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
21
  /**
50
22
  * Checks if an identifier is in a TypeScript type-only position.
@@ -65,21 +37,7 @@ declare function isInTypePosition(identifier: TSESTree.Identifier): boolean;
65
37
  * @returns True if the variable is declared in the component body or is a prop.
66
38
  */
67
39
  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
40
  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
41
  declare function convertStableResult(stableResult: boolean | number | ReadonlyArray<number> | ReadonlyArray<string>): StableResult;
84
42
  declare const useExhaustiveDependencies: Rule.RuleModule;
85
43
  export declare const __testing: {