Skip to content

Commit

Permalink
[eslint-plugin-react-hooks] only allow capitalized component names (#…
Browse files Browse the repository at this point in the history
…25162)

- update naming rules to disallow _component
- update eslint-plugin-react-hooks version
  • Loading branch information
kassens authored Sep 1, 2022
1 parent 36c908a commit 2c2d9a1
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 10 deletions.
2 changes: 1 addition & 1 deletion ReactVersions.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ const ReactVersion = '18.3.0';
const nextChannelLabel = 'next';

const stablePackages = {
'eslint-plugin-react-hooks': '4.7.0',
'eslint-plugin-react-hooks': '5.0.0',
'jest-react': '0.15.0',
react: ReactVersion,
'react-art': ReactVersion,
Expand Down
6 changes: 6 additions & 0 deletions packages/eslint-plugin-react-hooks/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## 5.0.0 (next release)

* **New Violations:** Component names now need to start with an uppercase letter instead of a non-lowercase letter. This means `_Button` or `_component` are no longer valid. ([@kassens](https://github.com/kassens)) in [#25162](https://github.com/facebook/react/pull/25162)

## 4.6.0

## 4.5.0

* Fix false positive error with large number of branches. ([@scyron6](https://github.com/scyron6) in [#24287](https://github.com/facebook/react/pull/24287))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,21 @@ const tests = {
functionError('useHookInsideNormalFunction', 'normalFunctionWithHook'),
],
},
{
code: `
// These are neither functions nor hooks.
function _normalFunctionWithHook() {
useHookInsideNormalFunction();
}
function _useNotAHook() {
useHookInsideNormalFunction();
}
`,
errors: [
functionError('useHookInsideNormalFunction', '_normalFunctionWithHook'),
functionError('useHookInsideNormalFunction', '_useNotAHook'),
],
},
{
code: `
// Invalid because it's dangerous and might not warn otherwise.
Expand Down
2 changes: 1 addition & 1 deletion packages/eslint-plugin-react-hooks/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "eslint-plugin-react-hooks",
"description": "ESLint rules for React Hooks",
"version": "4.6.0",
"version": "5.0.0",
"repository": {
"type": "git",
"url": "https://github.com/facebook/react.git",
Expand Down
11 changes: 3 additions & 8 deletions packages/eslint-plugin-react-hooks/src/RulesOfHooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
*/

function isHookName(s) {
return /^use[A-Z0-9].*$/.test(s);
return /^use[A-Z0-9]/.test(s);
}

/**
Expand All @@ -42,16 +42,11 @@ function isHook(node) {

/**
* Checks if the node is a React component name. React component names must
* always start with a non-lowercase letter. So `MyComponent` or `_MyComponent`
* are valid component names for instance.
* always start with an uppercase letter.
*/

function isComponentName(node) {
if (node.type === 'Identifier') {
return !/^[a-z]/.test(node.name);
} else {
return false;
}
return node.type === 'Identifier' && /^[A-Z]/.test(node.name);
}

function isReactFunction(node, functionName) {
Expand Down

0 comments on commit 2c2d9a1

Please sign in to comment.