@@ -3,71 +3,22 @@ import react from 'eslint-plugin-react'
33import reactHooks from 'eslint-plugin-react-hooks'
44import reactRefresh from 'eslint-plugin-react-refresh'
55import globals from 'globals'
6- import tseslint from 'typescript-eslint'
6+ import typescript from 'typescript-eslint'
77
8- /** @type {import('eslint').Linter.Config.RulesRecord } */
9- const sharedJsRules = {
10- 'arrow-spacing' : 'error' ,
11- camelcase : 'off' ,
12- 'comma-spacing' : 'error' ,
13- 'comma-dangle' : [ 'error' , 'always-multiline' ] ,
14- 'eol-last' : 'error' ,
15- eqeqeq : 'error' ,
16- 'func-style' : [ 'error' , 'declaration' ] ,
17- indent : [ 'error' , 2 ] ,
18- 'no-constant-condition' : 'off' ,
19- 'no-extra-parens' : 'error' ,
20- 'no-multi-spaces' : 'error' ,
21- 'no-multiple-empty-lines' : [ 'error' , { max : 1 , maxEOF : 0 } ] ,
22- 'no-trailing-spaces' : 'error' ,
23- 'no-unused-vars' : 'off' ,
24- 'no-useless-concat' : 'error' ,
25- 'no-useless-rename' : 'error' ,
26- 'no-useless-return' : 'error' ,
27- 'no-var' : 'error' ,
28- 'object-curly-spacing' : [ 'error' , 'always' ] ,
29- 'prefer-const' : 'warn' ,
30- 'prefer-destructuring' : [ 'warn' , {
31- object : true ,
32- array : false ,
33- } ] ,
34- 'prefer-promise-reject-errors' : 'error' ,
35- quotes : [ 'error' , 'single' ] ,
36- 'require-await' : 'warn' ,
37- semi : [ 'error' , 'never' ] ,
38-
39- 'sort-imports' : [ 'error' , {
40- ignoreDeclarationSort : true ,
41- ignoreMemberSort : false ,
42- memberSyntaxSortOrder : [ 'none' , 'all' , 'multiple' , 'single' ] ,
43- } ] ,
44-
45- 'space-infix-ops' : 'error' ,
46- }
47-
48- /** @type {import('eslint').Linter.Config.RulesRecord } */
49- const sharedTsRules = {
50- '@typescript-eslint/restrict-template-expressions' : 'off' ,
51- '@typescript-eslint/no-unused-vars' : 'warn' ,
52- '@typescript-eslint/require-await' : 'warn' ,
53- }
54-
55- export default tseslint . config (
56- { ignores : [ 'coverage/' , 'dist/' , 'lib/' , 'packages/' ] } ,
8+ export default typescript . config (
9+ { ignores : [ 'coverage/' , 'dist/' , 'lib/' ] } ,
5710 {
58- settings : { react : { version : '18.3' } } ,
59- extends : [ javascript . configs . recommended , ...tseslint . configs . strictTypeChecked , ...tseslint . configs . stylisticTypeChecked ] ,
11+ extends : [ javascript . configs . recommended , ...typescript . configs . strictTypeChecked , ...typescript . configs . stylisticTypeChecked ] ,
6012 files : [ '**/*.{ts,tsx,js}' ] ,
6113 languageOptions : {
62- ecmaVersion : 2020 ,
6314 globals : globals . browser ,
6415 parserOptions : {
6516 project : [ './tsconfig.json' , './tsconfig.eslint.json' ] ,
6617 tsconfigRootDir : import . meta. dirname ,
6718 } ,
6819 } ,
6920 plugins : {
70- 'react' : react ,
21+ react,
7122 'react-hooks' : reactHooks ,
7223 'react-refresh' : reactRefresh ,
7324 } ,
@@ -80,11 +31,55 @@ export default tseslint.config(
8031 { allowConstantExport : true } ,
8132 ] ,
8233 ...javascript . configs . recommended . rules ,
83- ...tseslint . configs . recommended . rules ,
84- ...sharedJsRules ,
85- ...sharedTsRules ,
86- 'no-extra-parens' : 'warn' ,
34+ ...typescript . configs . recommended . rules ,
35+ // javascript
36+ 'arrow-spacing' : 'error' ,
37+ camelcase : 'off' ,
38+ 'comma-spacing' : 'error' ,
39+ 'comma-dangle' : [ 'error' , {
40+ arrays : 'always-multiline' ,
41+ objects : 'always-multiline' ,
42+ imports : 'always-multiline' ,
43+ exports : 'always-multiline' ,
44+ functions : 'never' ,
45+ } ] ,
46+ 'eol-last' : 'error' ,
47+ eqeqeq : 'error' ,
48+ 'func-style' : [ 'error' , 'declaration' ] ,
49+ indent : [ 'error' , 2 ] ,
50+ 'no-constant-condition' : 'off' ,
51+ 'no-extra-parens' : 'error' ,
52+ 'no-multi-spaces' : 'error' ,
53+ 'no-multiple-empty-lines' : [ 'error' , { max : 1 , maxEOF : 0 } ] ,
54+ 'no-trailing-spaces' : 'error' ,
55+ // 'no-undef': 'error',
56+ 'no-unused-vars' : 'off' ,
57+ 'no-useless-concat' : 'error' ,
58+ 'no-useless-rename' : 'error' ,
59+ 'no-useless-return' : 'error' ,
60+ 'no-var' : 'error' ,
61+ 'object-curly-spacing' : [ 'error' , 'always' ] ,
62+ 'prefer-const' : 'warn' ,
63+ 'prefer-destructuring' : [ 'warn' , {
64+ object : true ,
65+ array : false ,
66+ } ] ,
67+ 'prefer-promise-reject-errors' : 'error' ,
68+ quotes : [ 'error' , 'single' ] ,
69+ 'require-await' : 'warn' ,
70+ semi : [ 'error' , 'never' ] ,
71+ 'sort-imports' : [ 'error' , {
72+ ignoreDeclarationSort : true ,
73+ ignoreMemberSort : false ,
74+ memberSyntaxSortOrder : [ 'none' , 'all' , 'multiple' , 'single' ] ,
75+ } ] ,
76+ 'space-infix-ops' : 'error' ,
77+ // typescript
78+ '@typescript-eslint/restrict-template-expressions' : 'off' ,
79+ '@typescript-eslint/no-unused-vars' : 'warn' ,
80+ '@typescript-eslint/require-await' : 'warn' ,
8781 } ,
82+ settings : { react : { version : 'detect' } } ,
8883 } ,
8984 {
9085 files : [ 'test/**/*.{ts,tsx}' , '*.{js,ts}' ] ,
@@ -98,7 +93,7 @@ export default tseslint.config(
9893 } ,
9994 {
10095 files : [ '**/*.js' ] ,
101- ...tseslint . configs . disableTypeChecked ,
96+ ...typescript . configs . disableTypeChecked ,
10297 } ,
10398 {
10499 files : [ 'bin/**/*.js' , 'test/bin/**/*.js' ] ,
@@ -107,5 +102,5 @@ export default tseslint.config(
107102 ...globals . node ,
108103 } ,
109104 } ,
110- } ,
105+ }
111106)
0 commit comments