Skip to content

Commit be12b37

Browse files
committed
refactor: improve eslint configs in website and examples
1 parent 0f025ae commit be12b37

File tree

10 files changed

+143
-143
lines changed

10 files changed

+143
-143
lines changed

examples/next-app/eslint.config.mjs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,39 @@ import react from "@eslint-react/eslint-plugin";
55
import reactHooks from "eslint-plugin-react-hooks";
66
import gitignore from "eslint-config-flat-gitignore";
77

8+
const GLOB_TS = ["**/*.{ts,tsx}"];
9+
const GLOB_JS = ["**/*.{js,cjs,mjs}"];
10+
const GLOB_APP = ["app/**/*.{js,ts,jsx,tsx}"];
11+
const GLOB_CONFIG = ["**/*.config.{js,mjs,cjs,ts,tsx}"];
12+
813
export default tseslint.config(
914
js.configs.recommended,
10-
...tseslint.configs.recommendedTypeChecked,
1115
{
16+
files: GLOB_TS,
17+
extends: [
18+
tseslint.configs.recommendedTypeChecked,
19+
],
1220
languageOptions: {
21+
parser: tseslint.parser,
1322
parserOptions: {
1423
project: "./tsconfig.json",
1524
tsconfigRootDir: import.meta.dirname,
1625
},
1726
},
18-
rules: {
19-
"no-undef": "off",
20-
},
2127
},
2228
{
23-
files: ["**/*.{ts,tsx}"],
29+
files: GLOB_TS,
2430
...react.configs.recommended,
2531
},
2632
{
27-
files: ["**/*.{ts,tsx}"],
33+
files: GLOB_TS,
2834
plugins: {
2935
"react-hooks": reactHooks,
3036
},
3137
rules: reactHooks.configs.recommended.rules,
3238
},
3339
{
34-
files: ["**/*.{ts,tsx}"],
40+
files: GLOB_TS,
3541
plugins: {
3642
"@next/next": next,
3743
},
@@ -41,23 +47,19 @@ export default tseslint.config(
4147
},
4248
},
4349
{
44-
files: ["app/**/*.{js,ts,jsx,tsx}"],
50+
files: GLOB_APP,
4551
rules: {
4652
"@typescript-eslint/require-await": "off",
4753
},
4854
},
4955
{
50-
files: ["*.js", "*.cjs"],
51-
...tseslint.configs.disableTypeChecked,
52-
},
53-
{
54-
files: ["*.js", "*.cjs"],
56+
files: [...GLOB_JS, ...GLOB_CONFIG],
57+
extends: [
58+
tseslint.configs.disableTypeChecked,
59+
],
5560
rules: {
5661
"@typescript-eslint/no-require-imports": "off",
5762
},
5863
},
5964
gitignore(),
60-
{
61-
ignores: ["*.config.mjs"],
62-
},
6365
);
Lines changed: 21 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,31 @@
1-
// @ts-check
2-
3-
import react from "@eslint-react/eslint-plugin";
41
import js from "@eslint/js";
5-
import reactHooks from "eslint-plugin-react-hooks";
6-
import reactRefresh from "eslint-plugin-react-refresh";
72
import tseslint from "typescript-eslint";
3+
import react from "@eslint-react/eslint-plugin";
4+
import reactHooks from "eslint-plugin-react-hooks";
5+
import gitignore from "eslint-config-flat-gitignore";
86

9-
const GLOB_JS = ["*.{js,jsx,cjs,mjs}", "**/*.{js,jsx,cjs,mjs}"];
10-
const GLOB_TS = ["*.{ts,tsx,cts,mts}", "**/*.{ts,tsx,cts,mts}"];
11-
const GLOB_TEST = [
12-
"**/*.spec.{ts,tsx,cts,mts}",
13-
"**/*.test.{ts,tsx,cts,mts}",
14-
"**/spec.{ts,tsx,cts,mts}",
15-
"**/test.{ts,tsx,cts,mts}",
16-
];
17-
const GLOB_CONFIG = ["*.config.{ts,tsx,cts,mts}", "**/*.config.{ts,tsx,cts,mts}"];
18-
const GLOB_SCRIPT = ["scripts/**/*.{ts,cts,mts}"];
7+
const GLOB_TS = ["**/*.{ts,tsx}"];
8+
const GLOB_JS = ["**/*.{js,cjs,mjs}"];
9+
const GLOB_CONFIG = ["**/*.config.{js,mjs,cjs,ts,tsx}"];
1910

20-
export default [
21-
{
22-
ignores: [
23-
"node_modules",
24-
"dist",
25-
"benchmark",
26-
"eslint.config.mjs",
27-
"eslint.config.d.ts",
28-
],
29-
},
11+
export default tseslint.config(
3012
js.configs.recommended,
31-
...tseslint.configs.recommendedTypeChecked,
3213
{
14+
files: GLOB_TS,
15+
extends: [
16+
tseslint.configs.recommendedTypeChecked,
17+
],
3318
languageOptions: {
19+
parser: tseslint.parser,
3420
parserOptions: {
35-
projectService: true,
21+
project: "./tsconfig.json",
3622
tsconfigRootDir: import.meta.dirname,
3723
},
3824
},
3925
},
4026
{
4127
files: GLOB_TS,
42-
...react.configs["recommended-type-checked"],
28+
...react.configs.recommended,
4329
},
4430
{
4531
files: GLOB_TS,
@@ -49,35 +35,13 @@ export default [
4935
rules: reactHooks.configs.recommended.rules,
5036
},
5137
{
52-
files: ["src/**/*.tsx"],
53-
plugins: {
54-
"react-refresh": reactRefresh,
55-
},
38+
files: [...GLOB_JS, ...GLOB_CONFIG],
39+
extends: [
40+
tseslint.configs.disableTypeChecked,
41+
],
5642
rules: {
57-
"react-refresh/only-export-components": "warn",
58-
},
59-
},
60-
{
61-
files: ["*.config.{js,cjs,mjs,ts,cts,mts}", "*.d.ts"],
62-
languageOptions: {
63-
parserOptions: {
64-
project: "./tsconfig.node.json",
65-
projectService: false,
66-
tsconfigRootDir: import.meta.dirname,
67-
},
68-
},
69-
},
70-
{
71-
files: [...GLOB_TEST, ...GLOB_CONFIG, ...GLOB_SCRIPT],
72-
languageOptions: {
73-
parserOptions: {
74-
project: "./tsconfig.node.json",
75-
projectService: false,
76-
},
43+
"@typescript-eslint/no-require-imports": "off",
7744
},
7845
},
79-
{
80-
files: GLOB_JS,
81-
...tseslint.configs.disableTypeChecked,
82-
},
83-
];
46+
gitignore(),
47+
);

examples/react-router-app/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"autoprefixer": "^10.4.20",
2929
"cross-env": "^7.0.3",
3030
"eslint": "^9.17.0",
31+
"eslint-config-flat-gitignore": "^0.3.0",
3132
"eslint-plugin-react-hooks": "5.1.0",
3233
"eslint-plugin-react-refresh": "0.4.16",
3334
"eslint-plugin-vitest": "0.5.4",

examples/tsup-lib/eslint.config.mjs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import tseslint from "typescript-eslint";
88

99
const GLOB_JS = ["*.{js,jsx,cjs,mjs}", "**/*.{js,jsx,cjs,mjs}"];
1010
const GLOB_TS = ["*.{ts,tsx,cts,mts}", "**/*.{ts,tsx,cts,mts}"];
11+
const GLOB_SRC = [...GLOB_JS, ...GLOB_TS].map((pattern) => `src/${pattern}`);
1112
const GLOB_TEST = [
1213
"**/*.spec.{ts,tsx,cts,mts}",
1314
"**/*.test.{ts,tsx,cts,mts}",
@@ -28,21 +29,31 @@ export default [
2829
],
2930
},
3031
js.configs.recommended,
31-
...tseslint.configs.recommendedTypeChecked,
3232
{
33+
files: GLOB_TS,
34+
extends: [
35+
tseslint.configs.recommended,
36+
],
37+
},
38+
{
39+
files: GLOB_SRC,
40+
extends: [
41+
tseslint.configs.recommendedTypeChecked,
42+
],
3343
languageOptions: {
44+
parser: tseslint.parser,
3445
parserOptions: {
35-
projectService: true,
46+
project: "./tsconfig.json",
3647
tsconfigRootDir: import.meta.dirname,
3748
},
3849
},
3950
},
4051
{
41-
files: GLOB_TS,
52+
files: GLOB_SRC,
4253
...react.configs["recommended-type-checked"],
4354
},
4455
{
45-
files: GLOB_TS,
56+
files: GLOB_SRC,
4657
plugins: {
4758
"react-hooks": reactHooks,
4859
},
@@ -58,26 +69,18 @@ export default [
5869
},
5970
},
6071
{
61-
files: ["*.config.{js,cjs,mjs,ts,cts,mts}", "*.d.ts"],
72+
files: [...GLOB_TEST, ...GLOB_CONFIG, ...GLOB_SCRIPT, "*.d.ts"],
6273
languageOptions: {
6374
parserOptions: {
6475
project: "./tsconfig.node.json",
6576
projectService: false,
66-
tsconfigRootDir: import.meta.dirname,
6777
},
6878
},
6979
},
7080
{
71-
files: [...GLOB_TEST, ...GLOB_CONFIG, ...GLOB_SCRIPT],
72-
languageOptions: {
73-
parserOptions: {
74-
project: "./tsconfig.node.json",
75-
projectService: false,
76-
},
77-
},
78-
},
79-
{
80-
files: GLOB_JS,
81-
...tseslint.configs.disableTypeChecked,
81+
files: [...GLOB_JS, ...GLOB_CONFIG],
82+
extends: [
83+
tseslint.configs.disableTypeChecked,
84+
],
8285
},
8386
];
Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
// @ts-check
2-
31
import js from "@eslint/js";
42
import tseslint from "typescript-eslint";
53
import react from "@eslint-react/eslint-plugin";
64
import reactHooks from "eslint-plugin-react-hooks";
75
import reactRefresh from "eslint-plugin-react-refresh";
86

9-
export default [
7+
const GLOB_JS = ["*.{js,jsx,cjs,mjs}", "**/*.{js,jsx,cjs,mjs}"];
8+
const GLOB_TS = ["*.{ts,tsx,cts,mts}", "**/*.{ts,tsx,cts,mts}"];
9+
const GLOB_SRC = [...GLOB_JS, ...GLOB_TS].map((pattern) => `src/${pattern}`);
10+
const GLOB_CONFIG = ["*.config.{ts,tsx,cts,mts}", "**/*.config.{ts,tsx,cts,mts}"];
11+
12+
export default tseslint.config(
1013
{
1114
ignores: [
1215
"node_modules",
@@ -16,28 +19,38 @@ export default [
1619
],
1720
},
1821
js.configs.recommended,
19-
...tseslint.configs.recommendedTypeChecked,
2022
{
23+
files: GLOB_TS,
24+
extends: [
25+
tseslint.configs.recommended,
26+
],
27+
},
28+
{
29+
files: GLOB_SRC,
30+
extends: [
31+
tseslint.configs.recommendedTypeChecked,
32+
],
2133
languageOptions: {
34+
parser: tseslint.parser,
2235
parserOptions: {
23-
projectService: true,
36+
project: "./tsconfig.json",
2437
tsconfigRootDir: import.meta.dirname,
2538
},
2639
},
2740
},
2841
{
29-
files: ["src/**/*.{ts,tsx}"],
30-
...react.configs["recommended-type-checked"],
31-
},
32-
{
33-
files: ["src/**/*.{ts,tsx}"],
42+
files: GLOB_SRC,
3443
plugins: {
3544
"react-hooks": reactHooks,
3645
},
3746
rules: reactHooks.configs.recommended.rules,
3847
},
3948
{
40-
files: ["src/**/*.tsx"],
49+
files: GLOB_SRC,
50+
...react.configs["recommended-type-checked"],
51+
},
52+
{
53+
files: GLOB_SRC,
4154
plugins: {
4255
"react-refresh": reactRefresh,
4356
},
@@ -46,7 +59,10 @@ export default [
4659
},
4760
},
4861
{
49-
files: ["*.config.{js,cjs,mjs,ts,cts,mts}", "*.d.ts"],
62+
files: [...GLOB_JS, ...GLOB_CONFIG],
63+
extends: [
64+
tseslint.configs.disableTypeChecked,
65+
],
5066
languageOptions: {
5167
parserOptions: {
5268
project: "./tsconfig.node.json",
@@ -55,8 +71,4 @@ export default [
5571
},
5672
},
5773
},
58-
{
59-
files: ["*.js"],
60-
...tseslint.configs.disableTypeChecked,
61-
},
62-
];
74+
);

examples/vite-react-dom-babel-app/eslint.config.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import reactHooks from "eslint-plugin-react-hooks";
55
import reactRefresh from "eslint-plugin-react-refresh";
66
import globals from "globals";
77

8+
const GLOB_JS = ["*.{js,jsx,cjs,mjs}", "**/*.{js,jsx,cjs,mjs}"];
9+
const GLOB_SRC = GLOB_JS.map((pattern) => `src/${pattern}`);
10+
811
export default [
912
{
1013
ignores: [
@@ -16,8 +19,7 @@ export default [
1619
},
1720
js.configs.recommended,
1821
{
19-
files: ["src/**/*.{js,jsx}"],
20-
...react.configs["recommended"],
22+
files: GLOB_JS,
2123
languageOptions: {
2224
globals: {
2325
...globals.browser,
@@ -34,14 +36,18 @@ export default [
3436
},
3537
},
3638
{
37-
files: ["src/**/*.{js,jsx}"],
39+
files: GLOB_SRC,
40+
...react.configs.recommended,
41+
},
42+
{
43+
files: GLOB_SRC,
3844
plugins: {
3945
"react-hooks": reactHooks,
4046
},
4147
rules: reactHooks.configs.recommended.rules,
4248
},
4349
{
44-
files: ["src/**/*.{js,jsx}"],
50+
files: GLOB_SRC,
4551
plugins: {
4652
"react-refresh": reactRefresh,
4753
},

0 commit comments

Comments
 (0)