eslint-plugin-react-hooks-extra 1.15.0 → 1.15.1-next.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.
Files changed (3) hide show
  1. package/dist/index.js +39 -37
  2. package/dist/index.mjs +39 -37
  3. 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.0";
35
+ var version = "1.15.1-next.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.0";
12
+ var version = "1.15.1-next.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.0",
3
+ "version": "1.15.1-next.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.8.1",
45
- "@typescript-eslint/type-utils": "^8.8.1",
46
- "@typescript-eslint/types": "^8.8.1",
47
- "@typescript-eslint/utils": "^8.8.1",
48
- "ts-pattern": "^5.4.0",
49
- "@eslint-react/ast": "1.15.0",
50
- "@eslint-react/jsx": "1.15.0",
51
- "@eslint-react/tools": "1.15.0",
52
- "@eslint-react/shared": "1.15.0",
53
- "@eslint-react/types": "1.15.0",
54
- "@eslint-react/var": "1.15.0",
55
- "@eslint-react/core": "1.15.0"
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-next.2",
50
+ "@eslint-react/core": "1.15.1-next.2",
51
+ "@eslint-react/jsx": "1.15.1-next.2",
52
+ "@eslint-react/shared": "1.15.1-next.2",
53
+ "@eslint-react/tools": "1.15.1-next.2",
54
+ "@eslint-react/var": "1.15.1-next.2",
55
+ "@eslint-react/types": "1.15.1-next.2"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@types/react": "^18.3.11",