@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.
- package/dist/configure-utilities.d.ts +68 -0
- package/dist/configure-utilities.js +116 -0
- package/dist/configure-utilities.js.map +1 -0
- package/dist/rules/ban-react-fc.js +4 -7
- 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 +2 -2
- package/dist/rules/enforce-ianitor-check-type.js.map +1 -1
- package/dist/rules/no-color3-constructor.js +2 -1
- package/dist/rules/no-color3-constructor.js.map +1 -1
- package/dist/rules/no-shorthand-names.js +18 -18
- package/dist/rules/no-shorthand-names.js.map +1 -1
- package/dist/rules/prefer-sequence-overloads.js +17 -7
- package/dist/rules/prefer-sequence-overloads.js.map +1 -1
- package/dist/rules/prefer-udim2-shorthand.js +117 -20
- package/dist/rules/prefer-udim2-shorthand.js.map +1 -1
- package/dist/rules/require-named-effect-functions.js +103 -29
- package/dist/rules/require-named-effect-functions.js.map +1 -1
- package/dist/rules/require-paired-calls.d.ts +41 -0
- package/dist/rules/require-paired-calls.js +706 -0
- package/dist/rules/require-paired-calls.js.map +1 -0
- package/dist/rules/require-react-component-keys.js +18 -17
- package/dist/rules/require-react-component-keys.js.map +1 -1
- package/dist/rules/use-exhaustive-dependencies.d.ts +0 -17
- package/dist/rules/use-exhaustive-dependencies.js +26 -108
- 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 +6 -5
|
@@ -1,20 +1,113 @@
|
|
|
1
|
-
import { TSESTree } from "@typescript-eslint/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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 =
|
|
118
|
+
const collected = collectArguments(context, node.arguments);
|
|
26
119
|
if (!collected)
|
|
27
120
|
return;
|
|
28
|
-
const {
|
|
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(${
|
|
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(${
|
|
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;
|
|
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;AAYpD,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,IAAa;IAC9B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC;AAClD,CAAC;AACD,SAAS,eAAe,CACvB,MAAoC;IAEpC,OAAO,MAAM,IAAI,MAAM,CAAC;AACzB,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAErD,SAAS,eAAe,CAAC,IAAkC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAE3B,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QAC1D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QAEnD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1C,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;QACvC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAC1B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YAAE,OAAO,SAAS,CAAC;QAE/E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1D,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,QAAQ,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;IAC/G,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAE3B,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAClD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;QAC1D,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEpC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC1C,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,CAAC,KAAK,CAAC;YACpC,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAC;QACpC,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAC3D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9F,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,SAAS,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAE1E,QAAQ,QAAQ,EAAE,CAAC;gBAClB,KAAK,GAAG;oBACP,OAAO,SAAS,GAAG,UAAU,CAAC;gBAE/B,KAAK,GAAG;oBACP,OAAO,SAAS,GAAG,UAAU,CAAC;gBAE/B,KAAK,GAAG;oBACP,OAAO,SAAS,GAAG,UAAU,CAAC;gBAE/B,KAAK,GAAG;oBACP,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC;gBAE9D,KAAK,GAAG;oBACP,OAAO,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC;gBAE9D;oBACC,OAAO,SAAS,CAAC;YACnB,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAqB,EAAE,UAAkC;IAClF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE9C,MAAM,KAAK,GAA8B,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEtF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1E,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,aAAa;YAAE,OAAO,SAAS,CAAC;QAE/E,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;IAEjE,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,KAAK,SAAS;QACjH,OAAO,SAAS,CAAC;IAElB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC7D,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,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,CAAC,SAAS;oBAAE,OAAO;gBAEvB,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;gBAEvE,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEtD,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,UAAU,KAAK,UAAU,GAAG,CAAC;wBACxF,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,WAAW,KAAK,WAAW,GAAG,CAAC;wBAC3F,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,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 = [
|
|
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(
|
|
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(
|
|
77
|
-
node:
|
|
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
|
|
97
|
+
const castInitNode = castNode.init;
|
|
95
98
|
return {
|
|
96
|
-
isAsync: Boolean(
|
|
97
|
-
node:
|
|
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
|
|
112
|
-
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());
|
|
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 (!
|
|
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
|
|
149
|
-
if (
|
|
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
|
-
!
|
|
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 }}
|
|
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.
|
|
244
|
-
identifierReferencesAsyncFunction: "{{ hook }} called with identifier that references an async function.
|
|
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
|
|
264
|
-
items: {
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,CAAU,CAAC;AAStF,MAAM,aAAa,GAAG,OAAO,CAC5B,IAAI,CAAC,MAAM,CACV;IACC,8BAA8B,EAAE,IAAI,CAAC,OAAO,EAAE;IAC9C,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IAC9E,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;CAChC,EACD,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAC9B,CACD,CAAC;AAEF,SAAS,YAAY,CAAC,OAAgB;IACrC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO;YACN,8BAA8B,EAAE,KAAK;YACrC,WAAW,EAAE,WAAW;YACxB,KAAK,EAAE,aAAa;SACpB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO;YACN,8BAA8B,EAAE,KAAK;YACrC,WAAW,EAAE,WAAW;YACxB,KAAK,EAAE,aAAa;SACpB,CAAC;IACH,CAAC;IAED,OAAO;QACN,8BAA8B,EAAE,OAAO,CAAC,8BAA8B;QACtE,WAAW,EAAE,OAAO,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;QAC1E,KAAK,EAAE,OAAO,CAAC,KAAK;KACpB,CAAC;AACH,CAAC;AAWD,SAAS,WAAW,CAAC,cAA8B;IAClD,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IAClC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAClH,OAAO,MAAM,CAAC,IAAI,CAAC;IAEpB,IACC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,gBAAgB;QACxD,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU;QAC5D,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ;QACxC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;QAE/B,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;IAE7B,OAAO,SAAS,CAAC;AAClB,CAAC;AAQD,SAAS,2BAA2B,CACnC,UAA+B,EAC/B,OAAyB;IAEzB,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAY,CAAC;QACnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAElE,MAAM,QAAQ,GAAG,KAAuD,CAAC;QACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC;QAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAE/C,IAAI,QAAiB,CAAC;QACtB,IAAI,YAAY,GAAY,KAAK,CAAC;QAElC,OAAO,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,YAA8D,CAAC;YAC/E,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;gBAAE,MAAM;YAC7D,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9B,CAAC;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAExE,MAAM,YAAY,GAAG,QAAoC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE1F,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI;gBAAE,SAAS;YAEpE,MAAM,cAAc,GAAG,UAAgC,CAAC;YACxD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;YACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,SAAS;YAExD,MAAM,QAAQ,GAAG,IAA0D,CAAC;YAC5E,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;gBACnE,MAAM,QAAQ,GAAG,IAA+C,CAAC;gBACjE,OAAO;oBACN,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAChC,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,sBAAsB;iBAC5B,CAAC;YACH,CAAC;YAED,IACC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,kBAAkB;gBAC5D,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;gBACjC,QAAQ,CAAC,IAAI,KAAK,IAAI,EACrB,CAAC;gBACF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAA0C,CAAC;gBACrE,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,uBAAuB,EAAE,CAAC;oBACvE,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAmD,CAAC;oBAC/E,OAAO;wBACN,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC;wBACjC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,OAAO;qBACb,CAAC;gBACH,CAAC;gBAED,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;oBAClE,MAAM,YAAY,GAAG,QAAQ,CAAC,IAA8C,CAAC;oBAC7E,OAAO;wBACN,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;wBACpC,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,qBAAqB;qBAC3B,CAAC;gBACH,CAAC;YACF,CAAC;QACF,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC;AAED,MAAM,2BAA2B,GAAoB;IACpD,MAAM,CAAC,OAAO;QACb,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,8BAA8B,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,WAAW,KAAK,WAAW,CAAC;QAEnD,OAAO;YACN,cAAc,CAAC,IAAe;gBAC7B,MAAM,cAAc,GAAG,IAAyE,CAAC;gBAEjG,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAmD,CAAC,CAAC;gBAClF,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;oBAAE,OAAO;gBAEvE,MAAM,aAAa,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpD,IAAI,aAAa,KAAK,SAAS;oBAAE,OAAO;gBAExC,MAAM,YAAY,GAAG,aAAgE,CAAC;gBACtF,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;oBAC9D,MAAM,UAAU,GAAG,YAA8C,CAAC;oBAClE,MAAM,QAAQ,GAAG,2BAA2B,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;oBAElE,IAAI,QAAQ,KAAK,SAAS;wBAAE,OAAO;oBAEnC,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC/B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACtB,IAAI,CAAC,8BAA8B,EAAE,CAAC;gCACrC,OAAO,CAAC,MAAM,CAAC;oCACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oCACxB,SAAS,EAAE,gCAAgC;oCAC3C,IAAI;iCACJ,CAAC,CAAC;4BACJ,CAAC;wBACF,CAAC;6BAAM,CAAC;4BACP,OAAO,CAAC,MAAM,CAAC;gCACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACxB,SAAS,EAAE,2BAA2B;gCACtC,IAAI;6BACJ,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;yBAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;wBACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAmC,CAAC;wBAC9D,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;4BAC/B,OAAO,CAAC,MAAM,CAAC;gCACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACxB,SAAS,EAAE,mBAAmB;gCAC9B,IAAI;6BACJ,CAAC,CAAC;wBACJ,CAAC;6BAAM,IAAI,cAAc,EAAE,CAAC;4BAC3B,OAAO,CAAC,MAAM,CAAC;gCACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACxB,SAAS,EAAE,oBAAoB;gCAC/B,IAAI;6BACJ,CAAC,CAAC;wBACJ,CAAC;oBACF,CAAC;yBAAM,IACN,QAAQ,CAAC,IAAI,KAAK,sBAAsB;wBACxC,QAAQ,CAAC,OAAO;wBAChB,CAAC,8BAA8B,EAC9B,CAAC;wBACF,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,mCAAmC;4BAC9C,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACR,CAAC;gBAED,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,uBAAuB,EAAE,CAAC;oBAC3E,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;wBACxB,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,oBAAoB;4BAC/B,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACP,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,eAAe;4BAC1B,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACR,CAAC;gBAED,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;oBACtE,MAAM,sBAAsB,GAAG,YAA4D,CAAC;oBAC5F,wEAAwE;oBACxE,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;oBAEzD,IAAI,aAAa,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;wBACzC,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,yBAAyB;4BACpC,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;yBAAM,IAAI,aAAa,IAAI,cAAc,EAAE,CAAC;wBAC5C,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,oBAAoB;4BAC/B,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;yBAAM,IAAI,CAAC,aAAa,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;wBACjD,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,wBAAwB;4BACnC,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;yBAAM,IAAI,CAAC,aAAa,EAAE,CAAC;wBAC3B,OAAO,CAAC,MAAM,CAAC;4BACd,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;4BACxB,SAAS,EAAE,mBAAmB;4BAC9B,IAAI;yBACJ,CAAC,CAAC;oBACJ,CAAC;oBACD,OAAO;gBACR,CAAC;YACF,CAAC;SACD,CAAC;IACH,CAAC;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,WAAW,EACV,0HAA0H;YAC3H,WAAW,EAAE,KAAK;SAClB;QACD,QAAQ,EAAE;YACT,iBAAiB,EAAE,gFAAgF;YACnG,aAAa,EAAE,4EAA4E;YAC3F,sBAAsB,EACrB,oGAAoG;YACrG,kBAAkB,EACjB,gGAAgG;YACjG,wBAAwB,EACvB,4GAA4G;YAC7G,uBAAuB,EACtB,qGAAqG;YACtG,kBAAkB,EACjB,0FAA0F;YAC3F,yBAAyB,EACxB,+GAA+G;YAChH,8BAA8B,EAC7B,6JAA6J;YAC9J,iCAAiC,EAChC,uJAAuJ;SACxJ;QACD,MAAM,EAAE;YACP;gBACC,oBAAoB,EAAE,KAAK;gBAC3B,UAAU,EAAE;oBACX,8BAA8B,EAAE;wBAC/B,OAAO,EAAE,KAAK;wBACd,WAAW,EACV,2IAA2I;wBAC5I,IAAI,EAAE,SAAS;qBACf;oBACD,WAAW,EAAE;wBACZ,OAAO,EAAE,WAAW;wBACpB,WAAW,EACV,0HAA0H;wBAC3H,IAAI,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;wBAC/B,IAAI,EAAE,QAAQ;qBACd;oBACD,KAAK,EAAE;wBACN,OAAO,EAAE,aAAa;wBACtB,WAAW,EAAE,8BAA8B;wBAC3C,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACzB,IAAI,EAAE,OAAO;qBACb;iBACD;gBACD,IAAI,EAAE,QAAQ;aACd;SACD;QACD,IAAI,EAAE,SAAS;KACf;CACD,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
|
|
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;
|