@pobammer-ts/eslint-cease-nonsense-rules 1.2.2 → 1.2.4

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 (37) hide show
  1. package/dist/build-metadata.json +5 -0
  2. package/dist/index.js +11637 -80
  3. package/dist/index.js.map +515 -1
  4. package/dist/rules/require-paired-calls.d.ts +1 -1
  5. package/package.json +10 -10
  6. package/dist/configure-utilities.js +0 -136
  7. package/dist/configure-utilities.js.map +0 -1
  8. package/dist/rules/ban-instances.js +0 -123
  9. package/dist/rules/ban-instances.js.map +0 -1
  10. package/dist/rules/ban-react-fc.js +0 -42
  11. package/dist/rules/ban-react-fc.js.map +0 -1
  12. package/dist/rules/enforce-ianitor-check-type.js +0 -340
  13. package/dist/rules/enforce-ianitor-check-type.js.map +0 -1
  14. package/dist/rules/no-color3-constructor.js +0 -76
  15. package/dist/rules/no-color3-constructor.js.map +0 -1
  16. package/dist/rules/no-instance-methods-without-this.js +0 -122
  17. package/dist/rules/no-instance-methods-without-this.js.map +0 -1
  18. package/dist/rules/no-print.js +0 -25
  19. package/dist/rules/no-print.js.map +0 -1
  20. package/dist/rules/no-shorthand-names.js +0 -116
  21. package/dist/rules/no-shorthand-names.js.map +0 -1
  22. package/dist/rules/no-warn.js +0 -25
  23. package/dist/rules/no-warn.js.map +0 -1
  24. package/dist/rules/prefer-sequence-overloads.js +0 -109
  25. package/dist/rules/prefer-sequence-overloads.js.map +0 -1
  26. package/dist/rules/prefer-udim2-shorthand.js +0 -161
  27. package/dist/rules/prefer-udim2-shorthand.js.map +0 -1
  28. package/dist/rules/require-named-effect-functions.js +0 -350
  29. package/dist/rules/require-named-effect-functions.js.map +0 -1
  30. package/dist/rules/require-paired-calls.js +0 -848
  31. package/dist/rules/require-paired-calls.js.map +0 -1
  32. package/dist/rules/require-react-component-keys.js +0 -357
  33. package/dist/rules/require-react-component-keys.js.map +0 -1
  34. package/dist/rules/use-exhaustive-dependencies.js +0 -697
  35. package/dist/rules/use-exhaustive-dependencies.js.map +0 -1
  36. package/dist/rules/use-hook-at-top-level.js +0 -351
  37. package/dist/rules/use-hook-at-top-level.js.map +0 -1
@@ -1,350 +0,0 @@
1
- import { TSESTree } from "@typescript-eslint/types";
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 isEnvironmentMode = Type.Union([Type.Literal("roblox-ts"), Type.Literal("standard")]);
10
- const isHookConfiguration = Type.Object({
11
- allowAsync: Type.Boolean(),
12
- name: Type.String(),
13
- });
14
- const isRuleOptions = Compile(Type.Object({
15
- environment: isEnvironmentMode,
16
- hooks: Type.Array(isHookConfiguration),
17
- }, { additionalProperties: true }));
18
- function parseOptions(options) {
19
- if (options === undefined) {
20
- return {
21
- environment: "roblox-ts",
22
- hooks: DEFAULT_HOOKS,
23
- };
24
- }
25
- if (!isRuleOptions.Check(options)) {
26
- return {
27
- environment: "roblox-ts",
28
- hooks: DEFAULT_HOOKS,
29
- };
30
- }
31
- return {
32
- environment: options.environment === "standard" ? "standard" : "roblox-ts",
33
- hooks: options.hooks,
34
- };
35
- }
36
- function getHookName(callExpression) {
37
- const { callee } = callExpression;
38
- if (callee.type === TSESTree.AST_NODE_TYPES.Identifier && typeof callee.name === "string" && callee.name.length > 0)
39
- return callee.name;
40
- if (callee.type === TSESTree.AST_NODE_TYPES.MemberExpression &&
41
- callee.property?.type === TSESTree.AST_NODE_TYPES.Identifier &&
42
- typeof callee.property.name === "string" &&
43
- callee.property.name.length > 0)
44
- return callee.property.name;
45
- return undefined;
46
- }
47
- function resolveIdentifierToFunction(identifier, context) {
48
- try {
49
- const scope = context.sourceCode.getScope?.(identifier);
50
- if (typeof scope !== "object" || scope === null)
51
- return undefined;
52
- const scopeObj = scope;
53
- const setVal = scopeObj.set;
54
- if (!(setVal instanceof Map))
55
- return undefined;
56
- let variable;
57
- let currentScope = scope;
58
- while (typeof currentScope === "object" && currentScope !== null) {
59
- const current = currentScope;
60
- variable = current.set.get(identifier.name);
61
- if (typeof variable === "object" && variable !== null)
62
- break;
63
- currentScope = current.upper;
64
- }
65
- if (typeof variable !== "object" || variable === null)
66
- return undefined;
67
- const castVariable = variable;
68
- if (!Array.isArray(castVariable.defs) || castVariable.defs.length === 0)
69
- return undefined;
70
- for (const definition of castVariable.defs) {
71
- if (typeof definition !== "object" || definition === null)
72
- continue;
73
- const castDefinition = definition;
74
- const node = castDefinition.node;
75
- if (typeof node !== "object" || node === null)
76
- continue;
77
- const castNode = node;
78
- if (castNode.type === TSESTree.AST_NODE_TYPES.FunctionDeclaration) {
79
- return {
80
- isAsync: Boolean(castNode.async),
81
- node: node,
82
- type: "function-declaration",
83
- };
84
- }
85
- if (castNode.type === TSESTree.AST_NODE_TYPES.VariableDeclarator &&
86
- typeof castNode.init === "object" &&
87
- castNode.init !== null) {
88
- const castInit = castNode.init;
89
- if (castInit.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
90
- const arrowNode = castNode.init;
91
- return {
92
- isAsync: Boolean(arrowNode.async),
93
- node: arrowNode,
94
- type: "arrow",
95
- };
96
- }
97
- if (castInit.type === TSESTree.AST_NODE_TYPES.FunctionExpression) {
98
- const castInitNode = castNode.init;
99
- return {
100
- isAsync: Boolean(castInitNode.async),
101
- node: castInitNode,
102
- type: "function-expression",
103
- };
104
- }
105
- }
106
- }
107
- return undefined;
108
- }
109
- catch {
110
- return undefined;
111
- }
112
- }
113
- function isCallbackHookResult(identifier, context) {
114
- try {
115
- const scope = context.sourceCode.getScope?.(identifier);
116
- if (typeof scope !== "object" || scope === null)
117
- return false;
118
- const scopeObj = scope;
119
- const setVal = scopeObj.set;
120
- if (!(setVal instanceof Map))
121
- return false;
122
- let variable;
123
- let currentScope = scope;
124
- while (typeof currentScope === "object" && currentScope !== null) {
125
- const current = currentScope;
126
- variable = current.set.get(identifier.name);
127
- if (typeof variable === "object" && variable !== null)
128
- break;
129
- currentScope = current.upper;
130
- }
131
- if (typeof variable !== "object" || variable === null)
132
- return false;
133
- const castVariable = variable;
134
- if (!Array.isArray(castVariable.defs) || castVariable.defs.length === 0)
135
- return false;
136
- for (const definition of castVariable.defs) {
137
- if (typeof definition !== "object" || definition === null)
138
- continue;
139
- const castDefinition = definition;
140
- const node = castDefinition.node;
141
- if (typeof node !== "object" || node === null)
142
- continue;
143
- const castNode = node;
144
- if (castNode.type !== TSESTree.AST_NODE_TYPES.VariableDeclarator)
145
- continue;
146
- if (typeof castNode.init !== "object" || castNode.init === null)
147
- continue;
148
- const init = castNode.init;
149
- if (init.type !== TSESTree.AST_NODE_TYPES.CallExpression)
150
- continue;
151
- const calleeHookName = getHookName(init);
152
- if (calleeHookName === "useCallback" || calleeHookName === "useMemo")
153
- return true;
154
- }
155
- return false;
156
- }
157
- catch {
158
- return false;
159
- }
160
- }
161
- const requireNamedEffectFunctions = {
162
- create(context) {
163
- const { hooks, environment } = parseOptions(context.options[0]);
164
- const hookAsyncConfig = new Map(hooks.map((hookConfig) => [hookConfig.name, hookConfig.allowAsync]));
165
- const effectHooks = new Set(hookAsyncConfig.keys());
166
- const isRobloxTsMode = environment === "roblox-ts";
167
- function isAsyncAllowed(hookName) {
168
- const result = hookAsyncConfig.get(hookName);
169
- return typeof result === "boolean" ? result : false;
170
- }
171
- return {
172
- CallExpression(node) {
173
- const callExpression = node;
174
- const hookName = getHookName(callExpression);
175
- if (typeof hookName !== "string" || !effectHooks.has(hookName))
176
- return;
177
- const firstArgument = callExpression.arguments?.[0];
178
- if (firstArgument === undefined)
179
- return;
180
- const argumentNode = firstArgument;
181
- if (argumentNode.type === TSESTree.AST_NODE_TYPES.Identifier) {
182
- const identifier = argumentNode;
183
- const resolved = resolveIdentifierToFunction(identifier, context);
184
- if (resolved === undefined) {
185
- if (isCallbackHookResult(identifier, context)) {
186
- context.report({
187
- data: { hook: hookName },
188
- messageId: "identifierReferencesCallback",
189
- node,
190
- });
191
- }
192
- return;
193
- }
194
- if (resolved.type === "arrow") {
195
- if (resolved.isAsync) {
196
- if (!isAsyncAllowed(hookName)) {
197
- context.report({
198
- data: { hook: hookName },
199
- messageId: "identifierReferencesAsyncArrow",
200
- node,
201
- });
202
- }
203
- }
204
- else {
205
- context.report({
206
- data: { hook: hookName },
207
- messageId: "identifierReferencesArrow",
208
- node,
209
- });
210
- }
211
- }
212
- else if (resolved.type === "function-expression") {
213
- const castNode = resolved.node;
214
- if (castNode.id === undefined) {
215
- context.report({
216
- data: { hook: hookName },
217
- messageId: "anonymousFunction",
218
- node,
219
- });
220
- }
221
- else if (isRobloxTsMode) {
222
- context.report({
223
- data: { hook: hookName },
224
- messageId: "functionExpression",
225
- node,
226
- });
227
- }
228
- }
229
- else if (resolved.type === "function-declaration" &&
230
- resolved.isAsync &&
231
- !isAsyncAllowed(hookName)) {
232
- context.report({
233
- data: { hook: hookName },
234
- messageId: "identifierReferencesAsyncFunction",
235
- node,
236
- });
237
- }
238
- return;
239
- }
240
- if (argumentNode.type === TSESTree.AST_NODE_TYPES.ArrowFunctionExpression) {
241
- if (argumentNode.async) {
242
- context.report({
243
- data: { hook: hookName },
244
- messageId: "asyncArrowFunction",
245
- node,
246
- });
247
- }
248
- else {
249
- context.report({
250
- data: { hook: hookName },
251
- messageId: "arrowFunction",
252
- node,
253
- });
254
- }
255
- return;
256
- }
257
- if (argumentNode.type === TSESTree.AST_NODE_TYPES.FunctionExpression) {
258
- const functionExpressionNode = argumentNode;
259
- // oxlint-disable-next-line typescript-eslint/strict-boolean-expressions
260
- const functionHasId = Boolean(functionExpressionNode.id);
261
- if (functionHasId && argumentNode.async) {
262
- context.report({
263
- data: { hook: hookName },
264
- messageId: "asyncFunctionExpression",
265
- node,
266
- });
267
- }
268
- else if (functionHasId && isRobloxTsMode) {
269
- context.report({
270
- data: { hook: hookName },
271
- messageId: "functionExpression",
272
- node,
273
- });
274
- }
275
- else if (!functionHasId && argumentNode.async) {
276
- context.report({
277
- data: { hook: hookName },
278
- messageId: "asyncAnonymousFunction",
279
- node,
280
- });
281
- }
282
- else if (!functionHasId) {
283
- context.report({
284
- data: { hook: hookName },
285
- messageId: "anonymousFunction",
286
- node,
287
- });
288
- }
289
- return;
290
- }
291
- },
292
- };
293
- },
294
- meta: {
295
- docs: {
296
- description: "Enforce named effect functions for better debuggability. Prevents inline arrow functions in useEffect and similar hooks.",
297
- recommended: false,
298
- },
299
- messages: {
300
- anonymousFunction: "Use a named function instead of an anonymous function for better debuggability",
301
- arrowFunction: "Use a named function instead of an arrow function for better debuggability",
302
- asyncAnonymousFunction: "Async anonymous functions are not allowed in {{ hook }}. Use an async function declaration instead",
303
- asyncArrowFunction: "Async arrow functions are not allowed in {{ hook }}. Use an async function declaration instead",
304
- asyncFunctionDeclaration: "Async function declarations are not allowed in {{ hook }}. Set allowAsync: true for this hook to enable",
305
- asyncFunctionExpression: "Async function expressions are not allowed in {{ hook }}. Use an async function declaration instead",
306
- functionExpression: "Use a named function reference instead of a function expression for better debuggability",
307
- identifierReferencesArrow: "{{ hook }} called with identifier that references an arrow function. Use a named function declaration instead",
308
- identifierReferencesAsyncArrow: "{{ hook }} called with identifier that references an async arrow function. Set allowAsync: true for this hook to enable",
309
- identifierReferencesAsyncFunction: "{{ hook }} called with identifier that references an async function. Set allowAsync: true for this hook to enable",
310
- identifierReferencesCallback: "{{ hook }} called with identifier that references a useCallback/useMemo result. Use a named function declaration instead",
311
- },
312
- schema: [
313
- {
314
- additionalProperties: false,
315
- properties: {
316
- environment: {
317
- default: "roblox-ts",
318
- description: "Environment mode: 'roblox-ts' only allows identifiers, 'standard' allows both identifiers and named function expressions",
319
- enum: ["roblox-ts", "standard"],
320
- type: "string",
321
- },
322
- hooks: {
323
- default: DEFAULT_HOOKS,
324
- description: "Array of hook configuration objects with name and allowAsync settings",
325
- items: {
326
- additionalProperties: false,
327
- properties: {
328
- allowAsync: {
329
- description: "Whether async functions are allowed for this hook",
330
- type: "boolean",
331
- },
332
- name: {
333
- description: "Hook name to check",
334
- type: "string",
335
- },
336
- },
337
- required: ["name", "allowAsync"],
338
- type: "object",
339
- },
340
- type: "array",
341
- },
342
- },
343
- type: "object",
344
- },
345
- ],
346
- type: "problem",
347
- },
348
- };
349
- export default requireNamedEffectFunctions;
350
- //# sourceMappingURL=require-named-effect-functions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"require-named-effect-functions.js","sourceRoot":"","sources":["../../src/rules/require-named-effect-functions.ts"],"names":[],"mappings":"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"}