diff --git a/.github/renovate.json5 b/.github/renovate.json5 index e18bd2d79..20694111b 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -33,12 +33,12 @@ matchPackageNames: [ "eslint", "@eslint/*", + "@eslint-react/eslint-plugin", "@stylistic/eslint-plugin-js", "eslint-config-prettier", "eslint-plugin-compat", "eslint-plugin-jest", "eslint-plugin-n", - "eslint-plugin-react", "eslint-plugin-regexp", "eslint-plugin-simple-import-sort", "eslint-plugin-unicorn", diff --git a/eslint.config.js b/eslint.config.js index 58e3c6103..0c3e347bc 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,12 +1,12 @@ import url from "node:url"; import eslintPluginJs from "@eslint/js"; +import eslintPluginEslintReact from "@eslint-react/eslint-plugin"; import eslintPluginStylisticJs from "@stylistic/eslint-plugin-js"; import eslintPluginTypescriptEslint from "@typescript-eslint/eslint-plugin"; import { isCI } from "ci-info"; import eslintConfigPrettier from "eslint-config-prettier"; import eslintPluginJest from "eslint-plugin-jest"; import eslintPluginN from "eslint-plugin-n"; -import eslintPluginReact from "eslint-plugin-react"; import eslintPluginRegexp from "eslint-plugin-regexp"; import eslintPluginSimpleImportSort from "eslint-plugin-simple-import-sort"; import eslintPluginUnicorn from "eslint-plugin-unicorn"; @@ -443,33 +443,29 @@ export default [ }, { files: ["website/**/*"], - ...eslintPluginReact.configs.flat.recommended, + ...eslintPluginEslintReact.configs.recommended, }, { files: ["website/**/*"], languageOptions: { globals: { ...globals.browser, ...globals.worker }, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, }, settings: { - react: { + "react-x": { version: "18", }, }, rules: { - "react/display-name": "off", - "react/no-deprecated": "off", - "react/prop-types": "off", "unicorn/filename-case": "off", }, }, { - files: ["website/docusaurus.config.js"], - languageOptions: { - sourceType: "module", - }, - }, - { - files: ["website/playground/**/*"], + files: ["website/docusaurus.config.js", "website/playground/**/*"], languageOptions: { sourceType: "module", }, diff --git a/package.json b/package.json index d38c45e43..4c6e31ab2 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ }, "devDependencies": { "@babel/generator": "7.26.9", + "@eslint-react/eslint-plugin": "1.27.0", "@eslint/js": "9.21.0", "@stylistic/eslint-plugin-js": "4.0.1", "@types/estree": "1.0.6", @@ -127,7 +128,6 @@ "eslint-plugin-compat": "6.0.2", "eslint-plugin-jest": "28.11.0", "eslint-plugin-n": "17.15.1", - "eslint-plugin-react": "7.37.4", "eslint-plugin-regexp": "2.7.0", "eslint-plugin-simple-import-sort": "12.1.1", "eslint-plugin-unicorn": "57.0.0", diff --git a/scripts/build/esmify-typescript-eslint.js b/scripts/build/esmify-typescript-eslint.js index ecf9846f8..694b4e862 100644 --- a/scripts/build/esmify-typescript-eslint.js +++ b/scripts/build/esmify-typescript-eslint.js @@ -121,6 +121,28 @@ function esmifyTypescriptEslint(text) { `, ); + /** + ```js + var FOO; + (function (FOO) { + })(FOO || (exports.FOO = FOO = {})); + ``` + -> + ```js + var FOO; + (function (FOO) { + })(FOO ?? {})); + export {FOO}; + ``` + */ + text = text.replaceAll( + /(?<=\n\}\))\((?\S+) \|\| \(exports\.\k = \k = \{\}\)\);/gu, + outdent` + ($ ??= {}); + export {$}; + `, + ); + // Make sure ESBuild treat it as Module text += "\nexport {};"; diff --git a/website/playground/index.js b/website/playground/index.js index ef8ab504b..a44c8d019 100644 --- a/website/playground/index.js +++ b/website/playground/index.js @@ -17,6 +17,7 @@ class App extends React.Component { async componentDidMount() { const { supportInfo, version } = await this.worker.getMetadata(); + // eslint-disable-next-line @eslint-react/no-set-state-in-component-did-mount this.setState({ loaded: true, availableOptions: supportInfo.options.map(augmentOption), diff --git a/website/playground/sidebar/SidebarOptions.js b/website/playground/sidebar/SidebarOptions.js index e328cae72..0dae1441c 100644 --- a/website/playground/sidebar/SidebarOptions.js +++ b/website/playground/sidebar/SidebarOptions.js @@ -1,4 +1,3 @@ -import * as React from "react"; import { SidebarCategory } from "./components.js"; import Option from "./options.js"; diff --git a/website/playground/sidebar/components.js b/website/playground/sidebar/components.js index 5725ba98b..b6c2a90ab 100644 --- a/website/playground/sidebar/components.js +++ b/website/playground/sidebar/components.js @@ -1,5 +1,3 @@ -import * as React from "react"; - export function Sidebar({ visible, children }) { return (
diff --git a/website/playground/sidebar/inputs.js b/website/playground/sidebar/inputs.js index b4c15099c..814ec7664 100644 --- a/website/playground/sidebar/inputs.js +++ b/website/playground/sidebar/inputs.js @@ -1,5 +1,3 @@ -import * as React from "react"; - export function Checkbox({ label: _label, title, checked, onChange }) { return (