Skip to content

Commit 72e3f64

Browse files
committed
fixup! [New] Symmetric useState hook variable names
1 parent 0eba9ec commit 72e3f64

File tree

3 files changed

+21
-24
lines changed

3 files changed

+21
-24
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ Enable the rules that you would like to use.
132132
| | | [react/forbid-foreign-prop-types](docs/rules/forbid-foreign-prop-types.md) | Forbid using another component's propTypes |
133133
| | | [react/forbid-prop-types](docs/rules/forbid-prop-types.md) | Forbid certain propTypes |
134134
| | 🔧 | [react/function-component-definition](docs/rules/function-component-definition.md) | Standardize the way function component get defined |
135-
| | 🔧 | [react/hook-use-state](docs/rules/hook-use-state.md) | Ensure symmetric naming of useState hook value and setter variables |
135+
| | | [react/hook-use-state](docs/rules/hook-use-state.md) | Ensure symmetric naming of useState hook value and setter variables |
136136
| | | [react/no-access-state-in-setstate](docs/rules/no-access-state-in-setstate.md) | Reports when this.state is accessed within setState |
137137
| | | [react/no-adjacent-inline-elements](docs/rules/no-adjacent-inline-elements.md) | Prevent adjacent inline elements not separated by whitespace. |
138138
| | | [react/no-array-index-key](docs/rules/no-array-index-key.md) | Prevent usage of Array index in keys |

docs/rules/hook-use-state.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# Ensure destructuring and symmetric naming of useState hook value and setter variables (react/hook-use-state)
22

3-
**Fixable:** In some cases, this rule is automatically fixable using the `--fix` flag on the command line.
4-
53
## Rule Details
64

75
This rule checks whether the value and setter variables destructured from a `React.useState()` call are named symmetrically.

lib/rules/hook-use-state.js

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const report = require('../util/report');
1515

1616
const messages = {
1717
useStateErrorMessage: 'useState call is not destructured into value + setter pair',
18-
1918
};
2019

2120
module.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

Comments
 (0)