eslint-plugin-react-hooks-extra 1.10.2-next.2 → 1.11.0-beta.7
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 +27 -15
- package/dist/index.mjs +28 -16
- package/package.json +12 -12
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ var tsPattern = require('ts-pattern');
|
|
|
11
11
|
|
|
12
12
|
// package.json
|
|
13
13
|
var name = "eslint-plugin-react-hooks-extra";
|
|
14
|
-
var version = "1.
|
|
14
|
+
var version = "1.11.0-beta.7";
|
|
15
15
|
var createRule = shared.createRuleForPlugin("hooks-extra");
|
|
16
16
|
function isFromHookCall(name2, context, settings, predicate = tools.F.constTrue) {
|
|
17
17
|
const hookAlias = settings.additionalHooks?.[name2] ?? [];
|
|
@@ -294,7 +294,7 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
294
294
|
description: "disallow direct calls to the 'set' function of 'useState' in 'useEffect'"
|
|
295
295
|
},
|
|
296
296
|
messages: {
|
|
297
|
-
noDirectSetStateInUseEffect: "Do not call the 'set' function of 'useState' directly in 'useEffect'."
|
|
297
|
+
noDirectSetStateInUseEffect: "Do not call the 'set' function '{{name}}' of 'useState' directly in 'useEffect'."
|
|
298
298
|
},
|
|
299
299
|
schema: []
|
|
300
300
|
},
|
|
@@ -314,8 +314,8 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
314
314
|
const setupFunctionIdentifiers = [];
|
|
315
315
|
const indirectFunctionCalls = [];
|
|
316
316
|
const indirectSetStateCalls = /* @__PURE__ */ new WeakMap();
|
|
317
|
-
const indirectSetStateCallsAsEFs = /* @__PURE__ */ new Map();
|
|
318
317
|
const indirectSetStateCallsAsArgs = /* @__PURE__ */ new WeakMap();
|
|
318
|
+
const indirectSetStateCallsAsSetups = /* @__PURE__ */ new Map();
|
|
319
319
|
const indirectSetStateCallsInHooks = /* @__PURE__ */ new WeakMap();
|
|
320
320
|
const onSetupFunctionEnter = (node) => {
|
|
321
321
|
tools.MutRef.set(setupFunctionRef, node);
|
|
@@ -363,7 +363,8 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
363
363
|
}
|
|
364
364
|
context.report({
|
|
365
365
|
messageId: "noDirectSetStateInUseEffect",
|
|
366
|
-
node
|
|
366
|
+
node,
|
|
367
|
+
data: { name: context.sourceCode.getText(node.callee) }
|
|
367
368
|
});
|
|
368
369
|
}).with("useEffect", () => {
|
|
369
370
|
const [firstArg] = node.arguments;
|
|
@@ -392,7 +393,7 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
392
393
|
}
|
|
393
394
|
if (isUseEffectCall(node.parent)) {
|
|
394
395
|
const calls = indirectSetStateCallsAsArgs.get(node.parent) ?? [];
|
|
395
|
-
|
|
396
|
+
indirectSetStateCallsAsSetups.set(node.parent, [...calls, node]);
|
|
396
397
|
}
|
|
397
398
|
break;
|
|
398
399
|
}
|
|
@@ -421,7 +422,7 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
421
422
|
}
|
|
422
423
|
return [];
|
|
423
424
|
};
|
|
424
|
-
for (const [_, calls] of
|
|
425
|
+
for (const [_, calls] of indirectSetStateCallsAsSetups) {
|
|
425
426
|
for (const call of calls) {
|
|
426
427
|
context.report({
|
|
427
428
|
messageId: "noDirectSetStateInUseEffect",
|
|
@@ -438,7 +439,9 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
438
439
|
context.report({
|
|
439
440
|
messageId: "noDirectSetStateInUseEffect",
|
|
440
441
|
node: setStateCall,
|
|
441
|
-
data: {
|
|
442
|
+
data: {
|
|
443
|
+
name: ast.toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
444
|
+
}
|
|
442
445
|
});
|
|
443
446
|
}
|
|
444
447
|
}
|
|
@@ -448,7 +451,9 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
448
451
|
context.report({
|
|
449
452
|
messageId: "noDirectSetStateInUseEffect",
|
|
450
453
|
node: setStateCall,
|
|
451
|
-
data: {
|
|
454
|
+
data: {
|
|
455
|
+
name: ast.toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
456
|
+
}
|
|
452
457
|
});
|
|
453
458
|
}
|
|
454
459
|
}
|
|
@@ -465,7 +470,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
465
470
|
description: "disallow direct calls to the 'set' function of 'useState' in 'useLayoutEffect'"
|
|
466
471
|
},
|
|
467
472
|
messages: {
|
|
468
|
-
noDirectSetStateInUseLayoutEffect: "Do not call the 'set' function of 'useState' directly in 'useLayoutEffect'."
|
|
473
|
+
noDirectSetStateInUseLayoutEffect: "Do not call the 'set' function '{{name}}' of 'useState' directly in 'useLayoutEffect'."
|
|
469
474
|
},
|
|
470
475
|
schema: []
|
|
471
476
|
},
|
|
@@ -489,7 +494,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
489
494
|
const setupFunctionIdentifiers = [];
|
|
490
495
|
const indirectFunctionCalls = [];
|
|
491
496
|
const indirectSetStateCalls = /* @__PURE__ */ new WeakMap();
|
|
492
|
-
const
|
|
497
|
+
const indirectSetStateCallsAsSetups = /* @__PURE__ */ new Map();
|
|
493
498
|
const indirectSetStateCallsAsArgs = /* @__PURE__ */ new WeakMap();
|
|
494
499
|
const indirectSetStateCallsInHooks = /* @__PURE__ */ new WeakMap();
|
|
495
500
|
const onSetupFunctionEnter = (node) => {
|
|
@@ -538,7 +543,10 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
538
543
|
}
|
|
539
544
|
context.report({
|
|
540
545
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
541
|
-
node
|
|
546
|
+
node,
|
|
547
|
+
data: {
|
|
548
|
+
name: context.sourceCode.getText(node.callee)
|
|
549
|
+
}
|
|
542
550
|
});
|
|
543
551
|
}).with("useLayoutEffect", () => {
|
|
544
552
|
const [firstArg] = node.arguments;
|
|
@@ -567,7 +575,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
567
575
|
}
|
|
568
576
|
if (isUseEffectCall(node.parent)) {
|
|
569
577
|
const calls = indirectSetStateCallsAsArgs.get(node.parent) ?? [];
|
|
570
|
-
|
|
578
|
+
indirectSetStateCallsAsSetups.set(node.parent, [...calls, node]);
|
|
571
579
|
}
|
|
572
580
|
break;
|
|
573
581
|
}
|
|
@@ -596,7 +604,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
596
604
|
}
|
|
597
605
|
return [];
|
|
598
606
|
};
|
|
599
|
-
for (const [_, calls] of
|
|
607
|
+
for (const [_, calls] of indirectSetStateCallsAsSetups) {
|
|
600
608
|
for (const call of calls) {
|
|
601
609
|
context.report({
|
|
602
610
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
@@ -613,7 +621,9 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
613
621
|
context.report({
|
|
614
622
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
615
623
|
node: setStateCall,
|
|
616
|
-
data: {
|
|
624
|
+
data: {
|
|
625
|
+
name: ast.toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
626
|
+
}
|
|
617
627
|
});
|
|
618
628
|
}
|
|
619
629
|
}
|
|
@@ -623,7 +633,9 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
623
633
|
context.report({
|
|
624
634
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
625
635
|
node: setStateCall,
|
|
626
|
-
data: {
|
|
636
|
+
data: {
|
|
637
|
+
name: ast.toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
638
|
+
}
|
|
627
639
|
});
|
|
628
640
|
}
|
|
629
641
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useHookCollector, isReactHookCall, isUseCallbackCall, isReactHookCallWithNameLoose, isUseMemoCall, isReactHookCallWithNameAlias, isUseStateCall, isReactHookName } from '@eslint-react/core';
|
|
2
2
|
import { createRuleForPlugin, decodeSettings } from '@eslint-react/shared';
|
|
3
|
-
import { isFunction, is, traverseUpGuard, getNestedIdentifiers, getNestedCallExpressions, isFunctionOfImmediatelyInvoked } from '@eslint-react/ast';
|
|
3
|
+
import { isFunction, is, traverseUpGuard, getNestedIdentifiers, toReadableNodeName, getNestedCallExpressions, isFunctionOfImmediatelyInvoked } from '@eslint-react/ast';
|
|
4
4
|
import { F, O, MutRef } from '@eslint-react/tools';
|
|
5
5
|
import { findVariable, getVariableNode } from '@eslint-react/var';
|
|
6
6
|
import { AST_NODE_TYPES } from '@typescript-eslint/types';
|
|
@@ -9,7 +9,7 @@ import { match, isMatching } from 'ts-pattern';
|
|
|
9
9
|
|
|
10
10
|
// package.json
|
|
11
11
|
var name = "eslint-plugin-react-hooks-extra";
|
|
12
|
-
var version = "1.
|
|
12
|
+
var version = "1.11.0-beta.7";
|
|
13
13
|
var createRule = createRuleForPlugin("hooks-extra");
|
|
14
14
|
function isFromHookCall(name2, context, settings, predicate = F.constTrue) {
|
|
15
15
|
const hookAlias = settings.additionalHooks?.[name2] ?? [];
|
|
@@ -292,7 +292,7 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
292
292
|
description: "disallow direct calls to the 'set' function of 'useState' in 'useEffect'"
|
|
293
293
|
},
|
|
294
294
|
messages: {
|
|
295
|
-
noDirectSetStateInUseEffect: "Do not call the 'set' function of 'useState' directly in 'useEffect'."
|
|
295
|
+
noDirectSetStateInUseEffect: "Do not call the 'set' function '{{name}}' of 'useState' directly in 'useEffect'."
|
|
296
296
|
},
|
|
297
297
|
schema: []
|
|
298
298
|
},
|
|
@@ -312,8 +312,8 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
312
312
|
const setupFunctionIdentifiers = [];
|
|
313
313
|
const indirectFunctionCalls = [];
|
|
314
314
|
const indirectSetStateCalls = /* @__PURE__ */ new WeakMap();
|
|
315
|
-
const indirectSetStateCallsAsEFs = /* @__PURE__ */ new Map();
|
|
316
315
|
const indirectSetStateCallsAsArgs = /* @__PURE__ */ new WeakMap();
|
|
316
|
+
const indirectSetStateCallsAsSetups = /* @__PURE__ */ new Map();
|
|
317
317
|
const indirectSetStateCallsInHooks = /* @__PURE__ */ new WeakMap();
|
|
318
318
|
const onSetupFunctionEnter = (node) => {
|
|
319
319
|
MutRef.set(setupFunctionRef, node);
|
|
@@ -361,7 +361,8 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
361
361
|
}
|
|
362
362
|
context.report({
|
|
363
363
|
messageId: "noDirectSetStateInUseEffect",
|
|
364
|
-
node
|
|
364
|
+
node,
|
|
365
|
+
data: { name: context.sourceCode.getText(node.callee) }
|
|
365
366
|
});
|
|
366
367
|
}).with("useEffect", () => {
|
|
367
368
|
const [firstArg] = node.arguments;
|
|
@@ -390,7 +391,7 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
390
391
|
}
|
|
391
392
|
if (isUseEffectCall(node.parent)) {
|
|
392
393
|
const calls = indirectSetStateCallsAsArgs.get(node.parent) ?? [];
|
|
393
|
-
|
|
394
|
+
indirectSetStateCallsAsSetups.set(node.parent, [...calls, node]);
|
|
394
395
|
}
|
|
395
396
|
break;
|
|
396
397
|
}
|
|
@@ -419,7 +420,7 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
419
420
|
}
|
|
420
421
|
return [];
|
|
421
422
|
};
|
|
422
|
-
for (const [_, calls] of
|
|
423
|
+
for (const [_, calls] of indirectSetStateCallsAsSetups) {
|
|
423
424
|
for (const call of calls) {
|
|
424
425
|
context.report({
|
|
425
426
|
messageId: "noDirectSetStateInUseEffect",
|
|
@@ -436,7 +437,9 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
436
437
|
context.report({
|
|
437
438
|
messageId: "noDirectSetStateInUseEffect",
|
|
438
439
|
node: setStateCall,
|
|
439
|
-
data: {
|
|
440
|
+
data: {
|
|
441
|
+
name: toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
442
|
+
}
|
|
440
443
|
});
|
|
441
444
|
}
|
|
442
445
|
}
|
|
@@ -446,7 +449,9 @@ var no_direct_set_state_in_use_effect_default = createRule({
|
|
|
446
449
|
context.report({
|
|
447
450
|
messageId: "noDirectSetStateInUseEffect",
|
|
448
451
|
node: setStateCall,
|
|
449
|
-
data: {
|
|
452
|
+
data: {
|
|
453
|
+
name: toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
454
|
+
}
|
|
450
455
|
});
|
|
451
456
|
}
|
|
452
457
|
}
|
|
@@ -463,7 +468,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
463
468
|
description: "disallow direct calls to the 'set' function of 'useState' in 'useLayoutEffect'"
|
|
464
469
|
},
|
|
465
470
|
messages: {
|
|
466
|
-
noDirectSetStateInUseLayoutEffect: "Do not call the 'set' function of 'useState' directly in 'useLayoutEffect'."
|
|
471
|
+
noDirectSetStateInUseLayoutEffect: "Do not call the 'set' function '{{name}}' of 'useState' directly in 'useLayoutEffect'."
|
|
467
472
|
},
|
|
468
473
|
schema: []
|
|
469
474
|
},
|
|
@@ -487,7 +492,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
487
492
|
const setupFunctionIdentifiers = [];
|
|
488
493
|
const indirectFunctionCalls = [];
|
|
489
494
|
const indirectSetStateCalls = /* @__PURE__ */ new WeakMap();
|
|
490
|
-
const
|
|
495
|
+
const indirectSetStateCallsAsSetups = /* @__PURE__ */ new Map();
|
|
491
496
|
const indirectSetStateCallsAsArgs = /* @__PURE__ */ new WeakMap();
|
|
492
497
|
const indirectSetStateCallsInHooks = /* @__PURE__ */ new WeakMap();
|
|
493
498
|
const onSetupFunctionEnter = (node) => {
|
|
@@ -536,7 +541,10 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
536
541
|
}
|
|
537
542
|
context.report({
|
|
538
543
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
539
|
-
node
|
|
544
|
+
node,
|
|
545
|
+
data: {
|
|
546
|
+
name: context.sourceCode.getText(node.callee)
|
|
547
|
+
}
|
|
540
548
|
});
|
|
541
549
|
}).with("useLayoutEffect", () => {
|
|
542
550
|
const [firstArg] = node.arguments;
|
|
@@ -565,7 +573,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
565
573
|
}
|
|
566
574
|
if (isUseEffectCall(node.parent)) {
|
|
567
575
|
const calls = indirectSetStateCallsAsArgs.get(node.parent) ?? [];
|
|
568
|
-
|
|
576
|
+
indirectSetStateCallsAsSetups.set(node.parent, [...calls, node]);
|
|
569
577
|
}
|
|
570
578
|
break;
|
|
571
579
|
}
|
|
@@ -594,7 +602,7 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
594
602
|
}
|
|
595
603
|
return [];
|
|
596
604
|
};
|
|
597
|
-
for (const [_, calls] of
|
|
605
|
+
for (const [_, calls] of indirectSetStateCallsAsSetups) {
|
|
598
606
|
for (const call of calls) {
|
|
599
607
|
context.report({
|
|
600
608
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
@@ -611,7 +619,9 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
611
619
|
context.report({
|
|
612
620
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
613
621
|
node: setStateCall,
|
|
614
|
-
data: {
|
|
622
|
+
data: {
|
|
623
|
+
name: toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
624
|
+
}
|
|
615
625
|
});
|
|
616
626
|
}
|
|
617
627
|
}
|
|
@@ -621,7 +631,9 @@ var no_direct_set_state_in_use_layout_effect_default = createRule({
|
|
|
621
631
|
context.report({
|
|
622
632
|
messageId: "noDirectSetStateInUseLayoutEffect",
|
|
623
633
|
node: setStateCall,
|
|
624
|
-
data: {
|
|
634
|
+
data: {
|
|
635
|
+
name: toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
|
|
636
|
+
}
|
|
625
637
|
});
|
|
626
638
|
}
|
|
627
639
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eslint-plugin-react-hooks-extra",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0-beta.7",
|
|
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.
|
|
44
|
+
"@typescript-eslint/scope-manager": "^8.2.0",
|
|
45
|
+
"@typescript-eslint/type-utils": "^8.2.0",
|
|
46
|
+
"@typescript-eslint/types": "^8.2.0",
|
|
47
|
+
"@typescript-eslint/utils": "^8.2.0",
|
|
48
48
|
"ts-pattern": "^5.3.1",
|
|
49
|
-
"@eslint-react/ast": "1.
|
|
50
|
-
"@eslint-react/core": "1.
|
|
51
|
-
"@eslint-react/jsx": "1.
|
|
52
|
-
"@eslint-react/shared": "1.
|
|
53
|
-
"@eslint-react/tools": "1.
|
|
54
|
-
"@eslint-react/types": "1.
|
|
55
|
-
"@eslint-react/var": "1.
|
|
49
|
+
"@eslint-react/ast": "1.11.0-beta.7",
|
|
50
|
+
"@eslint-react/core": "1.11.0-beta.7",
|
|
51
|
+
"@eslint-react/jsx": "1.11.0-beta.7",
|
|
52
|
+
"@eslint-react/shared": "1.11.0-beta.7",
|
|
53
|
+
"@eslint-react/tools": "1.11.0-beta.7",
|
|
54
|
+
"@eslint-react/types": "1.11.0-beta.7",
|
|
55
|
+
"@eslint-react/var": "1.11.0-beta.7"
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@types/react": "^18.3.3",
|