@pobammer-ts/eslint-cease-nonsense-rules 1.2.3 → 1.3.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 (38) hide show
  1. package/dist/build-metadata.json +5 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.js +11847 -80
  4. package/dist/index.js.map +516 -1
  5. package/dist/rules/no-async-constructor.d.ts +7 -0
  6. package/package.json +10 -10
  7. package/dist/configure-utilities.js +0 -136
  8. package/dist/configure-utilities.js.map +0 -1
  9. package/dist/rules/ban-instances.js +0 -123
  10. package/dist/rules/ban-instances.js.map +0 -1
  11. package/dist/rules/ban-react-fc.js +0 -42
  12. package/dist/rules/ban-react-fc.js.map +0 -1
  13. package/dist/rules/enforce-ianitor-check-type.js +0 -340
  14. package/dist/rules/enforce-ianitor-check-type.js.map +0 -1
  15. package/dist/rules/no-color3-constructor.js +0 -76
  16. package/dist/rules/no-color3-constructor.js.map +0 -1
  17. package/dist/rules/no-instance-methods-without-this.js +0 -122
  18. package/dist/rules/no-instance-methods-without-this.js.map +0 -1
  19. package/dist/rules/no-print.js +0 -25
  20. package/dist/rules/no-print.js.map +0 -1
  21. package/dist/rules/no-shorthand-names.js +0 -116
  22. package/dist/rules/no-shorthand-names.js.map +0 -1
  23. package/dist/rules/no-warn.js +0 -25
  24. package/dist/rules/no-warn.js.map +0 -1
  25. package/dist/rules/prefer-sequence-overloads.js +0 -109
  26. package/dist/rules/prefer-sequence-overloads.js.map +0 -1
  27. package/dist/rules/prefer-udim2-shorthand.js +0 -161
  28. package/dist/rules/prefer-udim2-shorthand.js.map +0 -1
  29. package/dist/rules/require-named-effect-functions.js +0 -350
  30. package/dist/rules/require-named-effect-functions.js.map +0 -1
  31. package/dist/rules/require-paired-calls.js +0 -861
  32. package/dist/rules/require-paired-calls.js.map +0 -1
  33. package/dist/rules/require-react-component-keys.js +0 -357
  34. package/dist/rules/require-react-component-keys.js.map +0 -1
  35. package/dist/rules/use-exhaustive-dependencies.js +0 -697
  36. package/dist/rules/use-exhaustive-dependencies.js.map +0 -1
  37. package/dist/rules/use-hook-at-top-level.js +0 -351
  38. 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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"}