@pobammer-ts/eslint-cease-nonsense-rules 0.11.0 → 1.0.1

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 (29) hide show
  1. package/dist/configure-utilities.d.ts +68 -0
  2. package/dist/configure-utilities.js +116 -0
  3. package/dist/configure-utilities.js.map +1 -0
  4. package/dist/rules/ban-react-fc.js +4 -7
  5. package/dist/rules/ban-react-fc.js.map +1 -1
  6. package/dist/rules/enforce-ianitor-check-type.d.ts +7 -0
  7. package/dist/rules/enforce-ianitor-check-type.js +2 -2
  8. package/dist/rules/enforce-ianitor-check-type.js.map +1 -1
  9. package/dist/rules/no-color3-constructor.js +2 -1
  10. package/dist/rules/no-color3-constructor.js.map +1 -1
  11. package/dist/rules/no-shorthand-names.js +18 -18
  12. package/dist/rules/no-shorthand-names.js.map +1 -1
  13. package/dist/rules/prefer-sequence-overloads.js +17 -7
  14. package/dist/rules/prefer-sequence-overloads.js.map +1 -1
  15. package/dist/rules/prefer-udim2-shorthand.js +117 -20
  16. package/dist/rules/prefer-udim2-shorthand.js.map +1 -1
  17. package/dist/rules/require-named-effect-functions.js +103 -29
  18. package/dist/rules/require-named-effect-functions.js.map +1 -1
  19. package/dist/rules/require-paired-calls.d.ts +41 -0
  20. package/dist/rules/require-paired-calls.js +706 -0
  21. package/dist/rules/require-paired-calls.js.map +1 -0
  22. package/dist/rules/require-react-component-keys.js +18 -17
  23. package/dist/rules/require-react-component-keys.js.map +1 -1
  24. package/dist/rules/use-exhaustive-dependencies.d.ts +0 -17
  25. package/dist/rules/use-exhaustive-dependencies.js +26 -108
  26. package/dist/rules/use-exhaustive-dependencies.js.map +1 -1
  27. package/dist/rules/use-hook-at-top-level.js +17 -118
  28. package/dist/rules/use-hook-at-top-level.js.map +1 -1
  29. package/package.json +6 -5
@@ -1,20 +1,113 @@
1
- import { TSESTree } from "@typescript-eslint/types";
2
- import Type from "typebox";
3
- import { Compile } from "typebox/compile";
4
- const isNumericLiteralNode = Compile(Type.Object({
5
- type: Type.Literal(TSESTree.AST_NODE_TYPES.Literal),
6
- value: Type.Number(),
7
- }));
8
- const isCorrectParameters = Compile(Type.Tuple([isNumericLiteralNode, isNumericLiteralNode, isNumericLiteralNode, isNumericLiteralNode], {}));
9
- function collectNumericArguments(parameters) {
10
- return isCorrectParameters.Check(parameters)
11
- ? {
12
- offsetX: parameters[1].value,
13
- offsetY: parameters[3].value,
14
- scaleX: parameters[0].value,
15
- scaleY: parameters[2].value,
1
+ import { TSESTree } from "@typescript-eslint/utils";
2
+ function isNumber(value) {
3
+ return typeof value === "number" && !Number.isNaN(value);
4
+ }
5
+ function isRecord(node) {
6
+ return typeof node === "object" && node !== null;
7
+ }
8
+ function hasTypeProperty(object) {
9
+ return "type" in object;
10
+ }
11
+ const OPERATORS = new Set(["+", "-", "*", "/", "%"]);
12
+ function reconstructText(node) {
13
+ const nodeType = node.type;
14
+ if (nodeType === TSESTree.AST_NODE_TYPES.Literal) {
15
+ const { value } = node;
16
+ return isNumber(value) ? String(value) : undefined;
17
+ }
18
+ if (nodeType === TSESTree.AST_NODE_TYPES.Identifier) {
19
+ const { name } = node;
20
+ return typeof name === "string" ? name : undefined;
21
+ }
22
+ if (nodeType === TSESTree.AST_NODE_TYPES.UnaryExpression) {
23
+ const { operator } = node;
24
+ if (typeof operator !== "string")
25
+ return undefined;
26
+ const { argument } = node;
27
+ if (!isRecord(argument))
28
+ return undefined;
29
+ const text = reconstructText(argument);
30
+ return text === undefined ? undefined : `${operator}${text}`;
31
+ }
32
+ if (nodeType === TSESTree.AST_NODE_TYPES.BinaryExpression) {
33
+ const { operator } = node;
34
+ if (typeof operator !== "string" || !OPERATORS.has(operator))
35
+ return undefined;
36
+ const { left, right } = node;
37
+ if (!isRecord(left) || !isRecord(right))
38
+ return undefined;
39
+ const leftText = reconstructText(left);
40
+ const rightText = reconstructText(right);
41
+ return leftText === undefined || rightText === undefined ? undefined : `${leftText} ${operator} ${rightText}`;
42
+ }
43
+ return undefined;
44
+ }
45
+ function evaluateExpression(node) {
46
+ if (!isRecord(node))
47
+ return undefined;
48
+ const nodeType = node.type;
49
+ if (nodeType === TSESTree.AST_NODE_TYPES.Literal) {
50
+ const { value } = node;
51
+ return isNumber(value) ? value : undefined;
52
+ }
53
+ if (nodeType === TSESTree.AST_NODE_TYPES.UnaryExpression) {
54
+ const { argument, operator } = node;
55
+ if (typeof argument === "object" && argument !== null) {
56
+ const value = evaluateExpression(argument);
57
+ if (value === undefined)
58
+ return undefined;
59
+ if (operator === "-")
60
+ return -value;
61
+ if (operator === "+")
62
+ return value;
63
+ }
64
+ return undefined;
65
+ }
66
+ if (nodeType === TSESTree.AST_NODE_TYPES.BinaryExpression) {
67
+ const { right, left, operator } = node;
68
+ if (typeof left === "object" && left !== null && typeof right === "object" && right !== null) {
69
+ const leftValue = evaluateExpression(left);
70
+ const rightValue = evaluateExpression(right);
71
+ if (leftValue === undefined || rightValue === undefined)
72
+ return undefined;
73
+ switch (operator) {
74
+ case "+":
75
+ return leftValue + rightValue;
76
+ case "-":
77
+ return leftValue - rightValue;
78
+ case "*":
79
+ return leftValue * rightValue;
80
+ case "/":
81
+ return rightValue === 0 ? undefined : leftValue / rightValue;
82
+ case "%":
83
+ return rightValue === 0 ? undefined : leftValue % rightValue;
84
+ default:
85
+ return undefined;
86
+ }
16
87
  }
17
- : undefined;
88
+ return undefined;
89
+ }
90
+ return undefined;
91
+ }
92
+ function collectArguments(_context, parameters) {
93
+ if (parameters.length !== 4)
94
+ return undefined;
95
+ const texts = [undefined, undefined, undefined, undefined];
96
+ for (let index = 0; index < 4; index++) {
97
+ const parameter = parameters[index];
98
+ if (!isRecord(parameter) || !hasTypeProperty(parameter))
99
+ return undefined;
100
+ if (parameter.type === TSESTree.AST_NODE_TYPES.SpreadElement)
101
+ return undefined;
102
+ const text = reconstructText(parameter);
103
+ if (text === undefined)
104
+ return undefined;
105
+ texts[index] = text;
106
+ }
107
+ const [scaleXText, offsetXText, scaleYText, offsetYText] = texts;
108
+ if (scaleXText === undefined || offsetXText === undefined || scaleYText === undefined || offsetYText === undefined)
109
+ return undefined;
110
+ return { offsetXText, offsetYText, scaleXText, scaleYText };
18
111
  }
19
112
  const preferUDim2Shorthand = {
20
113
  create(context) {
@@ -22,15 +115,19 @@ const preferUDim2Shorthand = {
22
115
  NewExpression(node) {
23
116
  if (node.callee.type !== TSESTree.AST_NODE_TYPES.Identifier || node.callee.name !== "UDim2")
24
117
  return;
25
- const collected = collectNumericArguments(node.arguments);
118
+ const collected = collectArguments(context, node.arguments);
26
119
  if (!collected)
27
120
  return;
28
- const { scaleX, offsetX, scaleY, offsetY } = collected;
121
+ const { offsetXText, offsetYText, scaleXText, scaleYText } = collected;
122
+ const scaleX = evaluateExpression(node.arguments[0]);
123
+ const offsetX = evaluateExpression(node.arguments[1]);
124
+ const scaleY = evaluateExpression(node.arguments[2]);
125
+ const offsetY = evaluateExpression(node.arguments[3]);
29
126
  if (scaleX === 0 && offsetX === 0 && scaleY === 0 && offsetY === 0)
30
127
  return;
31
128
  if (offsetX === 0 && offsetY === 0) {
32
129
  context.report({
33
- fix: (fixer) => fixer.replaceText(node, `UDim2.fromScale(${scaleX}, ${scaleY})`),
130
+ fix: (fixer) => fixer.replaceText(node, `UDim2.fromScale(${scaleXText}, ${scaleYText})`),
34
131
  messageId: "preferFromScale",
35
132
  node,
36
133
  });
@@ -38,7 +135,7 @@ const preferUDim2Shorthand = {
38
135
  }
39
136
  if (scaleX === 0 && scaleY === 0) {
40
137
  context.report({
41
- fix: (fixer) => fixer.replaceText(node, `UDim2.fromOffset(${offsetX}, ${offsetY})`),
138
+ fix: (fixer) => fixer.replaceText(node, `UDim2.fromOffset(${offsetXText}, ${offsetYText})`),
42
139
  messageId: "preferFromOffset",
43
140
  node,
44
141
  });
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-udim2-shorthand.js","sourceRoot":"","sources":["../../src/rules/prefer-udim2-shorthand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,oBAAoB,GAAG,OAAO,CACnC,IAAI,CAAC,MAAM,CAAC;IACX,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC;IACnD,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;CACpB,CAAC,CACF,CAAC;AAEF,MAAM,mBAAmB,GAAG,OAAO,CAClC,IAAI,CAAC,KAAK,CAAC,CAAC,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EAAE,EAAE,CAAC,CACxG,CAAC;AASF,SAAS,uBAAuB,CAAC,UAAkC;IAClE,OAAO,mBAAmB,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3C,CAAC,CAAC;YACA,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;YAC5B,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;YAC5B,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;YAC3B,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK;SAC3B;QACF,CAAC,CAAC,SAAS,CAAC;AACd,CAAC;AAED,MAAM,oBAAoB,GAAoB;IAC7C,MAAM,CAAC,OAAO;QACb,OAAO;YACN,aAAa,CAAC,IAAI;gBACjB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO;oBAAE,OAAO;gBAEpG,MAAM,SAAS,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC1D,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;gBACvD,IAAI,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC;oBAAE,OAAO;gBAE3E,IAAI,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,MAAM,CAAC;wBACd,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,mBAAmB,MAAM,KAAK,MAAM,GAAG,CAAC;wBAChF,SAAS,EAAE,iBAAiB;wBAC5B,IAAI;qBACJ,CAAC,CAAC;oBACH,OAAO;gBACR,CAAC;gBAED,IAAI,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC;wBACd,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,OAAO,KAAK,OAAO,GAAG,CAAC;wBACnF,SAAS,EAAE,kBAAkB;wBAC7B,IAAI;qBACJ,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,WAAW,EACV,0GAA0G;YAC3G,WAAW,EAAE,IAAI;SACjB;QACD,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE;YACT,gBAAgB,EACf,8GAA8G;YAC/G,eAAe,EACd,6GAA6G;SAC9G;QACD,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;KAClB;CACD,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"prefer-udim2-shorthand.js","sourceRoot":"","sources":["../../src/rules/prefer-udim2-shorthand.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,33 @@
1
1
  import { TSESTree } from "@typescript-eslint/types";
2
2
  import Type from "typebox";
3
3
  import { Compile } from "typebox/compile";
4
- const DEFAULT_HOOKS = ["useEffect", "useLayoutEffect", "useInsertionEffect"];
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
+ });
5
13
  const isRuleOptions = Compile(Type.Object({
6
- allowAsyncFunctionDeclarations: Type.Boolean(),
7
14
  environment: Type.Union([Type.Literal("roblox-ts"), Type.Literal("standard")]),
8
- hooks: Type.Array(Type.String()),
15
+ hooks: Type.Array(isHookConfiguration),
9
16
  }, { additionalProperties: true }));
10
17
  function parseOptions(options) {
11
18
  if (options === undefined) {
12
19
  return {
13
- allowAsyncFunctionDeclarations: false,
14
20
  environment: "roblox-ts",
15
21
  hooks: DEFAULT_HOOKS,
16
22
  };
17
23
  }
18
24
  if (!isRuleOptions.Check(options)) {
19
25
  return {
20
- allowAsyncFunctionDeclarations: false,
21
26
  environment: "roblox-ts",
22
27
  hooks: DEFAULT_HOOKS,
23
28
  };
24
29
  }
25
30
  return {
26
- allowAsyncFunctionDeclarations: options.allowAsyncFunctionDeclarations,
27
31
  environment: options.environment === "standard" ? "standard" : "roblox-ts",
28
32
  hooks: options.hooks,
29
33
  };
@@ -71,10 +75,9 @@ function resolveIdentifierToFunction(identifier, context) {
71
75
  continue;
72
76
  const castNode = node;
73
77
  if (castNode.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration) {
74
- const funcNode = node;
75
78
  return {
76
- isAsync: Boolean(funcNode.async),
77
- node: funcNode,
79
+ isAsync: Boolean(castNode.async),
80
+ node: node,
78
81
  type: "function-declaration",
79
82
  };
80
83
  }
@@ -91,10 +94,10 @@ function resolveIdentifierToFunction(identifier, context) {
91
94
  };
92
95
  }
93
96
  if (castInit.type === TSESTree.AST_NODE_TYPES.FunctionExpression) {
94
- const funcExprNode = castNode.init;
97
+ const castInitNode = castNode.init;
95
98
  return {
96
- isAsync: Boolean(funcExprNode.async),
97
- node: funcExprNode,
99
+ isAsync: Boolean(castInitNode.async),
100
+ node: castInitNode,
98
101
  type: "function-expression",
99
102
  };
100
103
  }
@@ -106,11 +109,64 @@ function resolveIdentifierToFunction(identifier, context) {
106
109
  return undefined;
107
110
  }
108
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
+ }
109
160
  const requireNamedEffectFunctions = {
110
161
  create(context) {
111
- const { hooks, environment, allowAsyncFunctionDeclarations } = parseOptions(context.options[0]);
112
- const effectHooks = new Set(hooks);
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());
113
165
  const isRobloxTsMode = environment === "roblox-ts";
166
+ function isAsyncAllowed(hookName) {
167
+ const result = hookAsyncConfig.get(hookName);
168
+ return typeof result === "boolean" ? result : false;
169
+ }
114
170
  return {
115
171
  CallExpression(node) {
116
172
  const callExpression = node;
@@ -124,11 +180,19 @@ const requireNamedEffectFunctions = {
124
180
  if (argumentNode.type === TSESTree.AST_NODE_TYPES.Identifier) {
125
181
  const identifier = argumentNode;
126
182
  const resolved = resolveIdentifierToFunction(identifier, context);
127
- if (resolved === undefined)
183
+ if (resolved === undefined) {
184
+ if (isCallbackHookResult(identifier, context)) {
185
+ context.report({
186
+ data: { hook: hookName },
187
+ messageId: "identifierReferencesCallback",
188
+ node,
189
+ });
190
+ }
128
191
  return;
192
+ }
129
193
  if (resolved.type === "arrow") {
130
194
  if (resolved.isAsync) {
131
- if (!allowAsyncFunctionDeclarations) {
195
+ if (!isAsyncAllowed(hookName)) {
132
196
  context.report({
133
197
  data: { hook: hookName },
134
198
  messageId: "identifierReferencesAsyncArrow",
@@ -145,8 +209,8 @@ const requireNamedEffectFunctions = {
145
209
  }
146
210
  }
147
211
  else if (resolved.type === "function-expression") {
148
- const funcExpr = resolved.node;
149
- if (funcExpr.id === undefined) {
212
+ const castNode = resolved.node;
213
+ if (castNode.id === undefined) {
150
214
  context.report({
151
215
  data: { hook: hookName },
152
216
  messageId: "anonymousFunction",
@@ -163,7 +227,7 @@ const requireNamedEffectFunctions = {
163
227
  }
164
228
  else if (resolved.type === "function-declaration" &&
165
229
  resolved.isAsync &&
166
- !allowAsyncFunctionDeclarations) {
230
+ !isAsyncAllowed(hookName)) {
167
231
  context.report({
168
232
  data: { hook: hookName },
169
233
  messageId: "identifierReferencesAsyncFunction",
@@ -236,22 +300,18 @@ const requireNamedEffectFunctions = {
236
300
  arrowFunction: "Use a named function instead of an arrow function for better debuggability",
237
301
  asyncAnonymousFunction: "Async anonymous functions are not allowed in {{ hook }}. Use an async function declaration instead",
238
302
  asyncArrowFunction: "Async arrow functions are not allowed in {{ hook }}. Use an async function declaration instead",
239
- asyncFunctionDeclaration: "Async function declarations are not allowed in {{ hook }} unless allowAsyncFunctionDeclarations is enabled",
303
+ asyncFunctionDeclaration: "Async function declarations are not allowed in {{ hook }}. Set allowAsync: true for this hook to enable",
240
304
  asyncFunctionExpression: "Async function expressions are not allowed in {{ hook }}. Use an async function declaration instead",
241
305
  functionExpression: "Use a named function reference instead of a function expression for better debuggability",
242
306
  identifierReferencesArrow: "{{ hook }} called with identifier that references an arrow function. Use a named function declaration instead",
243
- identifierReferencesAsyncArrow: "{{ hook }} called with identifier that references an async arrow function. Async functions are not allowed unless allowAsyncFunctionDeclarations is enabled",
244
- identifierReferencesAsyncFunction: "{{ hook }} called with identifier that references an async function. Async functions are not allowed unless allowAsyncFunctionDeclarations is enabled",
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",
245
310
  },
246
311
  schema: [
247
312
  {
248
313
  additionalProperties: false,
249
314
  properties: {
250
- allowAsyncFunctionDeclarations: {
251
- default: false,
252
- description: "If true, allows async function declarations and identifiers that reference async functions. Other async function types remain disallowed.",
253
- type: "boolean",
254
- },
255
315
  environment: {
256
316
  default: "roblox-ts",
257
317
  description: "Environment mode: 'roblox-ts' only allows identifiers, 'standard' allows both identifiers and named function expressions",
@@ -260,8 +320,22 @@ const requireNamedEffectFunctions = {
260
320
  },
261
321
  hooks: {
262
322
  default: DEFAULT_HOOKS,
263
- description: "Array of hook names to check",
264
- items: { type: "string" },
323
+ description: "Array of hook configuration objects with name and allowAsync settings",
324
+ items: {
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",
338
+ },
265
339
  type: "array",
266
340
  },
267
341
  },
@@ -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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"}
@@ -0,0 +1,41 @@
1
+ import type { Rule } from "eslint";
2
+ import Type from "typebox";
3
+ /**
4
+ * Configuration for a single opener/closer pair
5
+ */
6
+ export interface PairConfiguration {
7
+ /** Opener function name (e.g., "debug.profilebegin") */
8
+ readonly opener: string;
9
+ /** Closer function name(s) - single or alternatives */
10
+ readonly closer: string | ReadonlyArray<string>;
11
+ /** Alternative closers (any one satisfies) */
12
+ readonly alternatives?: ReadonlyArray<string>;
13
+ /** All listed closers must be called */
14
+ readonly requireAll?: ReadonlyArray<string>;
15
+ /** Disallow await/yield between opener and closer */
16
+ readonly requireSync?: boolean;
17
+ /** Platform-specific behavior */
18
+ readonly platform?: "roblox";
19
+ /** Custom yielding function patterns (for Roblox) */
20
+ readonly yieldingFunctions?: ReadonlyArray<string>;
21
+ }
22
+ declare const isScope: import("typebox/compile").Validator<{}, Type.TUnion<[Type.TLiteral<"function">, Type.TLiteral<"block">, Type.TLiteral<"file">]>>;
23
+ export type Scope = Type.Static<typeof isScope>;
24
+ /**
25
+ * Rule options schema
26
+ */
27
+ export interface RequirePairedCallsOptions {
28
+ /** Array of paired function configurations */
29
+ readonly pairs: ReadonlyArray<PairConfiguration>;
30
+ /** Scope for balance checking */
31
+ readonly scope?: Scope;
32
+ /** Allow conditional closers */
33
+ readonly allowConditionalClosers?: boolean;
34
+ /** Allow multiple consecutive openers */
35
+ readonly allowMultipleOpeners?: boolean;
36
+ /** Maximum nesting depth (0 = unlimited) */
37
+ readonly maxNestingDepth?: number;
38
+ }
39
+ export declare const DEFAULT_ROBLOX_YIELDING_FUNCTIONS: readonly ["task.wait", "wait", "*.WaitForChild"];
40
+ declare const rule: Rule.RuleModule;
41
+ export default rule;