Skip to content

Commit 8ed3aac

Browse files
committed
chore(web): Change eslint-plugin-react to eslint-react/eslint-plugin
This supports eslint 10
1 parent 04ca027 commit 8ed3aac

11 files changed

Lines changed: 387 additions & 1489 deletions

File tree

web/eslint.config.js

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,45 @@
1-
import js from '@eslint/js'
1+
import eslintReact from "@eslint-react/eslint-plugin";
2+
import eslintJs from "@eslint/js";
3+
import { defineConfig } from "eslint/config";
4+
import tseslint from "typescript-eslint";
5+
import eslintConfigPrettier from "eslint-config-prettier";
26
import globals from 'globals'
3-
import reactPlugin from 'eslint-plugin-react'
4-
import reactHooksPlugin from 'eslint-plugin-react-hooks'
5-
import tseslint from 'typescript-eslint'
6-
import eslintConfigPrettier from 'eslint-config-prettier'
77

8-
export default tseslint.config(
8+
export default defineConfig(
99
{
10-
ignores: ['dist/**', 'vite-env.d.ts', 'vite.config.ts']
11-
},
12-
js.configs.recommended,
13-
...tseslint.configs.recommended,
14-
{
15-
files: ['**/*.{ts,tsx}'],
10+
files: ["**/*.ts", "**/*.tsx"],
11+
ignores: ['dist/**', 'vite-env.d.ts', 'vite.config.ts'],
12+
13+
// Extend recommended rule sets from:
14+
// 1. ESLint JS's recommended rules
15+
// 2. TypeScript ESLint recommended rules
16+
// 3. ESLint React's recommended-typescript rules
17+
// 4. Prettier (Must be last to disable conflicting rules)
18+
extends: [
19+
eslintJs.configs.recommended,
20+
tseslint.configs.recommended,
21+
eslintReact.configs["recommended-typescript"],
22+
eslintConfigPrettier,
23+
],
24+
25+
// Configure language/parsing options
1626
languageOptions: {
17-
ecmaVersion: 'latest',
27+
ecmaVersion: 'latest', // Allow modern JS syntax
1828
globals: {
19-
...globals.browser
29+
...globals.browser, // Allow browser globals like `window`
2030
},
31+
parser: tseslint.parser, // Your existing parser
2132
parserOptions: {
2233
projectService: true,
23-
tsconfigRootDir: import.meta.dirname
24-
}
25-
},
26-
plugins: {
27-
react: reactPlugin,
28-
'react-hooks': reactHooksPlugin
29-
},
30-
settings: {
31-
react: {
32-
version: 'detect'
33-
}
34+
tsconfigRootDir: import.meta.dirname,
35+
},
3436
},
37+
38+
// TODO: See if some of these could be fixed
3539
rules: {
36-
...reactPlugin.configs.recommended.rules,
37-
...reactPlugin.configs['jsx-runtime'].rules,
38-
...reactHooksPlugin.configs.recommended.rules
39-
}
40+
"@eslint-react/dom-no-dangerously-set-innerhtml": "off",
41+
"@eslint-react/exhaustive-deps": "off",
42+
"@eslint-react/set-state-in-effect": "off",
43+
},
4044
},
41-
eslintConfigPrettier
42-
)
45+
);

web/package.json

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,12 @@
4545
"@types/react": "^19.2.14",
4646
"@types/react-dom": "^19.2.3",
4747
"jsdom": "^28.1.0",
48-
"eslint": "^9.17.0",
48+
"eslint": "^10.2.0",
4949
"eslint-config-prettier": "^10.0.1",
50-
"eslint-plugin-react": "^7.37.3",
51-
"eslint-plugin-react-hooks": "^7.0.1",
50+
"@eslint-react/eslint-plugin": "^4.2.3",
5251
"globals": "^17.4.0",
5352
"prettier": "^3.8.1",
54-
"typescript-eslint": "^8.57.0",
53+
"typescript-eslint": "^8.58.1",
5554
"vitest": "^4.0.18"
5655
}
5756
}

web/src/components/SearchBar.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ export default function SearchBar(props: Props): React.JSX.Element {
3737
updateSearch(q)
3838
}
3939
setShowFavourites(props.showFavourites)
40-
// eslint-disable-next-line react-hooks/exhaustive-deps
4140
}, [props.showFavourites]);
4241

4342
const onFavourites = (show: boolean): void => {

web/src/data-providers/MessageBannerProvider.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ export function MessageBannerProvider({ children }: any): JSX.Element {
5757
}, message.showMs)
5858

5959
setLastTimeout(newTimeout)
60-
// eslint-disable-next-line react-hooks/exhaustive-deps
6160
}, [])
6261

6362
const clearMessages = useCallback(() => {
@@ -70,7 +69,6 @@ export function MessageBannerProvider({ children }: any): JSX.Element {
7069
type: 'success',
7170
showMs: 6000
7271
})
73-
// eslint-disable-next-line react-hooks/exhaustive-deps
7472
}, [])
7573

7674
return (

web/src/data-providers/ProjectDataProvider.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ export function ProjectDataProvider({ children }: any): JSX.Element {
7575

7676
useEffect(() => {
7777
loadData()
78-
// eslint-disable-next-line react-hooks/exhaustive-deps
7978
}, [])
8079

8180
return <Context.Provider value={state}>{children}</Context.Provider>

web/src/data-providers/SearchProvider.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ export function SearchProvider({ children }: any): JSX.Element {
6666
filteredProjects: filterProjects(''),
6767
setQuery
6868
})
69-
// eslint-disable-next-line react-hooks/exhaustive-deps
7069
}, [projects])
7170

7271
return <Context.Provider value={state}>{children}</Context.Provider>

web/src/data-providers/StatsDataProvider.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ export function StatsDataProvider({ children }: any): JSX.Element {
7777

7878
useEffect(() => {
7979
loadData()
80-
// eslint-disable-next-line react-hooks/exhaustive-deps
8180
}, [])
8281

8382
return <Context.Provider value={state}>{children}</Context.Provider>

web/src/pages/Delete.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ export default function Delete(): JSX.Element {
3232
}
3333

3434
setVersions(projects?.find((p) => p.name === project)?.versions ?? [])
35-
// eslint-disable-next-line react-hooks/exhaustive-deps
3635
}, [project])
3736

3837
const validate = (

web/src/pages/Docs.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ export default function Docs(): JSX.Element {
4242
page.current,
4343
hash.current
4444
)
45-
// eslint-disable-next-line react-hooks/exhaustive-deps
4645
}, [project, displayVersion, iframeUpdateTrigger])
4746

4847
useEffect(() => {
@@ -164,7 +163,6 @@ export default function Docs(): JSX.Element {
164163
hash.current = urlHash
165164
setIframeUpdateTrigger((v) => v + 1)
166165
}
167-
// eslint-disable-next-line react-hooks/exhaustive-deps
168166
}, [location])
169167

170168
if (projectLoading) {

web/src/pages/Home.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ export default function Home(): JSX.Element {
4848

4949
useEffect(() => {
5050
updateFavorites()
51-
// eslint-disable-next-line react-hooks/exhaustive-deps
5251
}, [projects])
5352

5453
if (loadingFailed || statsLoadingFailed) {

0 commit comments

Comments
 (0)