@@ -15,7 +15,6 @@ const report = require('../util/report');
1515
1616const messages = {
1717 useStateErrorMessage : 'useState call is not destructured into value + setter pair' ,
18-
1918} ;
2019
2120module . exports = {
@@ -26,7 +25,6 @@ module.exports = {
2625 recommended : false ,
2726 url : docsUrl ( 'hook-use-state' ) ,
2827 } ,
29- fixable : 'code' ,
3028 messages,
3129 schema : [ ] ,
3230 type : 'suggestion' ,
@@ -112,29 +110,30 @@ module.exports = {
112110 const useMemoReactImportSpecifier = namedReactImports
113111 && namedReactImports . find ( ( specifier ) => specifier . imported . name === 'useMemo' ) ;
114112
113+ let useMemoCode ;
114+ if ( useMemoReactImportSpecifier ) {
115+ useMemoCode = useMemoReactImportSpecifier . local . name ;
116+ } else if ( defaultReactImportName ) {
117+ useMemoCode = `${ defaultReactImportName } .useMemo` ;
118+ } else {
119+ useMemoCode = 'useMemo' ;
120+ }
121+
115122 suggestions . unshift ( {
116123 desc : 'Replace useState call with useMemo' ,
117- fix : ( fixer ) => {
118- const useMemoCode = ( useMemoReactImportSpecifier
119- && useMemoReactImportSpecifier . local . name )
120- || ( defaultReactImportName
121- && `${ defaultReactImportName } .useMemo` )
122- || 'useMemo' ;
123-
124- return [
125- // Add useMemo import, if necessary
126- useStateReactImportSpecifier
124+ fix : ( fixer ) => [
125+ // Add useMemo import, if necessary
126+ useStateReactImportSpecifier
127127 && ( ! useMemoReactImportSpecifier || defaultReactImportName )
128128 && fixer . insertTextAfter ( useStateReactImportSpecifier , ', useMemo' ) ,
129- // Convert single-value destructure to simple assignment
130- fixer . replaceTextRange ( node . parent . id . range , valueVariableName ) ,
131- // Convert useState call to useMemo + arrow function + dependency array
132- fixer . replaceTextRange (
133- node . range ,
134- `${ useMemoCode } (() => ${ context . getSourceCode ( ) . getText ( node . arguments [ 0 ] ) } , [])`
135- ) ,
136- ] . filter ( Boolean ) ;
137- } ,
129+ // Convert single-value destructure to simple assignment
130+ fixer . replaceTextRange ( node . parent . id . range , valueVariableName ) ,
131+ // Convert useState call to useMemo + arrow function + dependency array
132+ fixer . replaceTextRange (
133+ node . range ,
134+ `${ useMemoCode } (() => ${ context . getSourceCode ( ) . getText ( node . arguments [ 0 ] ) } , [])`
135+ ) ,
136+ ] . filter ( Boolean ) ,
138137 } ) ;
139138 }
140139
0 commit comments