@@ -33,71 +33,12 @@ module.exports = {
33
33
hasSuggestions : true ,
34
34
} ,
35
35
36
- create : Components . detect ( ( context , components ) => ( {
36
+ create : Components . detect ( ( context , components , util ) => ( {
37
37
CallExpression ( node ) {
38
38
const isImmediateReturn = node . parent
39
39
&& node . parent . type === 'ReturnStatement' ;
40
40
41
- if ( isImmediateReturn ) {
42
- return ;
43
- }
44
-
45
- const defaultReactImports = components . getDefaultReactImports ( ) ;
46
- const namedReactImports = components . getNamedReactImports ( ) ;
47
- const defaultReactImportSpecifier = defaultReactImports
48
- ? defaultReactImports [ 0 ]
49
- : undefined ;
50
- const defaultReactImportName = defaultReactImportSpecifier
51
- ? defaultReactImportSpecifier . local . name
52
- : undefined ;
53
- const useStateReactImportSpecifier = namedReactImports
54
- ? namedReactImports . find ( ( specifier ) => specifier . imported . name === 'useState' )
55
- : undefined ;
56
- const useStateReactImportName = useStateReactImportSpecifier
57
- ? useStateReactImportSpecifier . local . name
58
- : undefined ;
59
-
60
- const isPotentialReactUseStateCall = (
61
- defaultReactImportName
62
- && node . callee . type === 'MemberExpression'
63
- && node . callee . object . type === 'Identifier'
64
- && node . callee . object . name === defaultReactImportName
65
- && node . callee . property . type === 'Identifier'
66
- && node . callee . property . name === 'useState'
67
- ) ;
68
-
69
- const isPotentialUseStateCall = (
70
- useStateReactImportName
71
- && node . callee . type === 'Identifier'
72
- && node . callee . name === useStateReactImportName
73
- ) ;
74
-
75
- const scope = isPotentialReactUseStateCall || isPotentialUseStateCall
76
- ? context . getScope ( )
77
- : undefined ;
78
-
79
- const reactResolvedDefs = isPotentialReactUseStateCall && scope . references . find (
80
- ( reference ) => reference . identifier . name === defaultReactImportName
81
- ) . resolved . defs ;
82
- const useStateResolvedDefs = isPotentialUseStateCall && scope . references . find (
83
- ( reference ) => reference . identifier . name === useStateReactImportName
84
- ) . resolved . defs ;
85
-
86
- const ultimateReactResolvedDef = reactResolvedDefs
87
- ? reactResolvedDefs [ reactResolvedDefs . length - 1 ]
88
- : undefined ;
89
- const ultimateUseStateResolvedDef = useStateResolvedDefs
90
- ? useStateResolvedDefs [ useStateResolvedDefs . length - 1 ]
91
- : undefined ;
92
-
93
- const isReactShadowed = ultimateReactResolvedDef && ultimateReactResolvedDef . type !== 'ImportBinding' ;
94
- const isUseStateShadowed = ultimateUseStateResolvedDef && ultimateUseStateResolvedDef . type !== 'ImportBinding' ;
95
-
96
- const isReactUseStateCall = isPotentialReactUseStateCall && ! isReactShadowed ;
97
- const isUseStateCall = isPotentialUseStateCall && ! isUseStateShadowed ;
98
-
99
- // Ignore unless this is a useState() or React.useState() call.
100
- if ( ! isReactUseStateCall && ! isUseStateCall ) {
41
+ if ( isImmediateReturn || ! util . isReactHookCall ( node , [ 'useState' ] ) ) {
101
42
return ;
102
43
}
103
44
@@ -151,6 +92,20 @@ module.exports = {
151
92
} ,
152
93
] ;
153
94
95
+ const defaultReactImports = components . getDefaultReactImports ( ) ;
96
+ const defaultReactImportSpecifier = defaultReactImports
97
+ ? defaultReactImports [ 0 ]
98
+ : undefined ;
99
+
100
+ const defaultReactImportName = defaultReactImportSpecifier
101
+ ? defaultReactImportSpecifier . local . name
102
+ : undefined ;
103
+
104
+ const namedReactImports = components . getNamedReactImports ( ) ;
105
+ const useStateReactImportSpecifier = namedReactImports
106
+ ? namedReactImports . find ( ( specifier ) => specifier . imported . name === 'useState' )
107
+ : undefined ;
108
+
154
109
const isSingleGetter = valueVariable && variableNodes . length === 1 ;
155
110
const isUseStateCalledWithSingleArgument = node . arguments . length === 1 ;
156
111
if ( isSingleGetter && isUseStateCalledWithSingleArgument ) {
0 commit comments