@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.
- package/dist/rules/ban-react-fc.js +6 -37
- package/dist/rules/ban-react-fc.js.map +1 -1
- package/dist/rules/enforce-ianitor-check-type.d.ts +7 -0
- package/dist/rules/enforce-ianitor-check-type.js +71 -159
- package/dist/rules/enforce-ianitor-check-type.js.map +1 -1
- package/dist/rules/no-color3-constructor.d.ts +0 -17
- package/dist/rules/no-color3-constructor.js +11 -32
- package/dist/rules/no-color3-constructor.js.map +1 -1
- package/dist/rules/no-instance-methods-without-this.js +2 -3
- package/dist/rules/no-instance-methods-without-this.js.map +1 -1
- package/dist/rules/no-print.d.ts +0 -15
- package/dist/rules/no-print.js +0 -21
- package/dist/rules/no-print.js.map +1 -1
- package/dist/rules/no-shorthand-names.d.ts +0 -24
- package/dist/rules/no-shorthand-names.js +32 -86
- package/dist/rules/no-shorthand-names.js.map +1 -1
- package/dist/rules/no-warn.d.ts +0 -15
- package/dist/rules/no-warn.js +0 -21
- package/dist/rules/no-warn.js.map +1 -1
- package/dist/rules/prefer-sequence-overloads.js +26 -23
- package/dist/rules/prefer-sequence-overloads.js.map +1 -1
- package/dist/rules/prefer-udim2-shorthand.d.ts +0 -14
- package/dist/rules/prefer-udim2-shorthand.js +138 -44
- package/dist/rules/prefer-udim2-shorthand.js.map +1 -1
- package/dist/rules/require-named-effect-functions.js +271 -59
- package/dist/rules/require-named-effect-functions.js.map +1 -1
- package/dist/rules/require-react-component-keys.d.ts +3 -39
- package/dist/rules/require-react-component-keys.js +58 -158
- package/dist/rules/require-react-component-keys.js.map +1 -1
- package/dist/rules/use-exhaustive-dependencies.d.ts +0 -59
- package/dist/rules/use-exhaustive-dependencies.js +120 -329
- package/dist/rules/use-exhaustive-dependencies.js.map +1 -1
- package/dist/rules/use-hook-at-top-level.js +17 -118
- package/dist/rules/use-hook-at-top-level.js.map +1 -1
- package/package.json +11 -8
|
@@ -1,73 +1,167 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { TSESTree } from "@typescript-eslint/utils";
|
|
2
|
+
function isNumber(value) {
|
|
3
|
+
return typeof value === "number" && !Number.isNaN(value);
|
|
3
4
|
}
|
|
4
|
-
function
|
|
5
|
-
return
|
|
5
|
+
function isRecord(node) {
|
|
6
|
+
return typeof node === "object" && node !== null;
|
|
6
7
|
}
|
|
7
|
-
function
|
|
8
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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 !==
|
|
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(${
|
|
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(${
|
|
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":"
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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 (
|
|
24
|
+
if (!isRuleOptions.Check(options)) {
|
|
20
25
|
return {
|
|
21
26
|
environment: "roblox-ts",
|
|
22
27
|
hooks: DEFAULT_HOOKS,
|
|
23
28
|
};
|
|
24
29
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
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
|
|
57
|
-
const
|
|
58
|
-
const
|
|
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
|
|
62
|
-
const hookName = getHookName(
|
|
63
|
-
if (
|
|
172
|
+
const callExpression = node;
|
|
173
|
+
const hookName = getHookName(callExpression);
|
|
174
|
+
if (typeof hookName !== "string" || !effectHooks.has(hookName))
|
|
64
175
|
return;
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
176
|
+
const firstArgument = callExpression.arguments?.[0];
|
|
177
|
+
if (firstArgument === undefined)
|
|
67
178
|
return;
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
|
323
|
+
description: "Array of hook configuration objects with name and allowAsync settings",
|
|
124
324
|
items: {
|
|
125
|
-
|
|
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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"}
|