@@ -3,11 +3,10 @@ module.exports = {
33 'airbnb-base' ,
44 'prettier' , // eslint-config-prettier 处理冲突
55 'plugin:react/recommended' ,
6- 'plugin:import/typescript' ,
76 'plugin:@typescript-eslint/recommended' ,
87 ] ,
98 parser : '@typescript-eslint/parser' ,
10- plugins : [ '@typescript-eslint' , 'react-hooks' ] ,
9+ plugins : [ '@typescript-eslint' , 'react-hooks' , 'simple-import-sort' ] ,
1110 env : {
1211 browser : true ,
1312 node : true ,
@@ -27,32 +26,17 @@ module.exports = {
2726 } ,
2827 } ,
2928 rules : {
29+ 'no-console' : [
30+ 'warn' ,
31+ {
32+ allow : [ 'info' , 'warn' , 'error' ] ,
33+ } ,
34+ ] ,
35+
36+ // code style config
37+ 'no-param-reassign' : 'off' ,
38+ 'guard-for-in' : 'off' ,
3039 'no-use-before-define' : 'off' ,
31- '@typescript-eslint/explicit-module-boundary-types' : 'off' ,
32- '@typescript-eslint/ban-types' : 'off' ,
33- '@typescript-eslint/explicit-function-return-type' : 'off' ,
34- '@typescript-eslint/indent' : [ 'off' , 2 ] ,
35- '@typescript-eslint/ban-ts-comment' : 'off' ,
36- '@typescript-eslint/camelcase' : 'off' ,
37- '@typescript-eslint/no-empty-interface' : 'error' , // codecc
38- '@typescript-eslint/no-explicit-any' : 'off' ,
39- '@typescript-eslint/no-use-before-define' : [ 'error' , { functions : false } ] ,
40- '@typescript-eslint/no-var-requires' : 'off' ,
41- '@typescript-eslint/no-unused-vars' : 'error' , // codecc
42- 'import/order' : 'error' ,
43- 'import/extensions' : 'off' ,
44- 'import/no-named-as-default' : 'off' ,
45- 'import/prefer-default-export' : 'off' ,
46- 'import/no-extraneous-dependencies' : 'off' ,
47- 'import/no-cycle' : 'off' , // TODO: turn on this rule later
48- 'import/no-unresolved' : 'off' , // TODO: turn on this rule later
49- 'react/display-name' : 'off' ,
50- 'react-hooks/exhaustive-deps' : 'warn' ,
51- 'react-hooks/rules-of-hooks' : 'error' ,
52- 'react/prop-types' : 'off' ,
53- 'max-len' : 'off' ,
54- 'no-shadow' : 'off' ,
55- 'no-console' : [ 'warn' , { allow : [ 'warn' , 'error' ] } ] ,
5640 'no-throw-literal' : 'off' ,
5741 'no-unused-expressions' : 'off' ,
5842 'no-bitwise' : 'off' ,
@@ -68,7 +52,7 @@ module.exports = {
6852 'no-restricted-syntax' : 'off' ,
6953 'no-restricted-globals' : 'off' ,
7054 'no-unneeded-ternary' : 'off' ,
71- 'eol-last' : 'error' , // codecc
55+ 'eol-last' : 'error' ,
7256 'func-names' : 'off' ,
7357 'consistent-return' : 'off' ,
7458 'default-case' : 'off' ,
@@ -83,6 +67,70 @@ module.exports = {
8367 ] ,
8468 } ,
8569 ] ,
70+ 'max-len' : 'off' ,
71+ 'no-shadow' : 'off' ,
72+
73+ // import config
74+ 'import/order' : 'off' ,
75+ 'import/extensions' : 'off' ,
76+ 'import/no-named-as-default' : 'off' ,
77+ 'import/prefer-default-export' : 'off' ,
78+ 'import/no-extraneous-dependencies' : 'off' ,
79+ 'import/no-cycle' : 'off' ,
80+ 'import/no-unresolved' : 'off' ,
81+ 'import/no-relative-packages' : 'off' ,
82+ 'simple-import-sort/imports' : [
83+ 'error' ,
84+ {
85+ groups : [
86+ // NodeJS 内置模块
87+ [
88+ '^(assert|buffer|child_process|cluster|console|constants|crypto|dgram|dns|domain|events|fs|http|https|module|net|os|path|punycode|querystring|readline|repl|stream|string_decoder|sys|timers|tls|tty|url|util|vm|zlib)(/.*|$)' ,
89+ ] ,
90+ // 副作用导入(例如 "dotenv/config"
91+ [ '^\\u0000' ] ,
92+ // 第三方包
93+ [ '^react' , '^\\w' , '^@\\w' ] ,
94+ // 内部路径别名
95+ [ '^@/' ] ,
96+ // 相对路径
97+ [ '^\\.' ] ,
98+ // 类型
99+ [ '^react\\u0000$' , '^@?\\w.*\\u0000$' , '^@/.*\\u0000$' , '^\\..*\\u0000$' ] ,
100+ // css
101+ [ '\\.css$' , '\\.less$' ] ,
102+ ] ,
103+ } ,
104+ ] ,
105+ 'simple-import-sort/exports' : 'error' ,
106+
107+ // typescript config
108+ '@typescript-eslint/explicit-module-boundary-types' : 'off' ,
109+ '@typescript-eslint/ban-types' : 'off' ,
110+ '@typescript-eslint/explicit-function-return-type' : 'off' ,
111+ '@typescript-eslint/indent' : [ 'off' , 2 ] ,
112+ '@typescript-eslint/ban-ts-comment' : 'off' ,
113+ '@typescript-eslint/camelcase' : 'off' ,
114+ '@typescript-eslint/no-empty-interface' : 'error' ,
115+ '@typescript-eslint/no-explicit-any' : 'off' ,
116+ '@typescript-eslint/no-use-before-define' : [ 'error' , { functions : false } ] ,
117+ '@typescript-eslint/no-var-requires' : 'off' ,
118+ '@typescript-eslint/no-unused-vars' : 'error' ,
119+ 'import/consistent-type-specifier-style' : [ 'error' , 'prefer-top-level' ] ,
120+ '@typescript-eslint/consistent-type-imports' : [
121+ 'error' ,
122+ {
123+ prefer : 'type-imports' ,
124+ fixStyle : 'separate-type-imports' ,
125+ disallowTypeAnnotations : false ,
126+ } ,
127+ ] ,
128+
129+ // react config
130+ 'react/display-name' : 'off' ,
131+ 'react-hooks/exhaustive-deps' : 'warn' ,
132+ 'react-hooks/rules-of-hooks' : 'error' ,
133+ 'react/prop-types' : 'off' ,
86134 } ,
87135 overrides : [
88136 {
0 commit comments