Skip to content

Commit 1d18d28

Browse files
authored
Upgrade Eslint to v9 (#89)
* upgrade eslint to v9 * prettier * one more thing * remove unnecessary packages * tests modified
1 parent d13cd87 commit 1d18d28

File tree

10 files changed

+533
-496
lines changed

10 files changed

+533
-496
lines changed

.eslintrc.yml

Lines changed: 0 additions & 148 deletions
This file was deleted.

eslint.config.js

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
import { globalIgnores } from "eslint/config";
2+
import eslint from "@eslint/js";
3+
import jsxA11y from "eslint-plugin-jsx-a11y";
4+
import reactPlugin from "eslint-plugin-react";
5+
import tseslint from "typescript-eslint";
6+
import reactHooks from "eslint-plugin-react-hooks";
7+
import testingLibrary from "eslint-plugin-testing-library";
8+
import checkFile from "eslint-plugin-check-file";
9+
export default [
10+
globalIgnores(["build/**/*"]),
11+
{
12+
...eslint.configs.recommended,
13+
},
14+
...tseslint.config(
15+
{
16+
files: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"],
17+
settings: {
18+
react: { version: "detect" },
19+
},
20+
languageOptions: {
21+
ecmaVersion: "latest",
22+
sourceType: "module",
23+
parserOptions: {
24+
projectService: true,
25+
tsconfigRootDir: import.meta.dirname,
26+
},
27+
},
28+
extends: [
29+
eslint.configs.recommended,
30+
tseslint.configs.recommendedTypeChecked,
31+
reactPlugin.configs.flat?.recommended,
32+
jsxA11y.flatConfigs.recommended,
33+
reactHooks.configs["recommended-latest"],
34+
testingLibrary.configs["flat/react"],
35+
],
36+
37+
rules: {
38+
"react/react-in-jsx-scope": "off",
39+
"array-callback-return": ["error", { allowImplicit: true }],
40+
"no-await-in-loop": "error",
41+
"no-constant-binary-expression": "error",
42+
"no-constructor-return": "error",
43+
"no-duplicate-imports": "off",
44+
"no-new-native-nonconstructor": "error",
45+
"no-promise-executor-return": "error",
46+
"no-self-compare": "error",
47+
"no-template-curly-in-string": "error",
48+
"no-unmodified-loop-condition": "error",
49+
"no-unreachable-loop": "error",
50+
"no-unused-private-class-members": "error",
51+
"no-use-before-define": "off",
52+
"require-atomic-updates": "error",
53+
"arrow-body-style": ["error", "as-needed"],
54+
"block-scoped-var": "error",
55+
camelcase: [
56+
"error",
57+
{ properties: "never", ignoreDestructuring: false },
58+
],
59+
"consistent-return": "off",
60+
"consistent-this": "error",
61+
"dot-notation": ["error", { allowKeywords: true }],
62+
eqeqeq: "error",
63+
"guard-for-in": "error",
64+
"init-declarations": "error",
65+
"logical-assignment-operators": "error",
66+
"new-cap": "error",
67+
"no-alert": "warn",
68+
"no-array-constructor": "error",
69+
"no-bitwise": "warn",
70+
"no-caller": "error",
71+
"no-console": "warn",
72+
"no-div-regex": "error",
73+
"no-else-return": "error",
74+
"no-empty-static-block": "error",
75+
"no-eq-null": "error",
76+
"no-eval": "error",
77+
"no-extend-native": "error",
78+
"no-extra-bind": "error",
79+
"no-extra-label": "error",
80+
"no-implicit-coercion": ["error", { allow: ["!!"] }],
81+
"no-implicit-globals": "error",
82+
"no-implied-eval": "error",
83+
"no-invalid-this": "off",
84+
"no-iterator": "error",
85+
"no-label-var": "error",
86+
"no-labels": "error",
87+
"no-lone-blocks": "error",
88+
"no-lonely-if": "error",
89+
"no-loop-func": "off",
90+
"no-multi-assign": "error",
91+
"no-new": "error",
92+
"no-new-func": "error",
93+
"no-new-wrappers": "error",
94+
"no-object-constructor": "error",
95+
"no-param-reassign": "error",
96+
"no-proto": "error",
97+
"no-return-assign": "error",
98+
"no-script-url": "error",
99+
"no-sequences": "error",
100+
"no-shadow": "off",
101+
"no-throw-literal": "error",
102+
"no-unneeded-ternary": "error",
103+
"no-unused-expressions": "error",
104+
"no-useless-call": "error",
105+
"no-useless-computed-key": "error",
106+
"no-useless-concat": "error",
107+
"no-useless-constructor": "error",
108+
"no-useless-rename": "error",
109+
"no-useless-return": "error",
110+
"no-var": "error",
111+
"no-void": "error",
112+
"no-with": "error",
113+
"object-shorthand": "error",
114+
"prefer-arrow-callback": "error",
115+
"prefer-const": "error",
116+
"prefer-exponentiation-operator": "error",
117+
"prefer-numeric-literals": "error",
118+
"prefer-promise-reject-errors": "error",
119+
"prefer-regex-literals": "error",
120+
"prefer-template": "error",
121+
radix: "error",
122+
"require-await": "error",
123+
"require-yield": "error",
124+
yoda: "error",
125+
"@typescript-eslint/consistent-return": "error",
126+
"@typescript-eslint/consistent-type-exports": "error",
127+
"@typescript-eslint/consistent-type-imports": "error",
128+
"@typescript-eslint/default-param-last": "error",
129+
"@typescript-eslint/member-ordering": "error",
130+
"@typescript-eslint/no-confusing-void-expression": "error",
131+
"@typescript-eslint/no-empty-interface": "error",
132+
"@typescript-eslint/no-invalid-this": "error",
133+
"@typescript-eslint/no-loop-func": "error",
134+
"@typescript-eslint/no-shadow": "error",
135+
"@typescript-eslint/no-use-before-define": "error",
136+
"@typescript-eslint/no-useless-empty-export": "error",
137+
"@typescript-eslint/no-var-requires": "error",
138+
},
139+
},
140+
{
141+
files: ["**/*.js"],
142+
extends: [tseslint.configs.disableTypeChecked],
143+
},
144+
),
145+
146+
{
147+
files: ["src/**/*.*"],
148+
plugins: {
149+
"check-file": checkFile,
150+
},
151+
rules: {
152+
"check-file/no-index": "off", // we don't want to use this rule for now
153+
"check-file/filename-naming-convention": [
154+
"error",
155+
{ "**/*.{jsx,tsx,ts,js}": "KEBAB_CASE" },
156+
{ ignoreMiddleExtensions: true },
157+
],
158+
"check-file/folder-naming-convention": [
159+
"error",
160+
{ "src/**/": "KEBAB_CASE" },
161+
],
162+
},
163+
ignores: ["**/*.css", "**/*.svg"],
164+
},
165+
];

0 commit comments

Comments
 (0)