@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.
Files changed (35) hide show
  1. package/dist/rules/ban-react-fc.js +6 -37
  2. package/dist/rules/ban-react-fc.js.map +1 -1
  3. package/dist/rules/enforce-ianitor-check-type.d.ts +7 -0
  4. package/dist/rules/enforce-ianitor-check-type.js +71 -159
  5. package/dist/rules/enforce-ianitor-check-type.js.map +1 -1
  6. package/dist/rules/no-color3-constructor.d.ts +0 -17
  7. package/dist/rules/no-color3-constructor.js +11 -32
  8. package/dist/rules/no-color3-constructor.js.map +1 -1
  9. package/dist/rules/no-instance-methods-without-this.js +2 -3
  10. package/dist/rules/no-instance-methods-without-this.js.map +1 -1
  11. package/dist/rules/no-print.d.ts +0 -15
  12. package/dist/rules/no-print.js +0 -21
  13. package/dist/rules/no-print.js.map +1 -1
  14. package/dist/rules/no-shorthand-names.d.ts +0 -24
  15. package/dist/rules/no-shorthand-names.js +32 -86
  16. package/dist/rules/no-shorthand-names.js.map +1 -1
  17. package/dist/rules/no-warn.d.ts +0 -15
  18. package/dist/rules/no-warn.js +0 -21
  19. package/dist/rules/no-warn.js.map +1 -1
  20. package/dist/rules/prefer-sequence-overloads.js +26 -23
  21. package/dist/rules/prefer-sequence-overloads.js.map +1 -1
  22. package/dist/rules/prefer-udim2-shorthand.d.ts +0 -14
  23. package/dist/rules/prefer-udim2-shorthand.js +138 -44
  24. package/dist/rules/prefer-udim2-shorthand.js.map +1 -1
  25. package/dist/rules/require-named-effect-functions.js +271 -59
  26. package/dist/rules/require-named-effect-functions.js.map +1 -1
  27. package/dist/rules/require-react-component-keys.d.ts +3 -39
  28. package/dist/rules/require-react-component-keys.js +58 -158
  29. package/dist/rules/require-react-component-keys.js.map +1 -1
  30. package/dist/rules/use-exhaustive-dependencies.d.ts +0 -59
  31. package/dist/rules/use-exhaustive-dependencies.js +120 -329
  32. package/dist/rules/use-exhaustive-dependencies.js.map +1 -1
  33. package/dist/rules/use-hook-at-top-level.js +17 -118
  34. package/dist/rules/use-hook-at-top-level.js.map +1 -1
  35. package/package.json +11 -8
@@ -1,73 +1,167 @@
1
- function isUnknownRecord(value) {
2
- return typeof value === "object" && value !== null;
1
+ import { TSESTree } from "@typescript-eslint/utils";
2
+ function isNumber(value) {
3
+ return typeof value === "number" && !Number.isNaN(value);
3
4
  }
4
- function isNumericLiteralNode(value) {
5
- return isUnknownRecord(value) && value.type === "Literal" && "value" in value && typeof value.value === "number";
5
+ function isRecord(node) {
6
+ return typeof node === "object" && node !== null;
6
7
  }
7
- function collectNumericArguments(parameters) {
8
- if (parameters.length !== 4)
8
+ function hasTypeProperty(obj) {
9
+ return "type" in obj;
10
+ }
11
+ function reconstructText(node) {
12
+ const nodeType = node.type;
13
+ if (nodeType === TSESTree.AST_NODE_TYPES.Literal) {
14
+ const value = node.value;
15
+ if (isNumber(value)) {
16
+ return String(value);
17
+ }
9
18
  return undefined;
10
- if (!isNumericLiteralNode(parameters[0]))
19
+ }
20
+ if (nodeType === TSESTree.AST_NODE_TYPES.UnaryExpression) {
21
+ const operator = node.operator;
22
+ if (typeof operator !== "string")
23
+ return undefined;
24
+ const argument = node.argument;
25
+ if (!isRecord(argument))
26
+ return undefined;
27
+ const argText = reconstructText(argument);
28
+ return argText === undefined ? undefined : `${operator}${argText}`;
29
+ }
30
+ if (nodeType === TSESTree.AST_NODE_TYPES.BinaryExpression) {
31
+ const operator = node.operator;
32
+ if (typeof operator !== "string")
33
+ return undefined;
34
+ const left = node.left;
35
+ const right = node.right;
36
+ if (!isRecord(left) || !isRecord(right)) {
37
+ return undefined;
38
+ }
39
+ const leftText = reconstructText(left);
40
+ const rightText = reconstructText(right);
41
+ if (leftText === undefined || rightText === undefined) {
42
+ return undefined;
43
+ }
44
+ return `${leftText} ${operator} ${rightText}`;
45
+ }
46
+ return undefined;
47
+ }
48
+ function evaluateExpression(node) {
49
+ if (!isRecord(node))
11
50
  return undefined;
12
- if (!isNumericLiteralNode(parameters[1]))
51
+ const nodeType = node.type;
52
+ if (nodeType === TSESTree.AST_NODE_TYPES.Literal) {
53
+ const value = node.value;
54
+ if (isNumber(value))
55
+ return value;
13
56
  return undefined;
14
- if (!isNumericLiteralNode(parameters[2]))
57
+ }
58
+ if (nodeType === TSESTree.AST_NODE_TYPES.UnaryExpression) {
59
+ const operator = node.operator;
60
+ const argument = node.argument;
61
+ if (typeof argument === "object" && argument !== null) {
62
+ const argValue = evaluateExpression(argument);
63
+ if (argValue === undefined)
64
+ return undefined;
65
+ if (operator === "-")
66
+ return -argValue;
67
+ if (operator === "+")
68
+ return argValue;
69
+ }
70
+ return undefined;
71
+ }
72
+ if (nodeType === TSESTree.AST_NODE_TYPES.BinaryExpression) {
73
+ const left = node.left;
74
+ const right = node.right;
75
+ const operator = node.operator;
76
+ if (typeof left === "object" && left !== null && typeof right === "object" && right !== null) {
77
+ const leftValue = evaluateExpression(left);
78
+ const rightValue = evaluateExpression(right);
79
+ if (leftValue === undefined || rightValue === undefined)
80
+ return undefined;
81
+ switch (operator) {
82
+ case "+":
83
+ return leftValue + rightValue;
84
+ case "-":
85
+ return leftValue - rightValue;
86
+ case "*":
87
+ return leftValue * rightValue;
88
+ case "/": {
89
+ if (rightValue === 0)
90
+ return undefined;
91
+ return leftValue / rightValue;
92
+ }
93
+ case "%": {
94
+ if (rightValue === 0)
95
+ return undefined;
96
+ return leftValue % rightValue;
97
+ }
98
+ default:
99
+ return undefined;
100
+ }
101
+ }
102
+ return undefined;
103
+ }
104
+ return undefined;
105
+ }
106
+ function collectNumericArguments(_context, parameters) {
107
+ if (parameters.length !== 4)
15
108
  return undefined;
16
- if (!isNumericLiteralNode(parameters[3]))
109
+ const values = [undefined, undefined, undefined, undefined];
110
+ const texts = [undefined, undefined, undefined, undefined];
111
+ for (let i = 0; i < 4; i++) {
112
+ const parameter = parameters[i];
113
+ if (!isRecord(parameter))
114
+ return undefined;
115
+ if (!hasTypeProperty(parameter))
116
+ return undefined;
117
+ if (parameter.type === "SpreadElement")
118
+ return undefined;
119
+ const value = evaluateExpression(parameter);
120
+ if (value === undefined)
121
+ return undefined;
122
+ values[i] = value;
123
+ const text = reconstructText(parameter);
124
+ if (text === undefined)
125
+ return undefined;
126
+ texts[i] = text;
127
+ }
128
+ const [scaleX, offsetX, scaleY, offsetY] = values;
129
+ const [scaleXText, offsetXText, scaleYText, offsetYText] = texts;
130
+ if (scaleX === undefined ||
131
+ offsetX === undefined ||
132
+ scaleY === undefined ||
133
+ offsetY === undefined ||
134
+ scaleXText === undefined ||
135
+ offsetXText === undefined ||
136
+ scaleYText === undefined ||
137
+ offsetYText === undefined) {
17
138
  return undefined;
18
- return {
19
- offsetX: parameters[1].value,
20
- offsetY: parameters[3].value,
21
- scaleX: parameters[0].value,
22
- scaleY: parameters[2].value,
23
- };
139
+ }
140
+ return { offsetX, offsetXText, offsetY, offsetYText, scaleX, scaleXText, scaleY, scaleYText };
24
141
  }
25
- /**
26
- * Detects `new UDim2(...)` calls that can be simplified to `UDim2.fromScale()` or `UDim2.fromOffset()`.
27
- *
28
- * @example
29
- * // ❌ Reports
30
- * new UDim2(1, 0, 1, 0);
31
- * new UDim2(0, 100, 0, 50);
32
- *
33
- * // ✅ OK
34
- * new UDim2(0, 0, 0, 0);
35
- * new UDim2(1, 2, 3, 4);
36
- * UDim2.fromScale(1, 1);
37
- * UDim2.fromOffset(100, 50);
38
- */
39
142
  const preferUDim2Shorthand = {
40
- /**
41
- * Creates the ESLint rule visitor.
42
- *
43
- * @param context - The ESLint rule context.
44
- * @returns The visitor object with AST node handlers.
45
- */
46
143
  create(context) {
47
144
  return {
48
145
  NewExpression(node) {
49
- if (node.callee.type !== "Identifier" || node.callee.name !== "UDim2")
146
+ if (node.callee.type !== TSESTree.AST_NODE_TYPES.Identifier || node.callee.name !== "UDim2")
50
147
  return;
51
- const collected = collectNumericArguments(node.arguments);
148
+ const collected = collectNumericArguments(context, node.arguments);
52
149
  if (!collected)
53
150
  return;
54
- const { scaleX, offsetX, scaleY, offsetY } = collected;
55
- // Allow all zeros
151
+ const { scaleX, offsetX, scaleY, offsetY, scaleXText, offsetXText, scaleYText, offsetYText } = collected;
56
152
  if (scaleX === 0 && offsetX === 0 && scaleY === 0 && offsetY === 0)
57
153
  return;
58
- // Check for fromScale pattern (offsets are zero)
59
154
  if (offsetX === 0 && offsetY === 0) {
60
155
  context.report({
61
- fix: (fixer) => fixer.replaceText(node, `UDim2.fromScale(${scaleX}, ${scaleY})`),
156
+ fix: (fixer) => fixer.replaceText(node, `UDim2.fromScale(${scaleXText}, ${scaleYText})`),
62
157
  messageId: "preferFromScale",
63
158
  node,
64
159
  });
65
160
  return;
66
161
  }
67
- // Check for fromOffset pattern (scales are zero)
68
162
  if (scaleX === 0 && scaleY === 0) {
69
163
  context.report({
70
- fix: (fixer) => fixer.replaceText(node, `UDim2.fromOffset(${offsetX}, ${offsetY})`),
164
+ fix: (fixer) => fixer.replaceText(node, `UDim2.fromOffset(${offsetXText}, ${offsetYText})`),
71
165
  messageId: "preferFromOffset",
72
166
  node,
73
167
  });
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-udim2-shorthand.js","sourceRoot":"","sources":["../../src/rules/prefer-udim2-shorthand.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-udim2-shorthand.js","sourceRoot":"","sources":["../../src/rules/prefer-udim2-shorthand.ts"],"names":[],"mappings":"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"}
@@ -1,84 +1,223 @@
1
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) {
2
+ import Type from "typebox";
3
+ import { Compile } from "typebox/compile";
4
+ const DEFAULT_HOOKS = [
5
+ { allowAsync: false, name: "useEffect" },
6
+ { allowAsync: false, name: "useLayoutEffect" },
7
+ { allowAsync: false, name: "useInsertionEffect" },
8
+ ];
9
+ const isHookConfiguration = Type.Object({
10
+ allowAsync: Type.Boolean(),
11
+ name: Type.String(),
12
+ });
13
+ const isRuleOptions = Compile(Type.Object({
14
+ environment: Type.Union([Type.Literal("roblox-ts"), Type.Literal("standard")]),
15
+ hooks: Type.Array(isHookConfiguration),
16
+ }, { additionalProperties: true }));
17
+ function parseOptions(options) {
18
+ if (options === undefined) {
14
19
  return {
15
20
  environment: "roblox-ts",
16
21
  hooks: DEFAULT_HOOKS,
17
22
  };
18
23
  }
19
- if (typeof optionsInput !== "object" || optionsInput === null) {
24
+ if (!isRuleOptions.Check(options)) {
20
25
  return {
21
26
  environment: "roblox-ts",
22
27
  hooks: DEFAULT_HOOKS,
23
28
  };
24
29
  }
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 };
30
+ return {
31
+ environment: options.environment === "standard" ? "standard" : "roblox-ts",
32
+ hooks: options.hooks,
33
+ };
31
34
  }
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)
35
+ function getHookName(callExpression) {
36
+ const { callee } = callExpression;
37
+ if (callee.type === TSESTree.AST_NODE_TYPES.Identifier && typeof callee.name === "string" && callee.name.length > 0)
41
38
  return callee.name;
42
39
  if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
43
40
  callee.property?.type === TSESTree.AST_NODE_TYPES.Identifier &&
44
- callee.property.name)
41
+ typeof callee.property.name === "string" &&
42
+ callee.property.name.length > 0)
45
43
  return callee.property.name;
46
44
  return undefined;
47
45
  }
46
+ function resolveIdentifierToFunction(identifier, context) {
47
+ try {
48
+ const scope = context.sourceCode.getScope?.(identifier);
49
+ if (typeof scope !== "object" || scope === null)
50
+ return undefined;
51
+ const scopeObj = scope;
52
+ const setVal = scopeObj.set;
53
+ if (!(setVal instanceof Map))
54
+ return undefined;
55
+ let variable;
56
+ let currentScope = scope;
57
+ while (typeof currentScope === "object" && currentScope !== null) {
58
+ const current = currentScope;
59
+ variable = current.set.get(identifier.name);
60
+ if (typeof variable === "object" && variable !== null)
61
+ break;
62
+ currentScope = current.upper;
63
+ }
64
+ if (typeof variable !== "object" || variable === null)
65
+ return undefined;
66
+ const castVariable = variable;
67
+ if (!Array.isArray(castVariable.defs) || castVariable.defs.length === 0)
68
+ return undefined;
69
+ for (const definition of castVariable.defs) {
70
+ if (typeof definition !== "object" || definition === null)
71
+ continue;
72
+ const castDefinition = definition;
73
+ const node = castDefinition.node;
74
+ if (typeof node !== "object" || node === null)
75
+ continue;
76
+ const castNode = node;
77
+ if (castNode.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration) {
78
+ return {
79
+ isAsync: Boolean(castNode.async),
80
+ node: node,
81
+ type: "function-declaration",
82
+ };
83
+ }
84
+ if (castNode.type === TSESTree.AST_NODE_TYPES.VariableDeclarator &&
85
+ typeof castNode.init === "object" &&
86
+ castNode.init !== null) {
87
+ const castInit = castNode.init;
88
+ if (castInit.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
89
+ const arrowNode = castNode.init;
90
+ return {
91
+ isAsync: Boolean(arrowNode.async),
92
+ node: arrowNode,
93
+ type: "arrow",
94
+ };
95
+ }
96
+ if (castInit.type === TSESTree.AST_NODE_TYPES.FunctionExpression) {
97
+ const castInitNode = castNode.init;
98
+ return {
99
+ isAsync: Boolean(castInitNode.async),
100
+ node: castInitNode,
101
+ type: "function-expression",
102
+ };
103
+ }
104
+ }
105
+ }
106
+ return undefined;
107
+ }
108
+ catch {
109
+ return undefined;
110
+ }
111
+ }
112
+ function isCallbackHookResult(identifier, context) {
113
+ try {
114
+ const scope = context.sourceCode.getScope?.(identifier);
115
+ if (typeof scope !== "object" || scope === null)
116
+ return false;
117
+ const scopeObj = scope;
118
+ const setVal = scopeObj.set;
119
+ if (!(setVal instanceof Map))
120
+ return false;
121
+ let variable;
122
+ let currentScope = scope;
123
+ while (typeof currentScope === "object" && currentScope !== null) {
124
+ const current = currentScope;
125
+ variable = current.set.get(identifier.name);
126
+ if (typeof variable === "object" && variable !== null)
127
+ break;
128
+ currentScope = current.upper;
129
+ }
130
+ if (typeof variable !== "object" || variable === null)
131
+ return false;
132
+ const castVariable = variable;
133
+ if (!Array.isArray(castVariable.defs) || castVariable.defs.length === 0)
134
+ return false;
135
+ for (const definition of castVariable.defs) {
136
+ if (typeof definition !== "object" || definition === null)
137
+ continue;
138
+ const castDefinition = definition;
139
+ const node = castDefinition.node;
140
+ if (typeof node !== "object" || node === null)
141
+ continue;
142
+ const castNode = node;
143
+ if (castNode.type !== TSESTree.AST_NODE_TYPES.VariableDeclarator)
144
+ continue;
145
+ if (typeof castNode.init !== "object" || castNode.init === null)
146
+ continue;
147
+ const init = castNode.init;
148
+ if (init.type !== TSESTree.AST_NODE_TYPES.CallExpression)
149
+ continue;
150
+ const calleeHookName = getHookName(init);
151
+ if (calleeHookName === "useCallback" || calleeHookName === "useMemo")
152
+ return true;
153
+ }
154
+ return false;
155
+ }
156
+ catch {
157
+ return false;
158
+ }
159
+ }
48
160
  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
161
  create(context) {
56
- const options = parseOptions(context.options[0]);
57
- const effectHooks = new Set(options.hooks);
58
- const isRobloxTsMode = options.environment === "roblox-ts";
162
+ const { hooks, environment } = parseOptions(context.options[0]);
163
+ const hookAsyncConfig = new Map(hooks.map((hookConfig) => [hookConfig.name, hookConfig.allowAsync]));
164
+ const effectHooks = new Set(hookAsyncConfig.keys());
165
+ const isRobloxTsMode = environment === "roblox-ts";
166
+ function isAsyncAllowed(hookName) {
167
+ const result = hookAsyncConfig.get(hookName);
168
+ return typeof result === "boolean" ? result : false;
169
+ }
59
170
  return {
60
171
  CallExpression(node) {
61
- const callExpr = node;
62
- const hookName = getHookName(callExpr);
63
- if (!hookName || !effectHooks.has(hookName))
172
+ const callExpression = node;
173
+ const hookName = getHookName(callExpression);
174
+ if (typeof hookName !== "string" || !effectHooks.has(hookName))
64
175
  return;
65
- const firstArg = callExpr.arguments?.[0];
66
- if (!firstArg)
176
+ const firstArgument = callExpression.arguments?.[0];
177
+ if (firstArgument === undefined)
67
178
  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) {
179
+ const argumentNode = firstArgument;
180
+ if (argumentNode.type === TSESTree.AST_NODE_TYPES.Identifier) {
181
+ const identifier = argumentNode;
182
+ const resolved = resolveIdentifierToFunction(identifier, context);
183
+ if (resolved === undefined) {
184
+ if (isCallbackHookResult(identifier, context)) {
185
+ context.report({
186
+ data: { hook: hookName },
187
+ messageId: "identifierReferencesCallback",
188
+ node,
189
+ });
190
+ }
191
+ return;
192
+ }
193
+ if (resolved.type === "arrow") {
194
+ if (resolved.isAsync) {
195
+ if (!isAsyncAllowed(hookName)) {
196
+ context.report({
197
+ data: { hook: hookName },
198
+ messageId: "identifierReferencesAsyncArrow",
199
+ node,
200
+ });
201
+ }
202
+ }
203
+ else {
204
+ context.report({
205
+ data: { hook: hookName },
206
+ messageId: "identifierReferencesArrow",
207
+ node,
208
+ });
209
+ }
210
+ }
211
+ else if (resolved.type === "function-expression") {
212
+ const castNode = resolved.node;
213
+ if (castNode.id === undefined) {
214
+ context.report({
215
+ data: { hook: hookName },
216
+ messageId: "anonymousFunction",
217
+ node,
218
+ });
219
+ }
220
+ else if (isRobloxTsMode) {
82
221
  context.report({
83
222
  data: { hook: hookName },
84
223
  messageId: "functionExpression",
@@ -86,7 +225,60 @@ const requireNamedEffectFunctions = {
86
225
  });
87
226
  }
88
227
  }
228
+ else if (resolved.type === "function-declaration" &&
229
+ resolved.isAsync &&
230
+ !isAsyncAllowed(hookName)) {
231
+ context.report({
232
+ data: { hook: hookName },
233
+ messageId: "identifierReferencesAsyncFunction",
234
+ node,
235
+ });
236
+ }
237
+ return;
238
+ }
239
+ if (argumentNode.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
240
+ if (argumentNode.async) {
241
+ context.report({
242
+ data: { hook: hookName },
243
+ messageId: "asyncArrowFunction",
244
+ node,
245
+ });
246
+ }
89
247
  else {
248
+ context.report({
249
+ data: { hook: hookName },
250
+ messageId: "arrowFunction",
251
+ node,
252
+ });
253
+ }
254
+ return;
255
+ }
256
+ if (argumentNode.type === TSESTree.AST_NODE_TYPES.FunctionExpression) {
257
+ const functionExpressionNode = argumentNode;
258
+ // oxlint-disable-next-line typescript-eslint/strict-boolean-expressions
259
+ const functionHasId = Boolean(functionExpressionNode.id);
260
+ if (functionHasId && argumentNode.async) {
261
+ context.report({
262
+ data: { hook: hookName },
263
+ messageId: "asyncFunctionExpression",
264
+ node,
265
+ });
266
+ }
267
+ else if (functionHasId && isRobloxTsMode) {
268
+ context.report({
269
+ data: { hook: hookName },
270
+ messageId: "functionExpression",
271
+ node,
272
+ });
273
+ }
274
+ else if (!functionHasId && argumentNode.async) {
275
+ context.report({
276
+ data: { hook: hookName },
277
+ messageId: "asyncAnonymousFunction",
278
+ node,
279
+ });
280
+ }
281
+ else if (!functionHasId) {
90
282
  context.report({
91
283
  data: { hook: hookName },
92
284
  messageId: "anonymousFunction",
@@ -106,7 +298,15 @@ const requireNamedEffectFunctions = {
106
298
  messages: {
107
299
  anonymousFunction: "Use a named function instead of an anonymous function for better debuggability",
108
300
  arrowFunction: "Use a named function instead of an arrow function for better debuggability",
301
+ asyncAnonymousFunction: "Async anonymous functions are not allowed in {{ hook }}. Use an async function declaration instead",
302
+ asyncArrowFunction: "Async arrow functions are not allowed in {{ hook }}. Use an async function declaration instead",
303
+ asyncFunctionDeclaration: "Async function declarations are not allowed in {{ hook }}. Set allowAsync: true for this hook to enable",
304
+ asyncFunctionExpression: "Async function expressions are not allowed in {{ hook }}. Use an async function declaration instead",
109
305
  functionExpression: "Use a named function reference instead of a function expression for better debuggability",
306
+ identifierReferencesArrow: "{{ hook }} called with identifier that references an arrow function. Use a named function declaration instead",
307
+ identifierReferencesAsyncArrow: "{{ hook }} called with identifier that references an async arrow function. Set allowAsync: true for this hook to enable",
308
+ identifierReferencesAsyncFunction: "{{ hook }} called with identifier that references an async function. Set allowAsync: true for this hook to enable",
309
+ identifierReferencesCallback: "{{ hook }} called with identifier that references a useCallback/useMemo result. Use a named function declaration instead",
110
310
  },
111
311
  schema: [
112
312
  {
@@ -120,9 +320,21 @@ const requireNamedEffectFunctions = {
120
320
  },
121
321
  hooks: {
122
322
  default: DEFAULT_HOOKS,
123
- description: "Array of hook names to check",
323
+ description: "Array of hook configuration objects with name and allowAsync settings",
124
324
  items: {
125
- type: "string",
325
+ additionalProperties: false,
326
+ properties: {
327
+ allowAsync: {
328
+ description: "Whether async functions are allowed for this hook",
329
+ type: "boolean",
330
+ },
331
+ name: {
332
+ description: "Hook name to check",
333
+ type: "string",
334
+ },
335
+ },
336
+ required: ["name", "allowAsync"],
337
+ type: "object",
126
338
  },
127
339
  type: "array",
128
340
  },
@@ -1 +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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"}
1
+ {"version":3,"file":"require-named-effect-functions.js","sourceRoot":"","sources":["../../src/rules/require-named-effect-functions.ts"],"names":[],"mappings":"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"}