@@ -33,71 +33,12 @@ module.exports = {
3333 hasSuggestions : true ,
3434 } ,
3535
36- create : Components . detect ( ( context , components ) => ( {
36+ create : Components . detect ( ( context , components , util ) => ( {
3737 CallExpression ( node ) {
3838 const isImmediateReturn = node . parent
3939 && node . parent . type === 'ReturnStatement' ;
4040
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' ] ) ) {
10142 return ;
10243 }
10344
@@ -151,6 +92,20 @@ module.exports = {
15192 } ,
15293 ] ;
15394
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+
154109 const isSingleGetter = valueVariable && variableNodes . length === 1 ;
155110 const isUseStateCalledWithSingleArgument = node . arguments . length === 1 ;
156111 if ( isSingleGetter && isUseStateCalledWithSingleArgument ) {
0 commit comments