Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[core] Reinstate react/no-unused-prop-types eslint rule #34125

Merged
merged 5 commits into from Sep 3, 2022
Merged
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 2 additions & 1 deletion .eslintrc.js
Expand Up @@ -278,7 +278,8 @@ module.exports = {
],
},
],
'react/prop-types': 'off',
'react/prop-types': 'error',
'react/no-unused-prop-types': 'error',
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make sense to do the opposite? Disable the rule for .js files only? Having to disable the rule feels like the exception, not the norm.

I'm not even sure we should disable the rule in the first place to be honest.

Copy link
Member Author

@Janpot Janpot Aug 29, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not even sure we should disable the rule in the first place to be honest.

Yes, I have no idea yet on why packages/mui-base/src/Portal/Portal.js suddenly fails the rules. compared with e.g. packages/mui-material/src/Accordion/Accordion.js, which seems to be be quite similar in setup and is subject to the identical config.

The error seems to go away when I wrap the result of portal in a fragment. I guess it's not detecting Portal as a react component if it doesn't return a jsx tag or null

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trying that approach in this PR, not sure whether there's any overhead in doing this. Also seems like there are some true positives in packages/mui-material/src/Hidden/HiddenJs.js

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just realized another option, we could add

/* eslint-disable react/no-unused-prop-types */
// ...
/* eslint-enable react/no-unused-prop-types */

around the generated prop types

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for HiddenJs component - it's an internal one. IMO we shouldn't require proptypes in such cases as developers would see a duplicated error if they use a wrong prop (one from "public" Hidden, the second one from HiddenJs).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It will be tricky to selectively turn off react/prop-types for internal only components. How would we define the rule in eslint?

I also just reviewed the HiddenCss component, and it looks like its proptypes aren't fully matching either.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I suppose we could just disable the rule per file via a comment. Anyway, this can be out of scope of your PR.

},
},
// Files used for generating TypeScript declaration files (#ts-source-files)
Expand Down