Releases: ArnaudBarre/eslint-plugin-react-refresh
v0.5.2
v0.5.1
v0.5.0
Breaking changes
- The package now ships as ESM and requires ESLint 9 + node 20. Because legacy config doesn't support ESM, this requires to use flat config
- A new
reactRefreshexport is available and prefered over the default export. It's an object with two properties:plugin: The plugin object with the rulesconfigs: An object containing configuration presets, each exposed as a function. These functions accept your custom options, merge them with sensible defaults for that config, and return the final config object.
customHOCsoption was renamed toextraHOCs- Validation of HOCs calls is now more strict, you may need to add some HOCs to the
extraHOCsoption (likeconnectorstyled)
Config example:
import { defineConfig } from "eslint/config";
import { reactRefresh } from "eslint-plugin-react-refresh";
export default defineConfig(
/* Main config */
reactRefresh.configs.vite({ extraHOCs: ["someLibHOC"] }),
);Config example without config:
import { defineConfig } from "eslint/config";
import { reactRefresh } from "eslint-plugin-react-refresh";
export default defineConfig({
files: ["**/*.ts", "**/*.tsx"],
plugins: {
// other plugins
"react-refresh": reactRefresh.plugin,
},
rules: {
// other rules
"react-refresh/only-export-components": [
"warn",
{ extraHOCs: ["someLibHOC"] },
],
},
});Why
This version follows a revamp of the internal logic to better make the difference between random call expressions like export const Enum = Object.keys(Record) and actual React HOC calls like export const MemoComponent = memo(Component). (fixes #93)
The rule now handles ternaries and patterns like export default customHOC(props)(Component) which makes it able to correctly support files like this one given this config:
{
"react-refresh/only-export-components": [
"warn",
{ "extraHOCs": ["createRootRouteWithContext"] }
]
}Note
Actually createRoute functions from TanStack Router are not React HOCs, they return route objects that fake to be a memoized component but are not. When only doing createRootRoute({ component: Foo }), HMR will work fine, but as soon as you add a prop to the options that is not a React component, HMR will not work. I would recommend to avoid adding any TanStack function to extraHOCs it you want to preserve good HMR in the long term. Bluesky thread.
Because I'm not 100% sure this new logic doesn't introduce any false positive, this is done in a major-like version. This also give me the occasion to remove the hardcoded connect from the rule. If you are using connect from react-redux, you should now add it to extraHOCs like this:
{
"react-refresh/only-export-components": ["warn", { "extraHOCs": ["connect"] }]
}v0.4.26
v0.4.25
v0.4.24
- Add
"generateImageMetadata","generateSitemaps"&"generateStaticParams"toallowExportNamesin Next config
v0.4.23
- Add
"metadata","generateMetadata"&"generateViewport"toallowExportNamesin Next config