@pobammer-ts/eslint-cease-nonsense-rules 0.5.0 → 0.7.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 +77 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/rules/require-named-effect-functions.d.ts +3 -0
- package/dist/rules/require-named-effect-functions.js +137 -0
- package/dist/rules/require-named-effect-functions.js.map +1 -0
- package/dist/rules/require-react-component-keys.js +15 -113
- package/dist/rules/require-react-component-keys.js.map +1 -1
- package/dist/rules/use-exhaustive-dependencies.js +37 -12
- package/dist/rules/use-exhaustive-dependencies.js.map +1 -1
- package/package.json +9 -7
- package/dist/stricty +0 -3303
package/README.md
CHANGED
|
@@ -29,12 +29,19 @@ export default [
|
|
|
29
29
|
"cease-nonsense/no-print": "error",
|
|
30
30
|
"cease-nonsense/no-shorthand-names": "error",
|
|
31
31
|
"cease-nonsense/no-warn": "error",
|
|
32
|
+
"cease-nonsense/prefer-udim2-shorthand": "error",
|
|
33
|
+
"cease-nonsense/require-named-effect-functions": "error",
|
|
32
34
|
"cease-nonsense/require-react-component-keys": "error",
|
|
33
35
|
"cease-nonsense/use-exhaustive-dependencies": "error",
|
|
34
36
|
"cease-nonsense/use-hook-at-top-level": "error",
|
|
35
37
|
},
|
|
36
38
|
},
|
|
37
39
|
];
|
|
40
|
+
|
|
41
|
+
// Or just include the preset
|
|
42
|
+
export default [
|
|
43
|
+
ceaseNonsense.configs.recommended,
|
|
44
|
+
];
|
|
38
45
|
```
|
|
39
46
|
|
|
40
47
|
## Rules
|
|
@@ -114,6 +121,57 @@ function UserList({ users }) {
|
|
|
114
121
|
}
|
|
115
122
|
```
|
|
116
123
|
|
|
124
|
+
#### `require-named-effect-functions`
|
|
125
|
+
|
|
126
|
+
Enforce named effect functions for better debuggability. Prevent inline arrow functions in `useEffect` and similar hooks.
|
|
127
|
+
|
|
128
|
+
Behavior by environment (option `environment`):
|
|
129
|
+
|
|
130
|
+
- `roblox-ts` (default): only identifiers allowed (e.g., `useEffect(onTick, [...])`). Inline function expressions or arrows are reported.
|
|
131
|
+
- `standard`: identifiers and named function expressions are allowed; arrows are still reported.
|
|
132
|
+
|
|
133
|
+
Default hooks checked: `useEffect`, `useLayoutEffect`, `useInsertionEffect`.
|
|
134
|
+
|
|
135
|
+
**❌ Bad:**
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
// Arrow function
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
doThing();
|
|
141
|
+
}, [dep]);
|
|
142
|
+
|
|
143
|
+
// Anonymous function expression
|
|
144
|
+
useEffect(function () {
|
|
145
|
+
doThing();
|
|
146
|
+
}, [dep]);
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**✅ Good:**
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// Preferred: reference a named function
|
|
153
|
+
function onDepChange() {
|
|
154
|
+
doThing();
|
|
155
|
+
}
|
|
156
|
+
useEffect(onDepChange, [dep]);
|
|
157
|
+
|
|
158
|
+
// Allowed in `standard` mode
|
|
159
|
+
useEffect(function onDepChange() {
|
|
160
|
+
doThing();
|
|
161
|
+
}, [dep]);
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Configuration:**
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
{
|
|
168
|
+
"cease-nonsense/require-named-effect-functions": ["error", {
|
|
169
|
+
"environment": "roblox-ts", // or "standard"
|
|
170
|
+
"hooks": ["useEffect", "useLayoutEffect", "useInsertionEffect"]
|
|
171
|
+
}]
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
117
175
|
**✅ Good:**
|
|
118
176
|
|
|
119
177
|
```typescript
|
|
@@ -271,6 +329,25 @@ const blue = Color3.fromRGB(127, 127, 255);
|
|
|
271
329
|
const black = new Color3(0, 0, 0); // Allowed
|
|
272
330
|
```
|
|
273
331
|
|
|
332
|
+
#### `prefer-udim2-shorthand`
|
|
333
|
+
|
|
334
|
+
Prefer `UDim2.fromScale()` or `UDim2.fromOffset()` when all offsets or all scales are zero. Leaves `new UDim2(0, 0, 0, 0)` alone. Includes auto-fix.
|
|
335
|
+
|
|
336
|
+
**❌ Bad:**
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
new UDim2(1, 0, 1, 0);
|
|
340
|
+
new UDim2(0, 100, 0, 50);
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**✅ Good:**
|
|
344
|
+
|
|
345
|
+
```typescript
|
|
346
|
+
UDim2.fromScale(1, 1);
|
|
347
|
+
UDim2.fromOffset(100, 50);
|
|
348
|
+
new UDim2(0, 0, 0, 0); // Allowed
|
|
349
|
+
```
|
|
350
|
+
|
|
274
351
|
#### `no-shorthand-names`
|
|
275
352
|
|
|
276
353
|
Bans shorthand variable names in favor of descriptive full names.
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ declare const recommended: {
|
|
|
30
30
|
readonly "cease-nonsense/no-shorthand-names": "error";
|
|
31
31
|
readonly "cease-nonsense/no-warn": "error";
|
|
32
32
|
readonly "cease-nonsense/prefer-udim2-shorthand": "error";
|
|
33
|
+
readonly "cease-nonsense/require-named-effect-functions": "error";
|
|
33
34
|
readonly "cease-nonsense/require-react-component-keys": "error";
|
|
34
35
|
readonly "cease-nonsense/use-exhaustive-dependencies": "error";
|
|
35
36
|
readonly "cease-nonsense/use-hook-at-top-level": "error";
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import noPrint from "./rules/no-print";
|
|
|
4
4
|
import noShorthandNames from "./rules/no-shorthand-names";
|
|
5
5
|
import noWarn from "./rules/no-warn";
|
|
6
6
|
import preferUDim2Shorthand from "./rules/prefer-udim2-shorthand";
|
|
7
|
+
import requireNamedEffectFunctions from "./rules/require-named-effect-functions";
|
|
7
8
|
import requireReactComponentKeys from "./rules/require-react-component-keys";
|
|
8
9
|
import useExhaustiveDependencies from "./rules/use-exhaustive-dependencies";
|
|
9
10
|
import useHookAtTopLevel from "./rules/use-hook-at-top-level";
|
|
@@ -19,6 +20,7 @@ const rules = {
|
|
|
19
20
|
"no-shorthand-names": noShorthandNames,
|
|
20
21
|
"no-warn": noWarn,
|
|
21
22
|
"prefer-udim2-shorthand": preferUDim2Shorthand,
|
|
23
|
+
"require-named-effect-functions": requireNamedEffectFunctions,
|
|
22
24
|
"require-react-component-keys": requireReactComponentKeys,
|
|
23
25
|
"use-exhaustive-dependencies": useExhaustiveDependencies,
|
|
24
26
|
"use-hook-at-top-level": useHookAtTopLevel,
|
|
@@ -52,6 +54,7 @@ const recommended = {
|
|
|
52
54
|
"cease-nonsense/no-shorthand-names": "error",
|
|
53
55
|
"cease-nonsense/no-warn": "error",
|
|
54
56
|
"cease-nonsense/prefer-udim2-shorthand": "error",
|
|
57
|
+
"cease-nonsense/require-named-effect-functions": "error",
|
|
55
58
|
"cease-nonsense/require-react-component-keys": "error",
|
|
56
59
|
"cease-nonsense/use-exhaustive-dependencies": "error",
|
|
57
60
|
"cease-nonsense/use-hook-at-top-level": "error",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAChE,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,gBAAgB,MAAM,4BAA4B,CAAC;AAC1D,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,oBAAoB,MAAM,gCAAgC,CAAC;AAClE,OAAO,yBAAyB,MAAM,sCAAsC,CAAC;AAC7E,OAAO,yBAAyB,MAAM,qCAAqC,CAAC;AAC5E,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAI9D;;;;GAIG;AACH,MAAM,KAAK,GAA4C;IACtD,4BAA4B,EAAE,uBAAuB;IACrD,uBAAuB,EAAE,mBAAmB;IAC5C,UAAU,EAAE,OAAO;IACnB,oBAAoB,EAAE,gBAAgB;IACtC,SAAS,EAAE,MAAM;IACjB,wBAAwB,EAAE,oBAAoB;IAC9C,8BAA8B,EAAE,yBAAyB;IACzD,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,iBAAiB;CACjC,CAAC;AAEX;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,GAAG;IACnB,OAAO,EAAE;QACR,gBAAgB,EAAE;YACjB,KAAK;SACL;KACD;IACD,KAAK,EAAE;QACN,2CAA2C,EAAE,OAAO;QACpD,sCAAsC,EAAE,OAAO;QAC/C,yBAAyB,EAAE,OAAO;QAClC,mCAAmC,EAAE,OAAO;QAC5C,wBAAwB,EAAE,OAAO;QACjC,uCAAuC,EAAE,OAAO;QAChD,6CAA6C,EAAE,OAAO;QACtD,4CAA4C,EAAE,OAAO;QACrD,sCAAsC,EAAE,OAAO;KAC/C;CACQ,CAAC;AAWX,MAAM,MAAM,GAAW;IACtB,OAAO,EAAE,EAAE,WAAW,EAAE;IACxB,KAAK;CACI,CAAC;AAEX,eAAe,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,uBAAuB,MAAM,oCAAoC,CAAC;AACzE,OAAO,mBAAmB,MAAM,+BAA+B,CAAC;AAChE,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,gBAAgB,MAAM,4BAA4B,CAAC;AAC1D,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,oBAAoB,MAAM,gCAAgC,CAAC;AAClE,OAAO,2BAA2B,MAAM,wCAAwC,CAAC;AACjF,OAAO,yBAAyB,MAAM,sCAAsC,CAAC;AAC7E,OAAO,yBAAyB,MAAM,qCAAqC,CAAC;AAC5E,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAI9D;;;;GAIG;AACH,MAAM,KAAK,GAA4C;IACtD,4BAA4B,EAAE,uBAAuB;IACrD,uBAAuB,EAAE,mBAAmB;IAC5C,UAAU,EAAE,OAAO;IACnB,oBAAoB,EAAE,gBAAgB;IACtC,SAAS,EAAE,MAAM;IACjB,wBAAwB,EAAE,oBAAoB;IAC9C,gCAAgC,EAAE,2BAA2B;IAC7D,8BAA8B,EAAE,yBAAyB;IACzD,6BAA6B,EAAE,yBAAyB;IACxD,uBAAuB,EAAE,iBAAiB;CACjC,CAAC;AAEX;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,GAAG;IACnB,OAAO,EAAE;QACR,gBAAgB,EAAE;YACjB,KAAK;SACL;KACD;IACD,KAAK,EAAE;QACN,2CAA2C,EAAE,OAAO;QACpD,sCAAsC,EAAE,OAAO;QAC/C,yBAAyB,EAAE,OAAO;QAClC,mCAAmC,EAAE,OAAO;QAC5C,wBAAwB,EAAE,OAAO;QACjC,uCAAuC,EAAE,OAAO;QAChD,+CAA+C,EAAE,OAAO;QACxD,6CAA6C,EAAE,OAAO;QACtD,4CAA4C,EAAE,OAAO;QACrD,sCAAsC,EAAE,OAAO;KAC/C;CACQ,CAAC;AAWX,MAAM,MAAM,GAAW;IACtB,OAAO,EAAE,EAAE,WAAW,EAAE;IACxB,KAAK;CACI,CAAC;AAEX,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/types";
|
|
2
|
+
/**
|
|
3
|
+
* Default effect hooks to check.
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_HOOKS = ["useEffect", "useLayoutEffect", "useInsertionEffect"];
|
|
6
|
+
/**
|
|
7
|
+
* Parses and validates rule options.
|
|
8
|
+
*
|
|
9
|
+
* @param optionsInput - Raw options from ESLint context.
|
|
10
|
+
* @returns Validated options with defaults.
|
|
11
|
+
*/
|
|
12
|
+
function parseOptions(optionsInput) {
|
|
13
|
+
if (optionsInput === undefined) {
|
|
14
|
+
return {
|
|
15
|
+
environment: "roblox-ts",
|
|
16
|
+
hooks: DEFAULT_HOOKS,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (typeof optionsInput !== "object" || optionsInput === null) {
|
|
20
|
+
return {
|
|
21
|
+
environment: "roblox-ts",
|
|
22
|
+
hooks: DEFAULT_HOOKS,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const opts = optionsInput;
|
|
26
|
+
const envValue = opts.environment;
|
|
27
|
+
const environment = envValue === "standard" ? "standard" : "roblox-ts";
|
|
28
|
+
const hooksValue = opts.hooks;
|
|
29
|
+
const hooks = Array.isArray(hooksValue) && hooksValue.every((h) => typeof h === "string") ? hooksValue : DEFAULT_HOOKS;
|
|
30
|
+
return { environment, hooks };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Gets the hook name from a call expression-like object.
|
|
34
|
+
*
|
|
35
|
+
* @param callExpr - The call expression object.
|
|
36
|
+
* @returns The hook name or undefined.
|
|
37
|
+
*/
|
|
38
|
+
function getHookName(callExpr) {
|
|
39
|
+
const { callee } = callExpr;
|
|
40
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.Identifier && callee.name)
|
|
41
|
+
return callee.name;
|
|
42
|
+
if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
|
|
43
|
+
callee.property?.type === TSESTree.AST_NODE_TYPES.Identifier &&
|
|
44
|
+
callee.property.name)
|
|
45
|
+
return callee.property.name;
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
const requireNamedEffectFunctions = {
|
|
49
|
+
/**
|
|
50
|
+
* Creates the ESLint rule visitor.
|
|
51
|
+
*
|
|
52
|
+
* @param context - The ESLint rule context.
|
|
53
|
+
* @returns The visitor object with AST node handlers.
|
|
54
|
+
*/
|
|
55
|
+
create(context) {
|
|
56
|
+
const options = parseOptions(context.options[0]);
|
|
57
|
+
const effectHooks = new Set(options.hooks);
|
|
58
|
+
const isRobloxTsMode = options.environment === "roblox-ts";
|
|
59
|
+
return {
|
|
60
|
+
CallExpression(node) {
|
|
61
|
+
const callExpr = node;
|
|
62
|
+
const hookName = getHookName(callExpr);
|
|
63
|
+
if (!hookName || !effectHooks.has(hookName))
|
|
64
|
+
return;
|
|
65
|
+
const firstArg = callExpr.arguments?.[0];
|
|
66
|
+
if (!firstArg)
|
|
67
|
+
return;
|
|
68
|
+
const argNode = firstArg;
|
|
69
|
+
if (argNode.type === TSESTree.AST_NODE_TYPES.Identifier)
|
|
70
|
+
return;
|
|
71
|
+
if (argNode.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
|
|
72
|
+
context.report({
|
|
73
|
+
data: { hook: hookName },
|
|
74
|
+
messageId: "arrowFunction",
|
|
75
|
+
node,
|
|
76
|
+
});
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (argNode.type === TSESTree.AST_NODE_TYPES.FunctionExpression) {
|
|
80
|
+
if (argNode.id) {
|
|
81
|
+
if (isRobloxTsMode) {
|
|
82
|
+
context.report({
|
|
83
|
+
data: { hook: hookName },
|
|
84
|
+
messageId: "functionExpression",
|
|
85
|
+
node,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
context.report({
|
|
91
|
+
data: { hook: hookName },
|
|
92
|
+
messageId: "anonymousFunction",
|
|
93
|
+
node,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
meta: {
|
|
102
|
+
docs: {
|
|
103
|
+
description: "Enforce named effect functions for better debuggability. Prevents inline arrow functions in useEffect and similar hooks.",
|
|
104
|
+
recommended: false,
|
|
105
|
+
},
|
|
106
|
+
messages: {
|
|
107
|
+
anonymousFunction: "Use a named function instead of an anonymous function for better debuggability",
|
|
108
|
+
arrowFunction: "Use a named function instead of an arrow function for better debuggability",
|
|
109
|
+
functionExpression: "Use a named function reference instead of a function expression for better debuggability",
|
|
110
|
+
},
|
|
111
|
+
schema: [
|
|
112
|
+
{
|
|
113
|
+
additionalProperties: false,
|
|
114
|
+
properties: {
|
|
115
|
+
environment: {
|
|
116
|
+
default: "roblox-ts",
|
|
117
|
+
description: "Environment mode: 'roblox-ts' only allows identifiers, 'standard' allows both identifiers and named function expressions",
|
|
118
|
+
enum: ["roblox-ts", "standard"],
|
|
119
|
+
type: "string",
|
|
120
|
+
},
|
|
121
|
+
hooks: {
|
|
122
|
+
default: DEFAULT_HOOKS,
|
|
123
|
+
description: "Array of hook names to check",
|
|
124
|
+
items: {
|
|
125
|
+
type: "string",
|
|
126
|
+
},
|
|
127
|
+
type: "array",
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
type: "object",
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
type: "problem",
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
export default requireNamedEffectFunctions;
|
|
137
|
+
//# sourceMappingURL=require-named-effect-functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"require-named-effect-functions.js","sourceRoot":"","sources":["../../src/rules/require-named-effect-functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,10 +49,9 @@ function ascendPastWrappers(node) {
|
|
|
49
49
|
* @returns True if the element has a key attribute.
|
|
50
50
|
*/
|
|
51
51
|
function hasKeyAttribute(node) {
|
|
52
|
-
for (const
|
|
53
|
-
if (
|
|
52
|
+
for (const attribute of node.openingElement.attributes)
|
|
53
|
+
if (attribute.type === "JSXAttribute" && attribute.name.name === "key")
|
|
54
54
|
return true;
|
|
55
|
-
}
|
|
56
55
|
return false;
|
|
57
56
|
}
|
|
58
57
|
/**
|
|
@@ -63,69 +62,13 @@ function hasKeyAttribute(node) {
|
|
|
63
62
|
*/
|
|
64
63
|
function isReactComponentHOC(callExpr) {
|
|
65
64
|
const { callee } = callExpr;
|
|
66
|
-
|
|
67
|
-
if (callee.type === "Identifier") {
|
|
65
|
+
if (callee.type === "Identifier")
|
|
68
66
|
return callee.name === "forwardRef" || callee.name === "memo";
|
|
69
|
-
}
|
|
70
|
-
// Member expression: React.forwardRef(...) or React.memo(...)
|
|
71
67
|
if (callee.type === "MemberExpression" &&
|
|
72
68
|
callee.object.type === "Identifier" &&
|
|
73
69
|
callee.object.name === "React" &&
|
|
74
|
-
callee.property.type === "Identifier")
|
|
70
|
+
callee.property.type === "Identifier")
|
|
75
71
|
return callee.property.name === "forwardRef" || callee.property.name === "memo";
|
|
76
|
-
}
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Checks if a JSX element is inside a conditional or logical expression that is a JSX child,
|
|
81
|
-
* and is the ONLY child (no siblings).
|
|
82
|
-
*
|
|
83
|
-
* @param node - The JSX element or fragment to check.
|
|
84
|
-
* @returns True if inside a ternary/logical expression as the only JSX child.
|
|
85
|
-
*/
|
|
86
|
-
function isInConditionalJSXChild(node) {
|
|
87
|
-
let parent = node.parent;
|
|
88
|
-
if (!parent)
|
|
89
|
-
return false;
|
|
90
|
-
// Check if the immediate parent is a conditional or logical expression
|
|
91
|
-
const hasConditional = parent.type === "ConditionalExpression" || parent.type === "LogicalExpression";
|
|
92
|
-
if (!hasConditional)
|
|
93
|
-
return false;
|
|
94
|
-
// Traverse up through conditional/logical expressions
|
|
95
|
-
while (parent && (parent.type === "ConditionalExpression" || parent.type === "LogicalExpression")) {
|
|
96
|
-
parent = parent.parent;
|
|
97
|
-
}
|
|
98
|
-
if (!parent)
|
|
99
|
-
return false;
|
|
100
|
-
// If the conditional/logical is inside a JSXExpressionContainer, check for siblings
|
|
101
|
-
// Example: <div>{cond ? <A/> : <B/>}</div> - A and B don't need keys (only child)
|
|
102
|
-
// Example: <div><X key="x"/>{cond && <A/>}</div> - A needs a key (has siblings)
|
|
103
|
-
if (parent.type === "JSXExpressionContainer") {
|
|
104
|
-
const jsxExprContainer = parent;
|
|
105
|
-
const containerParent = jsxExprContainer.parent;
|
|
106
|
-
if (!containerParent)
|
|
107
|
-
return false;
|
|
108
|
-
// Check if the parent is a JSX element or fragment
|
|
109
|
-
if (containerParent.type === "JSXElement" || containerParent.type === "JSXFragment") {
|
|
110
|
-
const children = containerParent.children;
|
|
111
|
-
// Count non-whitespace children
|
|
112
|
-
const significantChildren = children.filter((child) => {
|
|
113
|
-
// JSXText nodes that are just whitespace don't count as siblings
|
|
114
|
-
if (child.type === "JSXText") {
|
|
115
|
-
return child.value.trim().length > 0;
|
|
116
|
-
}
|
|
117
|
-
return true;
|
|
118
|
-
});
|
|
119
|
-
// If there's more than one significant child, elements inside need keys
|
|
120
|
-
if (significantChildren.length > 1) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
// If it's the only child, elements inside don't need keys
|
|
124
|
-
return true;
|
|
125
|
-
}
|
|
126
|
-
// For other parent types, default to requiring keys
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
72
|
return false;
|
|
130
73
|
}
|
|
131
74
|
/**
|
|
@@ -139,9 +82,8 @@ function getEnclosingFunctionLike(node) {
|
|
|
139
82
|
while (current) {
|
|
140
83
|
if (current.type === "ArrowFunctionExpression" ||
|
|
141
84
|
current.type === "FunctionExpression" ||
|
|
142
|
-
current.type === "FunctionDeclaration")
|
|
85
|
+
current.type === "FunctionDeclaration")
|
|
143
86
|
return current;
|
|
144
|
-
}
|
|
145
87
|
current = current.parent;
|
|
146
88
|
}
|
|
147
89
|
return undefined;
|
|
@@ -222,16 +164,14 @@ function referenceActsAsCallback(reference) {
|
|
|
222
164
|
*/
|
|
223
165
|
function isFunctionUsedAsCallback(context, fn) {
|
|
224
166
|
const inlineCall = findEnclosingCallExpression(fn);
|
|
225
|
-
if (inlineCall && !isReactComponentHOC(inlineCall))
|
|
167
|
+
if (inlineCall && !isReactComponentHOC(inlineCall))
|
|
226
168
|
return true;
|
|
227
|
-
}
|
|
228
169
|
const variable = getVariableForFunction(context, fn);
|
|
229
170
|
if (!variable)
|
|
230
171
|
return false;
|
|
231
|
-
for (const reference of variable.references)
|
|
172
|
+
for (const reference of variable.references)
|
|
232
173
|
if (referenceActsAsCallback(reference))
|
|
233
174
|
return true;
|
|
234
|
-
}
|
|
235
175
|
return false;
|
|
236
176
|
}
|
|
237
177
|
/**
|
|
@@ -244,52 +184,36 @@ function isTopLevelReturn(node) {
|
|
|
244
184
|
let parent = ascendPastWrappers(node.parent);
|
|
245
185
|
if (!parent)
|
|
246
186
|
return false;
|
|
247
|
-
// Handle return with parentheses: return (<div>...)
|
|
248
187
|
if (parent.type === "JSXExpressionContainer")
|
|
249
188
|
parent = ascendPastWrappers(parent.parent);
|
|
250
189
|
if (!parent)
|
|
251
190
|
return false;
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
191
|
+
while (parent && (parent.type === "ConditionalExpression" || parent.type === "LogicalExpression"))
|
|
192
|
+
parent = ascendPastWrappers(parent.parent);
|
|
193
|
+
if (!parent)
|
|
194
|
+
return false;
|
|
195
|
+
if (parent.type === "JSXExpressionContainer")
|
|
256
196
|
parent = ascendPastWrappers(parent.parent);
|
|
257
|
-
}
|
|
258
197
|
if (!parent)
|
|
259
198
|
return false;
|
|
260
|
-
// Handle direct return
|
|
261
199
|
if (parent.type === "ReturnStatement") {
|
|
262
|
-
// Walk up to find the containing function
|
|
263
200
|
let currentNode = ascendPastWrappers(parent.parent);
|
|
264
|
-
|
|
265
|
-
if (currentNode?.type === "BlockStatement") {
|
|
201
|
+
if (currentNode?.type === "BlockStatement")
|
|
266
202
|
currentNode = ascendPastWrappers(currentNode.parent);
|
|
267
|
-
}
|
|
268
203
|
if (!currentNode)
|
|
269
204
|
return false;
|
|
270
|
-
// Check if this is a callback (arrow/function expression inside a call expression)
|
|
271
205
|
if (currentNode.type === "ArrowFunctionExpression" || currentNode.type === "FunctionExpression") {
|
|
272
|
-
// If the function is an argument to a call expression, check if it's a React HOC
|
|
273
206
|
const functionParent = ascendPastWrappers(currentNode.parent);
|
|
274
|
-
if (functionParent?.type === "CallExpression")
|
|
275
|
-
// React.forwardRef and React.memo callbacks are component definitions, treat as top-level
|
|
207
|
+
if (functionParent?.type === "CallExpression")
|
|
276
208
|
return isReactComponentHOC(functionParent);
|
|
277
|
-
}
|
|
278
|
-
// Not inside a call expression, so it's a top-level component
|
|
279
209
|
return true;
|
|
280
210
|
}
|
|
281
|
-
// Function declarations are always top-level
|
|
282
211
|
return currentNode.type === "FunctionDeclaration";
|
|
283
212
|
}
|
|
284
|
-
// Handle arrow function direct return: () => <div>
|
|
285
213
|
if (parent.type === "ArrowFunctionExpression") {
|
|
286
|
-
// Check if this arrow function is inside a call expression
|
|
287
214
|
const functionParent = ascendPastWrappers(parent.parent);
|
|
288
|
-
if (functionParent?.type === "CallExpression")
|
|
289
|
-
// React.forwardRef and React.memo callbacks are component definitions, treat as top-level
|
|
215
|
+
if (functionParent?.type === "CallExpression")
|
|
290
216
|
return isReactComponentHOC(functionParent);
|
|
291
|
-
}
|
|
292
|
-
// Not inside a call expression, so it's a top-level component
|
|
293
217
|
return true;
|
|
294
218
|
}
|
|
295
219
|
return false;
|
|
@@ -305,30 +229,24 @@ function isIgnoredCallExpression(node, ignoreList) {
|
|
|
305
229
|
let parent = node.parent;
|
|
306
230
|
if (!parent)
|
|
307
231
|
return false;
|
|
308
|
-
// Handle JSXExpressionContainer wrapper
|
|
309
232
|
if (parent.type === "JSXExpressionContainer") {
|
|
310
233
|
parent = parent.parent;
|
|
311
234
|
if (!parent)
|
|
312
235
|
return false;
|
|
313
236
|
}
|
|
314
|
-
// Traverse up to find CallExpression
|
|
315
237
|
const maxDepth = 20;
|
|
316
238
|
for (let depth = 0; depth < maxDepth && parent; depth++) {
|
|
317
239
|
const { type } = parent;
|
|
318
|
-
// Found CallExpression - check if it's in the ignore list
|
|
319
240
|
if (type === "CallExpression") {
|
|
320
241
|
const { callee } = parent;
|
|
321
|
-
// Simple identifier: mount(...)
|
|
322
242
|
if (callee.type === "Identifier")
|
|
323
243
|
return ignoreList.includes(callee.name);
|
|
324
|
-
// Member expression: ReactTree.mount(...)
|
|
325
244
|
if (callee.type === "MemberExpression" &&
|
|
326
245
|
callee.object.type === "Identifier" &&
|
|
327
246
|
callee.property.type === "Identifier")
|
|
328
247
|
return ignoreList.includes(`${callee.object.name}.${callee.property.name}`);
|
|
329
248
|
return false;
|
|
330
249
|
}
|
|
331
|
-
// Don't stop at any boundaries - continue traversing until we find CallExpression or run out of parents
|
|
332
250
|
parent = parent.parent;
|
|
333
251
|
}
|
|
334
252
|
return false;
|
|
@@ -343,20 +261,15 @@ function isJSXPropValue(node) {
|
|
|
343
261
|
let parent = node.parent;
|
|
344
262
|
if (!parent)
|
|
345
263
|
return false;
|
|
346
|
-
// Traverse through conditional and logical expressions
|
|
347
|
-
// Example: fallback={condition ? <A/> : <B/>}
|
|
348
|
-
// Example: fallback={placeholder ?? <></>}
|
|
349
264
|
while (parent && (parent.type === "ConditionalExpression" || parent.type === "LogicalExpression"))
|
|
350
265
|
parent = parent.parent;
|
|
351
266
|
if (!parent)
|
|
352
267
|
return false;
|
|
353
|
-
// Handle JSXExpressionContainer wrapper: prop={<div/>}
|
|
354
268
|
if (parent.type === "JSXExpressionContainer") {
|
|
355
269
|
parent = parent.parent;
|
|
356
270
|
if (!parent)
|
|
357
271
|
return false;
|
|
358
272
|
}
|
|
359
|
-
// Check if parent is a JSXAttribute (prop)
|
|
360
273
|
return parent.type === "JSXAttribute";
|
|
361
274
|
}
|
|
362
275
|
const docs = {
|
|
@@ -384,7 +297,6 @@ const requireReactComponentKeys = {
|
|
|
384
297
|
const functionLike = getEnclosingFunctionLike(node);
|
|
385
298
|
const isCallback = functionLike ? isFunctionUsedAsCallback(context, functionLike) : false;
|
|
386
299
|
const isRoot = isTopLevelReturn(node);
|
|
387
|
-
// Check if root component has a key (and it's not allowed)
|
|
388
300
|
if (isRoot && !isCallback) {
|
|
389
301
|
if (!options.allowRootKeys && node.type === "JSXElement" && hasKeyAttribute(node)) {
|
|
390
302
|
context.report({
|
|
@@ -394,17 +306,10 @@ const requireReactComponentKeys = {
|
|
|
394
306
|
}
|
|
395
307
|
return;
|
|
396
308
|
}
|
|
397
|
-
// Skip key requirement for ignored call expressions
|
|
398
309
|
if (isIgnoredCallExpression(node, options.ignoreCallExpressions))
|
|
399
310
|
return;
|
|
400
|
-
// Skip key requirement for JSX passed as props
|
|
401
311
|
if (isJSXPropValue(node))
|
|
402
312
|
return;
|
|
403
|
-
// Skip key requirement for elements in conditional/logical expressions as JSX children
|
|
404
|
-
// Example: <div>{cond ? <A/> : <B/>}</div> - A and B don't need keys
|
|
405
|
-
if (isInConditionalJSXChild(node))
|
|
406
|
-
return;
|
|
407
|
-
// Fragments always need keys when not top-level
|
|
408
313
|
if (node.type === "JSXFragment") {
|
|
409
314
|
context.report({
|
|
410
315
|
messageId: "missingKey",
|
|
@@ -412,7 +317,6 @@ const requireReactComponentKeys = {
|
|
|
412
317
|
});
|
|
413
318
|
return;
|
|
414
319
|
}
|
|
415
|
-
// Check if element has key
|
|
416
320
|
if (!hasKeyAttribute(node)) {
|
|
417
321
|
context.report({
|
|
418
322
|
messageId: "missingKey",
|
|
@@ -421,11 +325,9 @@ const requireReactComponentKeys = {
|
|
|
421
325
|
}
|
|
422
326
|
}
|
|
423
327
|
return {
|
|
424
|
-
// Check JSX elements
|
|
425
328
|
JSXElement(node) {
|
|
426
329
|
checkElement(node);
|
|
427
330
|
},
|
|
428
|
-
// Check JSX fragments
|
|
429
331
|
JSXFragment(node) {
|
|
430
332
|
checkElement(node);
|
|
431
333
|
},
|
|
@@ -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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"}
|