eslint-plugin-react-hooks-extra 1.15.0 → 1.15.1-beta.2
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/index.js +39 -37
- package/dist/index.mjs +39 -37
- package/package.json +13 -13
package/dist/index.js
CHANGED
|
@@ -32,7 +32,7 @@ var VAR4__namespace = /*#__PURE__*/_interopNamespace(VAR4);
|
|
|
32
32
|
|
|
33
33
|
// package.json
|
|
34
34
|
var name = "eslint-plugin-react-hooks-extra";
|
|
35
|
-
var version = "1.15.
|
|
35
|
+
var version = "1.15.1-beta.2";
|
|
36
36
|
var createRule = shared.createRuleForPlugin("hooks-extra");
|
|
37
37
|
function isFromHookCall(name2, context, settings, predicate = tools.F.constTrue) {
|
|
38
38
|
const hookAlias = settings.additionalHooks?.[name2] ?? [];
|
|
@@ -56,20 +56,6 @@ function isSetFunctionCall(context, settings) {
|
|
|
56
56
|
const isIdFromUseStateCall = isFromUseStateCall(context, settings);
|
|
57
57
|
return (node) => {
|
|
58
58
|
switch (node.callee.type) {
|
|
59
|
-
// const [data, setData] = useState();
|
|
60
|
-
// setData();
|
|
61
|
-
case types.AST_NODE_TYPES.Identifier: {
|
|
62
|
-
return isIdFromUseStateCall(node.callee);
|
|
63
|
-
}
|
|
64
|
-
// const data = useState();
|
|
65
|
-
// data[1]();
|
|
66
|
-
case types.AST_NODE_TYPES.MemberExpression: {
|
|
67
|
-
if (!("name" in node.callee.object)) return false;
|
|
68
|
-
const initialScope = context.sourceCode.getScope(node);
|
|
69
|
-
const property = astUtils.getStaticValue(node.callee.property, initialScope);
|
|
70
|
-
if (property?.value === 1) return isIdFromUseStateCall(node.callee.object);
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
59
|
// const data = useState();
|
|
74
60
|
// data.at(1)();
|
|
75
61
|
case types.AST_NODE_TYPES.CallExpression: {
|
|
@@ -90,6 +76,20 @@ function isSetFunctionCall(context, settings) {
|
|
|
90
76
|
if (value?.value === 1) return isIdFromUseStateCall(callee.object);
|
|
91
77
|
return false;
|
|
92
78
|
}
|
|
79
|
+
// const [data, setData] = useState();
|
|
80
|
+
// setData();
|
|
81
|
+
case types.AST_NODE_TYPES.Identifier: {
|
|
82
|
+
return isIdFromUseStateCall(node.callee);
|
|
83
|
+
}
|
|
84
|
+
// const data = useState();
|
|
85
|
+
// data[1]();
|
|
86
|
+
case types.AST_NODE_TYPES.MemberExpression: {
|
|
87
|
+
if (!("name" in node.callee.object)) return false;
|
|
88
|
+
const initialScope = context.sourceCode.getScope(node);
|
|
89
|
+
const property = astUtils.getStaticValue(node.callee.property, initialScope);
|
|
90
|
+
if (property?.value === 1) return isIdFromUseStateCall(node.callee.object);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
93
|
default: {
|
|
94
94
|
return false;
|
|
95
95
|
}
|
|
@@ -209,6 +209,17 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
209
209
|
if (node.parent.type === types.AST_NODE_TYPES.CallExpression && node.parent.callee === node) return;
|
|
210
210
|
if (!isIdFromUseStateCall(node)) return;
|
|
211
211
|
switch (node.parent.type) {
|
|
212
|
+
case types.AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
213
|
+
const parent = node.parent.parent;
|
|
214
|
+
if (parent.type !== types.AST_NODE_TYPES.CallExpression) break;
|
|
215
|
+
if (!isUseMemoCall2(parent)) break;
|
|
216
|
+
const maybeVd = AST2__namespace.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
217
|
+
if (tools.O.isNone(maybeVd)) break;
|
|
218
|
+
const vd = maybeVd.value;
|
|
219
|
+
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
220
|
+
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
212
223
|
case types.AST_NODE_TYPES.CallExpression: {
|
|
213
224
|
const [firstArg] = node.parent.arguments;
|
|
214
225
|
if (node !== firstArg) break;
|
|
@@ -225,25 +236,15 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
225
236
|
}
|
|
226
237
|
break;
|
|
227
238
|
}
|
|
228
|
-
case types.AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
229
|
-
const parent = node.parent.parent;
|
|
230
|
-
if (parent.type !== types.AST_NODE_TYPES.CallExpression) break;
|
|
231
|
-
if (!isUseMemoCall2(parent)) break;
|
|
232
|
-
const maybeVd = AST2__namespace.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
233
|
-
if (tools.O.isNone(maybeVd)) break;
|
|
234
|
-
const vd = maybeVd.value;
|
|
235
|
-
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
236
|
-
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
237
|
-
}
|
|
238
239
|
}
|
|
239
240
|
},
|
|
240
241
|
"Program:exit"() {
|
|
241
242
|
const getSetStateCalls = (id, initialScope) => {
|
|
242
243
|
const node = tools.O.flatMap(VAR4__namespace.findVariable(id, initialScope), VAR4__namespace.getVariableNode(0)).pipe(tools.O.getOrNull);
|
|
243
244
|
switch (node?.type) {
|
|
245
|
+
case types.AST_NODE_TYPES.ArrowFunctionExpression:
|
|
244
246
|
case types.AST_NODE_TYPES.FunctionDeclaration:
|
|
245
247
|
case types.AST_NODE_TYPES.FunctionExpression:
|
|
246
|
-
case types.AST_NODE_TYPES.ArrowFunctionExpression:
|
|
247
248
|
return indirectSetStateCalls.get(node) ?? [];
|
|
248
249
|
case types.AST_NODE_TYPES.CallExpression:
|
|
249
250
|
return indirectSetStateCallsInHooks.get(node) ?? indirectSetStateCallsAsArgs.get(node) ?? [];
|
|
@@ -389,6 +390,17 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
389
390
|
if (node.parent.type === types.AST_NODE_TYPES.CallExpression && node.parent.callee === node) return;
|
|
390
391
|
if (!isIdFromUseStateCall(node)) return;
|
|
391
392
|
switch (node.parent.type) {
|
|
393
|
+
case types.AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
394
|
+
const parent = node.parent.parent;
|
|
395
|
+
if (parent.type !== types.AST_NODE_TYPES.CallExpression) break;
|
|
396
|
+
if (!isUseMemoCall2(parent)) break;
|
|
397
|
+
const maybeVd = AST2__namespace.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
398
|
+
if (tools.O.isNone(maybeVd)) break;
|
|
399
|
+
const vd = maybeVd.value;
|
|
400
|
+
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
401
|
+
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
402
|
+
break;
|
|
403
|
+
}
|
|
392
404
|
case types.AST_NODE_TYPES.CallExpression: {
|
|
393
405
|
const [firstArg] = node.parent.arguments;
|
|
394
406
|
if (node !== firstArg) break;
|
|
@@ -405,25 +417,15 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
405
417
|
}
|
|
406
418
|
break;
|
|
407
419
|
}
|
|
408
|
-
case types.AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
409
|
-
const parent = node.parent.parent;
|
|
410
|
-
if (parent.type !== types.AST_NODE_TYPES.CallExpression) break;
|
|
411
|
-
if (!isUseMemoCall2(parent)) break;
|
|
412
|
-
const maybeVd = AST2__namespace.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
413
|
-
if (tools.O.isNone(maybeVd)) break;
|
|
414
|
-
const vd = maybeVd.value;
|
|
415
|
-
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
416
|
-
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
417
|
-
}
|
|
418
420
|
}
|
|
419
421
|
},
|
|
420
422
|
"Program:exit"() {
|
|
421
423
|
const getSetStateCalls = (id, initialScope) => {
|
|
422
424
|
const node = tools.O.flatMap(VAR4__namespace.findVariable(id, initialScope), VAR4__namespace.getVariableNode(0)).pipe(tools.O.getOrNull);
|
|
423
425
|
switch (node?.type) {
|
|
426
|
+
case types.AST_NODE_TYPES.ArrowFunctionExpression:
|
|
424
427
|
case types.AST_NODE_TYPES.FunctionDeclaration:
|
|
425
428
|
case types.AST_NODE_TYPES.FunctionExpression:
|
|
426
|
-
case types.AST_NODE_TYPES.ArrowFunctionExpression:
|
|
427
429
|
return indirectSetStateCalls.get(node) ?? [];
|
|
428
430
|
case types.AST_NODE_TYPES.CallExpression:
|
|
429
431
|
return indirectSetStateCallsInHooks.get(node) ?? indirectSetStateCallsAsArgs.get(node) ?? [];
|
package/dist/index.mjs
CHANGED
|
@@ -9,7 +9,7 @@ import { getStaticValue } from '@typescript-eslint/utils/ast-utils';
|
|
|
9
9
|
|
|
10
10
|
// package.json
|
|
11
11
|
var name = "eslint-plugin-react-hooks-extra";
|
|
12
|
-
var version = "1.15.
|
|
12
|
+
var version = "1.15.1-beta.2";
|
|
13
13
|
var createRule = createRuleForPlugin("hooks-extra");
|
|
14
14
|
function isFromHookCall(name2, context, settings, predicate = F.constTrue) {
|
|
15
15
|
const hookAlias = settings.additionalHooks?.[name2] ?? [];
|
|
@@ -33,20 +33,6 @@ function isSetFunctionCall(context, settings) {
|
|
|
33
33
|
const isIdFromUseStateCall = isFromUseStateCall(context, settings);
|
|
34
34
|
return (node) => {
|
|
35
35
|
switch (node.callee.type) {
|
|
36
|
-
// const [data, setData] = useState();
|
|
37
|
-
// setData();
|
|
38
|
-
case AST_NODE_TYPES.Identifier: {
|
|
39
|
-
return isIdFromUseStateCall(node.callee);
|
|
40
|
-
}
|
|
41
|
-
// const data = useState();
|
|
42
|
-
// data[1]();
|
|
43
|
-
case AST_NODE_TYPES.MemberExpression: {
|
|
44
|
-
if (!("name" in node.callee.object)) return false;
|
|
45
|
-
const initialScope = context.sourceCode.getScope(node);
|
|
46
|
-
const property = getStaticValue(node.callee.property, initialScope);
|
|
47
|
-
if (property?.value === 1) return isIdFromUseStateCall(node.callee.object);
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
36
|
// const data = useState();
|
|
51
37
|
// data.at(1)();
|
|
52
38
|
case AST_NODE_TYPES.CallExpression: {
|
|
@@ -67,6 +53,20 @@ function isSetFunctionCall(context, settings) {
|
|
|
67
53
|
if (value?.value === 1) return isIdFromUseStateCall(callee.object);
|
|
68
54
|
return false;
|
|
69
55
|
}
|
|
56
|
+
// const [data, setData] = useState();
|
|
57
|
+
// setData();
|
|
58
|
+
case AST_NODE_TYPES.Identifier: {
|
|
59
|
+
return isIdFromUseStateCall(node.callee);
|
|
60
|
+
}
|
|
61
|
+
// const data = useState();
|
|
62
|
+
// data[1]();
|
|
63
|
+
case AST_NODE_TYPES.MemberExpression: {
|
|
64
|
+
if (!("name" in node.callee.object)) return false;
|
|
65
|
+
const initialScope = context.sourceCode.getScope(node);
|
|
66
|
+
const property = getStaticValue(node.callee.property, initialScope);
|
|
67
|
+
if (property?.value === 1) return isIdFromUseStateCall(node.callee.object);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
70
|
default: {
|
|
71
71
|
return false;
|
|
72
72
|
}
|
|
@@ -186,6 +186,17 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
186
186
|
if (node.parent.type === AST_NODE_TYPES.CallExpression && node.parent.callee === node) return;
|
|
187
187
|
if (!isIdFromUseStateCall(node)) return;
|
|
188
188
|
switch (node.parent.type) {
|
|
189
|
+
case AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
190
|
+
const parent = node.parent.parent;
|
|
191
|
+
if (parent.type !== AST_NODE_TYPES.CallExpression) break;
|
|
192
|
+
if (!isUseMemoCall2(parent)) break;
|
|
193
|
+
const maybeVd = AST2.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
194
|
+
if (O.isNone(maybeVd)) break;
|
|
195
|
+
const vd = maybeVd.value;
|
|
196
|
+
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
197
|
+
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
189
200
|
case AST_NODE_TYPES.CallExpression: {
|
|
190
201
|
const [firstArg] = node.parent.arguments;
|
|
191
202
|
if (node !== firstArg) break;
|
|
@@ -202,25 +213,15 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
202
213
|
}
|
|
203
214
|
break;
|
|
204
215
|
}
|
|
205
|
-
case AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
206
|
-
const parent = node.parent.parent;
|
|
207
|
-
if (parent.type !== AST_NODE_TYPES.CallExpression) break;
|
|
208
|
-
if (!isUseMemoCall2(parent)) break;
|
|
209
|
-
const maybeVd = AST2.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
210
|
-
if (O.isNone(maybeVd)) break;
|
|
211
|
-
const vd = maybeVd.value;
|
|
212
|
-
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
213
|
-
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
214
|
-
}
|
|
215
216
|
}
|
|
216
217
|
},
|
|
217
218
|
"Program:exit"() {
|
|
218
219
|
const getSetStateCalls = (id, initialScope) => {
|
|
219
220
|
const node = O.flatMap(VAR4.findVariable(id, initialScope), VAR4.getVariableNode(0)).pipe(O.getOrNull);
|
|
220
221
|
switch (node?.type) {
|
|
222
|
+
case AST_NODE_TYPES.ArrowFunctionExpression:
|
|
221
223
|
case AST_NODE_TYPES.FunctionDeclaration:
|
|
222
224
|
case AST_NODE_TYPES.FunctionExpression:
|
|
223
|
-
case AST_NODE_TYPES.ArrowFunctionExpression:
|
|
224
225
|
return indirectSetStateCalls.get(node) ?? [];
|
|
225
226
|
case AST_NODE_TYPES.CallExpression:
|
|
226
227
|
return indirectSetStateCallsInHooks.get(node) ?? indirectSetStateCallsAsArgs.get(node) ?? [];
|
|
@@ -366,6 +367,17 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
366
367
|
if (node.parent.type === AST_NODE_TYPES.CallExpression && node.parent.callee === node) return;
|
|
367
368
|
if (!isIdFromUseStateCall(node)) return;
|
|
368
369
|
switch (node.parent.type) {
|
|
370
|
+
case AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
371
|
+
const parent = node.parent.parent;
|
|
372
|
+
if (parent.type !== AST_NODE_TYPES.CallExpression) break;
|
|
373
|
+
if (!isUseMemoCall2(parent)) break;
|
|
374
|
+
const maybeVd = AST2.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
375
|
+
if (O.isNone(maybeVd)) break;
|
|
376
|
+
const vd = maybeVd.value;
|
|
377
|
+
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
378
|
+
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
379
|
+
break;
|
|
380
|
+
}
|
|
369
381
|
case AST_NODE_TYPES.CallExpression: {
|
|
370
382
|
const [firstArg] = node.parent.arguments;
|
|
371
383
|
if (node !== firstArg) break;
|
|
@@ -382,25 +394,15 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
382
394
|
}
|
|
383
395
|
break;
|
|
384
396
|
}
|
|
385
|
-
case AST_NODE_TYPES.ArrowFunctionExpression: {
|
|
386
|
-
const parent = node.parent.parent;
|
|
387
|
-
if (parent.type !== AST_NODE_TYPES.CallExpression) break;
|
|
388
|
-
if (!isUseMemoCall2(parent)) break;
|
|
389
|
-
const maybeVd = AST2.traverseUpGuard(parent, isVariableDeclaratorFromHookCall);
|
|
390
|
-
if (O.isNone(maybeVd)) break;
|
|
391
|
-
const vd = maybeVd.value;
|
|
392
|
-
const calls = indirectSetStateCallsAsArgs.get(vd.init) ?? [];
|
|
393
|
-
indirectSetStateCallsAsArgs.set(vd.init, [...calls, node]);
|
|
394
|
-
}
|
|
395
397
|
}
|
|
396
398
|
},
|
|
397
399
|
"Program:exit"() {
|
|
398
400
|
const getSetStateCalls = (id, initialScope) => {
|
|
399
401
|
const node = O.flatMap(VAR4.findVariable(id, initialScope), VAR4.getVariableNode(0)).pipe(O.getOrNull);
|
|
400
402
|
switch (node?.type) {
|
|
403
|
+
case AST_NODE_TYPES.ArrowFunctionExpression:
|
|
401
404
|
case AST_NODE_TYPES.FunctionDeclaration:
|
|
402
405
|
case AST_NODE_TYPES.FunctionExpression:
|
|
403
|
-
case AST_NODE_TYPES.ArrowFunctionExpression:
|
|
404
406
|
return indirectSetStateCalls.get(node) ?? [];
|
|
405
407
|
case AST_NODE_TYPES.CallExpression:
|
|
406
408
|
return indirectSetStateCallsInHooks.get(node) ?? indirectSetStateCallsAsArgs.get(node) ?? [];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-hooks-extra",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.1-beta.2",
|
|
4
4
|
"description": "ESLint React's ESLint plugin for React Hooks related rules.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -41,18 +41,18 @@
|
|
|
41
41
|
"./package.json"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@typescript-eslint/scope-manager": "^8.
|
|
45
|
-
"@typescript-eslint/type-utils": "^8.
|
|
46
|
-
"@typescript-eslint/types": "^8.
|
|
47
|
-
"@typescript-eslint/utils": "^8.
|
|
48
|
-
"ts-pattern": "^5.
|
|
49
|
-
"@eslint-react/ast": "1.15.
|
|
50
|
-
"@eslint-react/
|
|
51
|
-
"@eslint-react/
|
|
52
|
-
"@eslint-react/
|
|
53
|
-
"@eslint-react/
|
|
54
|
-
"@eslint-react/
|
|
55
|
-
"@eslint-react/
|
|
44
|
+
"@typescript-eslint/scope-manager": "^8.10.0",
|
|
45
|
+
"@typescript-eslint/type-utils": "^8.10.0",
|
|
46
|
+
"@typescript-eslint/types": "^8.10.0",
|
|
47
|
+
"@typescript-eslint/utils": "^8.10.0",
|
|
48
|
+
"ts-pattern": "^5.5.0",
|
|
49
|
+
"@eslint-react/ast": "1.15.1-beta.2",
|
|
50
|
+
"@eslint-react/tools": "1.15.1-beta.2",
|
|
51
|
+
"@eslint-react/types": "1.15.1-beta.2",
|
|
52
|
+
"@eslint-react/var": "1.15.1-beta.2",
|
|
53
|
+
"@eslint-react/shared": "1.15.1-beta.2",
|
|
54
|
+
"@eslint-react/core": "1.15.1-beta.2",
|
|
55
|
+
"@eslint-react/jsx": "1.15.1-beta.2"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/react": "^18.3.11",
|