ArnaudBarre / eslint-plugin-react-refresh

Validate that your components can safely be updated with Fast Refresh
MIT License
220 stars 15 forks source link

Add basic support for custom HOCs #60

Open HorusGoul opened 1 week ago

HorusGoul commented 1 week ago

Fixes #59 for MobX's observer and other custom HOCs that follow the most common pattern.

HOC pattern covered (simple HOCs):

export default observer(Component);

HOC patterns not covered because we would need to refactor to look for component identifiers in other argument positions (not just the first), and most likely generalize the implementation for redux's connect HOC.

export default withMultipleParameters(
  () => {},
  () => {},
  Component
);
export default reduxLikeConnect(
  () => {},
  () => {},
)(Component);

Adding support for simple HOCs brings the most value because HOCs with weird implementations, such as the one with multiple parameters and the component coming last, might be rare (we have some of those in my work codebase, but we'll replace these with hooks).

As follow-up work, it might be nice to detect exported components with HOCs that aren't in the customHOCs list and raise a particular error message that tells the developer about the customHOCs setting.

Thoughts? cc @ArnaudBarre

HorusGoul commented 1 week ago

Let's merge it! If someone else needs this maybe we can look into adding those improvements as well :smile: