@eslint-react/core 1.24.0-next.1 → 1.24.0-next.12
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.d.mts +145 -136
- package/dist/index.d.ts +145 -136
- package/dist/index.js +112 -122
- package/dist/index.mjs +102 -117
- package/package.json +11 -11
package/dist/index.js
CHANGED
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var AST8 = require('@eslint-react/ast');
|
|
4
4
|
var eff = require('@eslint-react/eff');
|
|
5
|
-
var
|
|
5
|
+
var JSX3 = require('@eslint-react/jsx');
|
|
6
6
|
var types = require('@typescript-eslint/types');
|
|
7
|
-
var VAR = require('@eslint-react/var');
|
|
8
7
|
var shared = require('@eslint-react/shared');
|
|
8
|
+
var VAR = require('@eslint-react/var');
|
|
9
|
+
var birecord = require('birecord');
|
|
10
|
+
|
|
11
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
12
|
|
|
10
13
|
function _interopNamespace(e) {
|
|
11
14
|
if (e && e.__esModule) return e;
|
|
@@ -26,29 +29,11 @@ function _interopNamespace(e) {
|
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
var AST8__namespace = /*#__PURE__*/_interopNamespace(AST8);
|
|
29
|
-
var
|
|
32
|
+
var JSX3__namespace = /*#__PURE__*/_interopNamespace(JSX3);
|
|
30
33
|
var VAR__namespace = /*#__PURE__*/_interopNamespace(VAR);
|
|
34
|
+
var birecord__default = /*#__PURE__*/_interopDefault(birecord);
|
|
31
35
|
|
|
32
36
|
// src/component/component-collector.ts
|
|
33
|
-
function getElementNameAndRepresentName(node, context, polymorphicPropName, additionalComponents = []) {
|
|
34
|
-
const name = JSX4__namespace.getElementName(node);
|
|
35
|
-
if (name === name.toLowerCase()) return [name, name];
|
|
36
|
-
const component = additionalComponents.findLast((c) => c.name === name || c.re.test(name));
|
|
37
|
-
if (component != null) return [name, component.as];
|
|
38
|
-
if (polymorphicPropName == null) return [name, name];
|
|
39
|
-
const initialScope = context.sourceCode.getScope(node);
|
|
40
|
-
const polymorphicProp = JSX4__namespace.findPropInAttributes(
|
|
41
|
-
polymorphicPropName,
|
|
42
|
-
initialScope,
|
|
43
|
-
node.attributes
|
|
44
|
-
);
|
|
45
|
-
if (polymorphicProp == null) return [name, name];
|
|
46
|
-
const polymorphicName = VAR__namespace.toResolved(JSX4__namespace.getPropValue(polymorphicProp, initialScope)).value;
|
|
47
|
-
if (typeof polymorphicName === "string") {
|
|
48
|
-
return [name, polymorphicName];
|
|
49
|
-
}
|
|
50
|
-
return [name, name];
|
|
51
|
-
}
|
|
52
37
|
|
|
53
38
|
// src/utils/get-id.ts
|
|
54
39
|
var id = 0n;
|
|
@@ -164,9 +149,9 @@ var isMemoCall = isReactAPICallWithName("memo");
|
|
|
164
149
|
|
|
165
150
|
// src/element/hierarchy.ts
|
|
166
151
|
function isInsideCreateElementProps(node, context) {
|
|
167
|
-
const call = AST8__namespace.
|
|
152
|
+
const call = AST8__namespace.findParentNode(node, isCreateElementCall(context));
|
|
168
153
|
if (call == null) return false;
|
|
169
|
-
const prop = AST8__namespace.
|
|
154
|
+
const prop = AST8__namespace.findParentNode(node, AST8__namespace.is(types.AST_NODE_TYPES.ObjectExpression));
|
|
170
155
|
if (prop == null) return false;
|
|
171
156
|
return prop === call.arguments[1];
|
|
172
157
|
}
|
|
@@ -276,7 +261,7 @@ var isUseTransitionCall = eff.flip(isReactHookCallWithName)("useTransition");
|
|
|
276
261
|
|
|
277
262
|
// src/hook/hierarchy.ts
|
|
278
263
|
function isInsideReactHook(node) {
|
|
279
|
-
return isReactHook(AST8__namespace.
|
|
264
|
+
return isReactHook(AST8__namespace.findParentNode(node, AST8__namespace.isFunction));
|
|
280
265
|
}
|
|
281
266
|
function useHookCollector() {
|
|
282
267
|
const hooks = /* @__PURE__ */ new Map();
|
|
@@ -288,8 +273,8 @@ function useHookCollector() {
|
|
|
288
273
|
const key = getId();
|
|
289
274
|
fEntries.push({ key, node });
|
|
290
275
|
hooks.set(key, {
|
|
291
|
-
_: key,
|
|
292
276
|
id: id2,
|
|
277
|
+
key,
|
|
293
278
|
kind: "function",
|
|
294
279
|
name,
|
|
295
280
|
node,
|
|
@@ -328,19 +313,13 @@ function useHookCollector() {
|
|
|
328
313
|
if (hook == null) {
|
|
329
314
|
return;
|
|
330
315
|
}
|
|
331
|
-
|
|
332
|
-
...hook,
|
|
333
|
-
hookCalls: [
|
|
334
|
-
...hook.hookCalls,
|
|
335
|
-
node
|
|
336
|
-
]
|
|
337
|
-
});
|
|
316
|
+
hook.hookCalls.push(node);
|
|
338
317
|
}
|
|
339
318
|
};
|
|
340
319
|
return { ctx, listeners };
|
|
341
320
|
}
|
|
342
321
|
var ERComponentHint = {
|
|
343
|
-
...
|
|
322
|
+
...JSX3__namespace.JSXValueHint,
|
|
344
323
|
// 1n << 0n - 1n << 63n are reserved for JSXValueHint
|
|
345
324
|
// Skip function component created by React.memo
|
|
346
325
|
SkipMemo: 1n << 64n,
|
|
@@ -395,14 +374,6 @@ function getFunctionComponentIdentifier(node, context) {
|
|
|
395
374
|
}
|
|
396
375
|
return eff._;
|
|
397
376
|
}
|
|
398
|
-
var RE_COMPONENT_NAME = /^_?[A-Z]/u;
|
|
399
|
-
function getComponentNameFromIdentifier(node) {
|
|
400
|
-
if (node == null) return eff._;
|
|
401
|
-
return Array.isArray(node) ? node.map((n) => n.name).join(".") : node.name;
|
|
402
|
-
}
|
|
403
|
-
function isComponentName(name) {
|
|
404
|
-
return RE_COMPONENT_NAME.test(name);
|
|
405
|
-
}
|
|
406
377
|
function isClassComponent(node) {
|
|
407
378
|
if ("superClass" in node && node.superClass != null) {
|
|
408
379
|
const re = /^(?:Pure)?Component$/u;
|
|
@@ -428,9 +399,30 @@ function isPureComponent(node) {
|
|
|
428
399
|
return false;
|
|
429
400
|
}
|
|
430
401
|
|
|
431
|
-
// src/component/component-
|
|
402
|
+
// src/component/component-lifecycle.ts
|
|
403
|
+
function isComponentDidMount(node) {
|
|
404
|
+
return AST8__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
405
|
+
}
|
|
406
|
+
function isComponentWillUnmount(node) {
|
|
407
|
+
return AST8__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUnmount";
|
|
408
|
+
}
|
|
409
|
+
function isComponentDidCatch(node) {
|
|
410
|
+
return AST8__namespace.isMethodOrProperty(node) && !node.static && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidCatch";
|
|
411
|
+
}
|
|
412
|
+
function isGetDerivedStateFromError(node) {
|
|
413
|
+
return AST8__namespace.isMethodOrProperty(node) && node.static && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "getDerivedStateFromError";
|
|
414
|
+
}
|
|
415
|
+
function isGetDerivedStateFromProps(node) {
|
|
416
|
+
return AST8__namespace.isMethodOrProperty(node) && node.static && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "getDerivedStateFromProps";
|
|
417
|
+
}
|
|
418
|
+
function isFunctionOfComponentDidMount(node) {
|
|
419
|
+
return AST8__namespace.isFunction(node) && isComponentDidMount(node.parent) && node.parent.value === node;
|
|
420
|
+
}
|
|
421
|
+
function isFunctionOfComponentWillUnmount(node) {
|
|
422
|
+
return AST8__namespace.isFunction(node) && isComponentWillUnmount(node.parent) && node.parent.value === node;
|
|
423
|
+
}
|
|
432
424
|
function isRenderMethodLike(node) {
|
|
433
|
-
return (node
|
|
425
|
+
return AST8__namespace.isMethodOrProperty(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "render" && node.parent.parent.type === types.AST_NODE_TYPES.ClassDeclaration;
|
|
434
426
|
}
|
|
435
427
|
function isFunctionOfRenderMethod(node) {
|
|
436
428
|
if (!isRenderMethodLike(node.parent)) {
|
|
@@ -441,8 +433,14 @@ function isFunctionOfRenderMethod(node) {
|
|
|
441
433
|
function isInsideRenderMethod(node) {
|
|
442
434
|
return AST8__namespace.findParentNode(node, (node2) => isRenderMethodLike(node2) && isClassComponent(node2.parent.parent)) != null;
|
|
443
435
|
}
|
|
444
|
-
|
|
445
|
-
|
|
436
|
+
var RE_COMPONENT_NAME = /^_?[A-Z]/u;
|
|
437
|
+
function getComponentNameFromIdentifier(node) {
|
|
438
|
+
if (node == null) return eff._;
|
|
439
|
+
return Array.isArray(node) ? node.map((n) => n.name).join(".") : node.name;
|
|
440
|
+
}
|
|
441
|
+
function isComponentName(name) {
|
|
442
|
+
return RE_COMPONENT_NAME.test(name);
|
|
443
|
+
}
|
|
446
444
|
function hasNoneOrValidComponentName(node, context) {
|
|
447
445
|
const id2 = getFunctionComponentIdentifier(node, context);
|
|
448
446
|
if (id2 == null) return true;
|
|
@@ -481,15 +479,17 @@ function hasValidHierarchy(node, context, hint) {
|
|
|
481
479
|
}
|
|
482
480
|
function getComponentFlag(initPath) {
|
|
483
481
|
let flag = ERFunctionComponentFlag.None;
|
|
484
|
-
if (initPath != null && AST8__namespace.hasCallInFunctionInitPath("memo"
|
|
482
|
+
if (initPath != null && AST8__namespace.hasCallInFunctionInitPath("memo", initPath)) {
|
|
485
483
|
flag |= ERFunctionComponentFlag.Memo;
|
|
486
484
|
}
|
|
487
|
-
if (initPath != null && AST8__namespace.hasCallInFunctionInitPath("forwardRef"
|
|
485
|
+
if (initPath != null && AST8__namespace.hasCallInFunctionInitPath("forwardRef", initPath)) {
|
|
488
486
|
flag |= ERFunctionComponentFlag.ForwardRef;
|
|
489
487
|
}
|
|
490
488
|
return flag;
|
|
491
489
|
}
|
|
492
|
-
|
|
490
|
+
var displayNameAssignmentSelector = "AssignmentExpression[type][operator='='][left.type='MemberExpression'][left.property.name='displayName']";
|
|
491
|
+
function useComponentCollector(context, hint = DEFAULT_COMPONENT_HINT, options = {}) {
|
|
492
|
+
const { collectDisplayName = false, collectHookCalls = false } = options;
|
|
493
493
|
const jsxCtx = { getScope: (node) => context.sourceCode.getScope(node) };
|
|
494
494
|
const components = /* @__PURE__ */ new Map();
|
|
495
495
|
const functionEntries = [];
|
|
@@ -505,7 +505,7 @@ function useComponentCollector(context, hint = DEFAULT_COMPONENT_HINT) {
|
|
|
505
505
|
return functionEntries.pop();
|
|
506
506
|
}
|
|
507
507
|
const shouldDrop = AST8__namespace.getNestedReturnStatements(entry.node.body).slice().reverse().some((r) => {
|
|
508
|
-
return context.sourceCode.getScope(r).block === entry.node && r.argument != null && !
|
|
508
|
+
return context.sourceCode.getScope(r).block === entry.node && r.argument != null && !JSX3__namespace.isJSXValue(r.argument, jsxCtx, hint);
|
|
509
509
|
});
|
|
510
510
|
if (shouldDrop) {
|
|
511
511
|
components.delete(entry.key);
|
|
@@ -531,7 +531,7 @@ function useComponentCollector(context, hint = DEFAULT_COMPONENT_HINT) {
|
|
|
531
531
|
return;
|
|
532
532
|
}
|
|
533
533
|
const { body } = entry.node;
|
|
534
|
-
const isComponent = hasNoneOrValidComponentName(entry.node, context) &&
|
|
534
|
+
const isComponent = hasNoneOrValidComponentName(entry.node, context) && JSX3__namespace.isJSXValue(body, jsxCtx, hint) && hasValidHierarchy(entry.node, context, hint);
|
|
535
535
|
if (!isComponent) {
|
|
536
536
|
return;
|
|
537
537
|
}
|
|
@@ -540,8 +540,8 @@ function useComponentCollector(context, hint = DEFAULT_COMPONENT_HINT) {
|
|
|
540
540
|
const name = getComponentNameFromIdentifier(id2);
|
|
541
541
|
const key = getId();
|
|
542
542
|
components.set(key, {
|
|
543
|
-
_: key,
|
|
544
543
|
id: id2,
|
|
544
|
+
key,
|
|
545
545
|
kind: "function",
|
|
546
546
|
name,
|
|
547
547
|
node: entry.node,
|
|
@@ -552,35 +552,35 @@ function useComponentCollector(context, hint = DEFAULT_COMPONENT_HINT) {
|
|
|
552
552
|
initPath
|
|
553
553
|
});
|
|
554
554
|
},
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
555
|
+
...collectDisplayName ? {
|
|
556
|
+
[displayNameAssignmentSelector](node) {
|
|
557
|
+
const { left, right } = node;
|
|
558
|
+
const componentName = left.object.type === types.AST_NODE_TYPES.Identifier ? left.object.name : eff._;
|
|
559
|
+
const component = [...components.values()].findLast(({ name }) => name != null && name === componentName);
|
|
560
|
+
if (component == null) {
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
component.displayName = right;
|
|
561
564
|
}
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
565
|
+
} : {},
|
|
566
|
+
...collectHookCalls ? {
|
|
567
|
+
"CallExpression[type]:exit"(node) {
|
|
568
|
+
if (!isReactHookCall(node)) {
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
const entry = getCurrentEntry();
|
|
572
|
+
if (entry == null) {
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
entry.hookCalls.push(node);
|
|
570
576
|
}
|
|
571
|
-
|
|
572
|
-
if (entry == null) {
|
|
573
|
-
return;
|
|
574
|
-
}
|
|
575
|
-
functionEntries.pop();
|
|
576
|
-
functionEntries.push({ ...entry, hookCalls: [...entry.hookCalls, node] });
|
|
577
|
-
},
|
|
577
|
+
} : {},
|
|
578
578
|
"ReturnStatement[type]"(node) {
|
|
579
579
|
const entry = getCurrentEntry();
|
|
580
580
|
if (entry == null) {
|
|
581
581
|
return;
|
|
582
582
|
}
|
|
583
|
-
const isComponent = hasNoneOrValidComponentName(entry.node, context) &&
|
|
583
|
+
const isComponent = hasNoneOrValidComponentName(entry.node, context) && JSX3__namespace.isJSXValue(node.argument, jsxCtx, hint) && hasValidHierarchy(entry.node, context, hint);
|
|
584
584
|
if (!isComponent) {
|
|
585
585
|
return;
|
|
586
586
|
}
|
|
@@ -590,8 +590,8 @@ function useComponentCollector(context, hint = DEFAULT_COMPONENT_HINT) {
|
|
|
590
590
|
const id2 = getFunctionComponentIdentifier(entry.node, context);
|
|
591
591
|
const name = getComponentNameFromIdentifier(id2);
|
|
592
592
|
components.set(entry.key, {
|
|
593
|
-
_: entry.key,
|
|
594
593
|
id: id2,
|
|
594
|
+
key: entry.key,
|
|
595
595
|
kind: "function",
|
|
596
596
|
name,
|
|
597
597
|
node: entry.node,
|
|
@@ -623,8 +623,8 @@ function useComponentCollectorLegacy() {
|
|
|
623
623
|
components.set(
|
|
624
624
|
key,
|
|
625
625
|
{
|
|
626
|
-
_: key,
|
|
627
626
|
id: id2,
|
|
627
|
+
key,
|
|
628
628
|
kind: "class",
|
|
629
629
|
name: id2?.name,
|
|
630
630
|
node,
|
|
@@ -643,60 +643,22 @@ function useComponentCollectorLegacy() {
|
|
|
643
643
|
};
|
|
644
644
|
return { ctx, listeners };
|
|
645
645
|
}
|
|
646
|
-
|
|
647
|
-
if (node == null) return eff._;
|
|
648
|
-
return node.parent?.type === types.AST_NODE_TYPES.CallExpression && node.parent.callee !== node && node.parent.callee.type === types.AST_NODE_TYPES.Identifier && node.parent.arguments.at(0) === node && isUseEffectCallLoose(node.parent);
|
|
649
|
-
}
|
|
650
|
-
function isCleanupFunction(node) {
|
|
651
|
-
const nearReturn = AST8__namespace.findParentNodeGuard(node, AST8__namespace.is(types.AST_NODE_TYPES.ReturnStatement));
|
|
652
|
-
const nearFunction = AST8__namespace.findParentNodeGuard(node, AST8__namespace.isFunction);
|
|
653
|
-
const nearFunctionOfReturn = AST8__namespace.findParentNodeGuard(nearReturn, AST8__namespace.isFunction);
|
|
654
|
-
return nearFunction === nearFunctionOfReturn && isSetupFunction(nearFunction);
|
|
655
|
-
}
|
|
656
|
-
function isComponentDidMount(node) {
|
|
657
|
-
return AST8__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentDidMount";
|
|
658
|
-
}
|
|
659
|
-
function isComponentWillUnmount(node) {
|
|
660
|
-
return AST8__namespace.isOneOf([types.AST_NODE_TYPES.MethodDefinition, types.AST_NODE_TYPES.PropertyDefinition])(node) && node.key.type === types.AST_NODE_TYPES.Identifier && node.key.name === "componentWillUnmount";
|
|
661
|
-
}
|
|
662
|
-
function isComponentDidMountFunction(node) {
|
|
663
|
-
return AST8__namespace.isFunction(node) && isComponentDidMount(node.parent) && node.parent.value === node;
|
|
664
|
-
}
|
|
665
|
-
function isComponentWillUnmountFunction(node) {
|
|
666
|
-
return AST8__namespace.isFunction(node) && isComponentWillUnmount(node.parent) && node.parent.value === node;
|
|
667
|
-
}
|
|
668
|
-
var ERPhaseRelevance = eff.birecord({
|
|
646
|
+
var ERPhaseRelevance = birecord__default.default({
|
|
669
647
|
mount: "unmount",
|
|
670
648
|
setup: "cleanup"
|
|
671
649
|
});
|
|
672
650
|
var isInversePhase = eff.dual(2, (a, b) => ERPhaseRelevance.get(a) === b);
|
|
673
|
-
function isDirectValueOfRenderPropertyLoose(node) {
|
|
674
|
-
const matching = (node2) => {
|
|
675
|
-
return node2.type === types.AST_NODE_TYPES.Property && node2.key.type === types.AST_NODE_TYPES.Identifier && node2.key.name.startsWith("render");
|
|
676
|
-
};
|
|
677
|
-
return matching(node) || node.parent != null && matching(node.parent);
|
|
678
|
-
}
|
|
679
|
-
function isDeclaredInRenderPropLoose(node) {
|
|
680
|
-
if (isDirectValueOfRenderPropertyLoose(node)) {
|
|
681
|
-
return true;
|
|
682
|
-
}
|
|
683
|
-
const parent = AST8__namespace.findParentNodeGuard(node, AST8__namespace.is(types.AST_NODE_TYPES.JSXExpressionContainer))?.parent;
|
|
684
|
-
if (parent?.type !== types.AST_NODE_TYPES.JSXAttribute) {
|
|
685
|
-
return false;
|
|
686
|
-
}
|
|
687
|
-
return parent.name.type === types.AST_NODE_TYPES.JSXIdentifier && parent.name.name.startsWith("render");
|
|
688
|
-
}
|
|
689
651
|
function isRenderFunctionLoose(node, context) {
|
|
690
652
|
const { body, parent } = node;
|
|
691
653
|
if (AST8__namespace.getFunctionIdentifier(node)?.name.startsWith("render")) {
|
|
692
654
|
return parent.type === types.AST_NODE_TYPES.JSXExpressionContainer && parent.parent.type === types.AST_NODE_TYPES.JSXAttribute && parent.parent.name.type === types.AST_NODE_TYPES.JSXIdentifier && parent.parent.name.name.startsWith("render");
|
|
693
655
|
}
|
|
694
|
-
return
|
|
656
|
+
return JSX3__namespace.isJSXValue(
|
|
695
657
|
body,
|
|
696
658
|
{
|
|
697
659
|
getScope: (node2) => context.sourceCode.getScope(node2)
|
|
698
660
|
},
|
|
699
|
-
|
|
661
|
+
JSX3__namespace.JSXValueHint.SkipNullLiteral | JSX3__namespace.JSXValueHint.SkipUndefined | JSX3__namespace.JSXValueHint.StrictLogical | JSX3__namespace.JSXValueHint.StrictConditional
|
|
700
662
|
);
|
|
701
663
|
}
|
|
702
664
|
function isRenderPropLoose(node, context) {
|
|
@@ -705,10 +667,36 @@ function isRenderPropLoose(node, context) {
|
|
|
705
667
|
}
|
|
706
668
|
return node.name.name.startsWith("render") && node.value?.type === types.AST_NODE_TYPES.JSXExpressionContainer && AST8__namespace.isFunction(node.value.expression) && isRenderFunctionLoose(node.value.expression, context);
|
|
707
669
|
}
|
|
670
|
+
function isDirectValueOfRenderPropertyLoose(node) {
|
|
671
|
+
const matching = (node2) => {
|
|
672
|
+
return node2.type === types.AST_NODE_TYPES.Property && node2.key.type === types.AST_NODE_TYPES.Identifier && node2.key.name.startsWith("render");
|
|
673
|
+
};
|
|
674
|
+
return matching(node) || node.parent != null && matching(node.parent);
|
|
675
|
+
}
|
|
676
|
+
function isDeclaredInRenderPropLoose(node) {
|
|
677
|
+
if (isDirectValueOfRenderPropertyLoose(node)) {
|
|
678
|
+
return true;
|
|
679
|
+
}
|
|
680
|
+
const parent = AST8__namespace.findParentNode(node, AST8__namespace.is(types.AST_NODE_TYPES.JSXExpressionContainer))?.parent;
|
|
681
|
+
if (parent?.type !== types.AST_NODE_TYPES.JSXAttribute) {
|
|
682
|
+
return false;
|
|
683
|
+
}
|
|
684
|
+
return parent.name.type === types.AST_NODE_TYPES.JSXIdentifier && parent.name.name.startsWith("render");
|
|
685
|
+
}
|
|
708
686
|
function isThisSetState(node) {
|
|
709
687
|
const { callee } = node;
|
|
710
688
|
return callee.type === types.AST_NODE_TYPES.MemberExpression && AST8__namespace.isThisExpression(callee.object) && callee.property.type === types.AST_NODE_TYPES.Identifier && callee.property.name === "setState";
|
|
711
689
|
}
|
|
690
|
+
function isFunctionOfUseEffectSetup(node) {
|
|
691
|
+
if (node == null) return eff._;
|
|
692
|
+
return node.parent?.type === types.AST_NODE_TYPES.CallExpression && node.parent.callee !== node && node.parent.callee.type === types.AST_NODE_TYPES.Identifier && node.parent.arguments.at(0) === node && isUseEffectCallLoose(node.parent);
|
|
693
|
+
}
|
|
694
|
+
function isFunctionOfUseEffectCleanup(node) {
|
|
695
|
+
const nearReturn = AST8__namespace.findParentNode(node, AST8__namespace.is(types.AST_NODE_TYPES.ReturnStatement));
|
|
696
|
+
const nearFunction = AST8__namespace.findParentNode(node, AST8__namespace.isFunction);
|
|
697
|
+
const nearFunctionOfReturn = AST8__namespace.findParentNode(nearReturn, AST8__namespace.isFunction);
|
|
698
|
+
return nearFunction === nearFunctionOfReturn && isFunctionOfUseEffectSetup(nearFunction);
|
|
699
|
+
}
|
|
712
700
|
|
|
713
701
|
exports.DEFAULT_COMPONENT_HINT = DEFAULT_COMPONENT_HINT;
|
|
714
702
|
exports.ERClassComponentFlag = ERClassComponentFlag;
|
|
@@ -718,7 +706,6 @@ exports.ERPhaseRelevance = ERPhaseRelevance;
|
|
|
718
706
|
exports.RE_COMPONENT_NAME = RE_COMPONENT_NAME;
|
|
719
707
|
exports.RE_HOOK_NAME = RE_HOOK_NAME;
|
|
720
708
|
exports.getComponentNameFromIdentifier = getComponentNameFromIdentifier;
|
|
721
|
-
exports.getElementNameAndRepresentName = getElementNameAndRepresentName;
|
|
722
709
|
exports.getFunctionComponentIdentifier = getFunctionComponentIdentifier;
|
|
723
710
|
exports.getId = getId;
|
|
724
711
|
exports.hasNoneOrValidComponentName = hasNoneOrValidComponentName;
|
|
@@ -736,14 +723,12 @@ exports.isChildrenOnlyCall = isChildrenOnlyCall;
|
|
|
736
723
|
exports.isChildrenToArray = isChildrenToArray;
|
|
737
724
|
exports.isChildrenToArrayCall = isChildrenToArrayCall;
|
|
738
725
|
exports.isClassComponent = isClassComponent;
|
|
739
|
-
exports.isCleanupFunction = isCleanupFunction;
|
|
740
726
|
exports.isCloneElement = isCloneElement;
|
|
741
727
|
exports.isCloneElementCall = isCloneElementCall;
|
|
728
|
+
exports.isComponentDidCatch = isComponentDidCatch;
|
|
742
729
|
exports.isComponentDidMount = isComponentDidMount;
|
|
743
|
-
exports.isComponentDidMountFunction = isComponentDidMountFunction;
|
|
744
730
|
exports.isComponentName = isComponentName;
|
|
745
731
|
exports.isComponentWillUnmount = isComponentWillUnmount;
|
|
746
|
-
exports.isComponentWillUnmountFunction = isComponentWillUnmountFunction;
|
|
747
732
|
exports.isCreateContext = isCreateContext;
|
|
748
733
|
exports.isCreateContextCall = isCreateContextCall;
|
|
749
734
|
exports.isCreateElement = isCreateElement;
|
|
@@ -756,7 +741,13 @@ exports.isForwardRef = isForwardRef;
|
|
|
756
741
|
exports.isForwardRefCall = isForwardRefCall;
|
|
757
742
|
exports.isFromReact = isFromReact;
|
|
758
743
|
exports.isFromReactMember = isFromReactMember;
|
|
744
|
+
exports.isFunctionOfComponentDidMount = isFunctionOfComponentDidMount;
|
|
745
|
+
exports.isFunctionOfComponentWillUnmount = isFunctionOfComponentWillUnmount;
|
|
759
746
|
exports.isFunctionOfRenderMethod = isFunctionOfRenderMethod;
|
|
747
|
+
exports.isFunctionOfUseEffectCleanup = isFunctionOfUseEffectCleanup;
|
|
748
|
+
exports.isFunctionOfUseEffectSetup = isFunctionOfUseEffectSetup;
|
|
749
|
+
exports.isGetDerivedStateFromError = isGetDerivedStateFromError;
|
|
750
|
+
exports.isGetDerivedStateFromProps = isGetDerivedStateFromProps;
|
|
760
751
|
exports.isInitializedFromReact = isInitializedFromReact;
|
|
761
752
|
exports.isInsideCreateElementProps = isInsideCreateElementProps;
|
|
762
753
|
exports.isInsideReactHook = isInsideReactHook;
|
|
@@ -776,7 +767,6 @@ exports.isReactHookName = isReactHookName;
|
|
|
776
767
|
exports.isRenderFunctionLoose = isRenderFunctionLoose;
|
|
777
768
|
exports.isRenderMethodLike = isRenderMethodLike;
|
|
778
769
|
exports.isRenderPropLoose = isRenderPropLoose;
|
|
779
|
-
exports.isSetupFunction = isSetupFunction;
|
|
780
770
|
exports.isThisSetState = isThisSetState;
|
|
781
771
|
exports.isUseCallbackCall = isUseCallbackCall;
|
|
782
772
|
exports.isUseContextCall = isUseContextCall;
|