eslint-plugin-react-hooks-extra 1.10.2-next.2 → 1.11.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.js +29 -17
  2. package/dist/index.mjs +30 -18
  3. 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.10.2-next.2";
14
+ var version = "1.11.0-beta.10";
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,13 +294,13 @@ 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
  },
301
301
  name: RULE_NAME4,
302
302
  create(context) {
303
- if (!context.sourceCode.text.includes("use")) return {};
303
+ if (!/use\w*Effect/u.test(context.sourceCode.text)) return {};
304
304
  const settings = shared.decodeSettings(context.settings);
305
305
  const additionalHooks = settings.additionalHooks ?? {};
306
306
  const isUseEffectCall = core.isReactHookCallWithNameAlias("useEffect", context, additionalHooks.useEffect ?? []);
@@ -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
- indirectSetStateCallsAsEFs.set(node.parent, [...calls, node]);
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 indirectSetStateCallsAsEFs) {
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: { name: name2 }
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: { name: id.name }
454
+ data: {
455
+ name: ast.toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
456
+ }
452
457
  });
453
458
  }
454
459
  }
@@ -465,13 +470,13 @@ 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
  },
472
477
  name: RULE_NAME5,
473
478
  create(context) {
474
- if (!context.sourceCode.text.includes("use")) return {};
479
+ if (!/use\w*Effect/u.test(context.sourceCode.text)) return {};
475
480
  const settings = shared.decodeSettings(context.settings);
476
481
  const additionalHooks = settings.additionalHooks ?? {};
477
482
  const isUseEffectCall = core.isReactHookCallWithNameAlias(
@@ -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 indirectSetStateCallsAsEFs = /* @__PURE__ */ new Map();
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
- indirectSetStateCallsAsEFs.set(node.parent, [...calls, node]);
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 indirectSetStateCallsAsEFs) {
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: { name: name2 }
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: { name: id.name }
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.10.2-next.2";
12
+ var version = "1.11.0-beta.10";
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,13 +292,13 @@ 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
  },
299
299
  name: RULE_NAME4,
300
300
  create(context) {
301
- if (!context.sourceCode.text.includes("use")) return {};
301
+ if (!/use\w*Effect/u.test(context.sourceCode.text)) return {};
302
302
  const settings = decodeSettings(context.settings);
303
303
  const additionalHooks = settings.additionalHooks ?? {};
304
304
  const isUseEffectCall = isReactHookCallWithNameAlias("useEffect", context, additionalHooks.useEffect ?? []);
@@ -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
- indirectSetStateCallsAsEFs.set(node.parent, [...calls, node]);
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 indirectSetStateCallsAsEFs) {
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: { name: name2 }
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: { name: id.name }
452
+ data: {
453
+ name: toReadableNodeName(setStateCall, (n) => context.sourceCode.getText(n))
454
+ }
450
455
  });
451
456
  }
452
457
  }
@@ -463,13 +468,13 @@ 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
  },
470
475
  name: RULE_NAME5,
471
476
  create(context) {
472
- if (!context.sourceCode.text.includes("use")) return {};
477
+ if (!/use\w*Effect/u.test(context.sourceCode.text)) return {};
473
478
  const settings = decodeSettings(context.settings);
474
479
  const additionalHooks = settings.additionalHooks ?? {};
475
480
  const isUseEffectCall = isReactHookCallWithNameAlias(
@@ -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 indirectSetStateCallsAsEFs = /* @__PURE__ */ new Map();
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
- indirectSetStateCallsAsEFs.set(node.parent, [...calls, node]);
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 indirectSetStateCallsAsEFs) {
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: { name: name2 }
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: { name: id.name }
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.10.2-next.2",
3
+ "version": "1.11.0-beta.10",
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.1.0",
45
- "@typescript-eslint/type-utils": "^8.1.0",
46
- "@typescript-eslint/types": "^8.1.0",
47
- "@typescript-eslint/utils": "^8.1.0",
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.10.2-next.2",
50
- "@eslint-react/core": "1.10.2-next.2",
51
- "@eslint-react/jsx": "1.10.2-next.2",
52
- "@eslint-react/shared": "1.10.2-next.2",
53
- "@eslint-react/tools": "1.10.2-next.2",
54
- "@eslint-react/types": "1.10.2-next.2",
55
- "@eslint-react/var": "1.10.2-next.2"
49
+ "@eslint-react/ast": "1.11.0-beta.10",
50
+ "@eslint-react/jsx": "1.11.0-beta.10",
51
+ "@eslint-react/core": "1.11.0-beta.10",
52
+ "@eslint-react/types": "1.11.0-beta.10",
53
+ "@eslint-react/shared": "1.11.0-beta.10",
54
+ "@eslint-react/tools": "1.11.0-beta.10",
55
+ "@eslint-react/var": "1.11.0-beta.10"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@types/react": "^18.3.3",