-
Notifications
You must be signed in to change notification settings - Fork 74
/
.eslintrc.js
264 lines (263 loc) · 8.66 KB
/
.eslintrc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
require('@rushstack/eslint-patch/modern-module-resolution');
module.exports = {
extends: ['@internal/eslint-config/profile/lib'],
parserOptions: { tsconfigRootDir: __dirname, project: './tsconfig.eslint.json', sourceType: 'module' },
env: {
browser: true,
es2021: true,
node: true,
jest: true,
},
globals: {
__DEV__: 'readonly',
__VERSION__: 'readonly',
NodeJS: true,
},
overrides: [
{
files: ['**/__tests__/**', '**/*.test.ts'],
// 测试文件允许以下规则
rules: {
'@typescript-eslint/no-empty-function': 'off',
'no-console': 'off',
'dot-notation': 'off',
},
},
],
// ignorePatterns: ['bugserver-config'],
rules: {
// "prettier/prettier": ["error"],
// 强制使用 Unix 换行符: \n
'linebreak-style': ['error', 'unix'],
// 强制换行时操作符在行首
// 与prettier冲突
// "operator-linebreak": ["error", "before", { "overrides": { "=": "after" } }],
// 允许给能自动推断出类型的primitive类型变量额外添加类型声明
'@typescript-eslint/no-inferrable-types': 'off',
// 在类型导入时推荐import type写法
'@typescript-eslint/consistent-type-imports': 'warn',
// 禁止出现空接口定义
'@typescript-eslint/no-empty-interface': 'error',
// 禁止出现空函数
'@typescript-eslint/no-empty-function': 'error',
'@typescript-eslint/no-this-alias': 'off',
// 禁止使用namespace
'@typescript-eslint/no-namespace': 'error',
// 禁止使用for-in Array
'@typescript-eslint/no-for-in-array': 'error',
// 禁止在optional chain语句后加非空断言
'@typescript-eslint/no-non-null-asserted-optional-chain': 'error',
// 接口定义中使用函数属性而不是对象方法声明
'@typescript-eslint/method-signature-style': 'error',
// 默认省略除属性以外的public修饰符
'@typescript-eslint/explicit-member-accessibility': [
'warn',
{
overrides: {
accessors: 'off',
constructors: 'no-public',
methods: 'no-public',
properties: 'no-public',
parameterProperties: 'explicit',
},
},
],
'no-console': [
2,
{
allow: ['warn', 'error'],
},
],
// 如果一个变量不会被重新赋值,最好使用const进行声明
'prefer-const': 2,
// 禁止在条件中使用常量表达式
'no-constant-condition': 0,
'no-debugger': 2,
// 禁止对象字面量中出现重复的 key
'no-dupe-keys': 2,
// 禁止在正则表达式中使用空字符集
'no-empty-character-class': 2,
// 禁止对 catch 子句的参数重新赋值
'no-ex-assign': 2,
'no-extra-boolean-cast': 0,
// 禁止对 function 声明重新赋值
'no-func-assign': 2,
// 禁止在嵌套的块中出现变量声明或 function 声明
'no-inner-declarations': 2,
// 禁止 RegExp 构造函数中存在无效的正则表达式字符串
'no-invalid-regexp': 2,
// 禁止对关系运算符的左操作数使用否定操作符
'no-unsafe-negation': 2,
// 禁止把全局对象作为函数调用
'no-obj-calls': 2,
// 禁用稀疏数组
'no-sparse-arrays': 2,
// 禁止在 return、throw、continue 和 break 语句之后出现不可达代码
'no-unreachable': 2,
// 要求使用 isNaN() 检查 NaN
'use-isnan': 2,
// 强制 typeof 表达式与有效的字符串进行比较
'valid-typeof': 2,
// 要求使用 === 和 !==,除了与 null 字面量进行比较时
eqeqeq: [
'error',
'always',
{
null: 'ignore',
},
],
// 允许 if 语句中 return 语句之后有 else 块
'no-else-return': 1,
// 禁用标签语句
'no-labels': [
2,
{
// 忽略循环语句中的标签
allowLoop: true,
},
],
// 禁用 eval()
'no-eval': 2,
// 禁止扩展原生类型
'no-extend-native': 2,
// 禁止不必要的 .bind() 调用
'no-extra-bind': 0,
// 禁止使用类似 eval() 的方法
'no-implied-eval': 2,
// 禁用 __iterator__ 属性
'no-iterator': 2,
// 禁止不规则的空白
'no-irregular-whitespace': 2,
// 禁用不必要的嵌套块
'no-lone-blocks': 2,
// 禁止循环中存在函数
'no-loop-func': 2,
// 禁止多行字符串
'no-multi-str': 2,
// 禁止对原生对象或只读的全局对象进行赋值
'no-global-assign': 2,
// 禁止对 String,Number 和 Boolean 使用 new 操作符
'no-new-wrappers': 2,
// 禁用八进制字面量
'no-octal': 2,
// 禁止在字符串中使用八进制转义序列
'no-octal-escape': 2,
// 禁用 __proto__ 属性
'no-proto': 2,
// 禁止自身比较
'no-self-compare': 2,
// 禁止可以在有更简单的可替代的表达式时使用三元操作符
'no-unneeded-ternary': 2,
// 禁用 with 语句
'no-with': 2,
// 强制在 parseInt() 使用基数参数
radix: 2,
// 要求 IIFE 使用括号括起来
'wrap-iife': [2, 'any'],
// 禁止删除变量
'no-delete-var': 2,
// 禁止 function 定义中出现重名参数
'no-dupe-args': 2,
// 禁止出现重复的 case 标签
'no-duplicate-case': 2,
// 不允许标签与变量同名
'no-label-var': 2,
// 禁止将标识符定义为受限的名字
'no-shadow-restricted-names': 2,
// 禁用未声明的变量,除非它们在 /*global */ 注释中被提到
'no-undef': 2,
// 禁止将变量初始化为 undefined
'no-undef-init': 2,
// 允许在变量定义之前使用它们
'no-use-before-define': 'off',
'@typescript-eslint/no-use-before-define': 0,
// 强制或禁止调用无参构造函数时有圆括号
'new-parens': 2,
// 禁用 Array 构造函数
'no-array-constructor': 2,
// 禁用 Object 的构造函数
'no-new-object': 2,
// 禁止不必要的括号
'no-extra-parens': [2, 'functions'],
// 禁止使用 空格 和 tab 混合缩进
'no-mixed-spaces-and-tabs': 2,
// 强制函数中的变量在分开声明
'one-var': [2, 'never'],
// 建议回调函数最大嵌套深度不超过5
'max-nested-callbacks': [1, 5],
// 建议可嵌套的块的最大深度不超过6
'max-depth': [1, 6],
// 强制一行的最大长度不超过120,不包括注释和url
'max-len': [
'error',
{
code: 120,
ignoreUrls: true,
ignoreComments: true,
},
],
// 建议函数定义中最多允许的参数数量不超过15个
'max-params': [1, 15],
// 强制非一元操作符周围有空格
'space-infix-ops': 2,
// 强制尽可能地使用点号
'dot-notation': [
2,
{
// 避免对是保留字的属性使用点号
allowKeywords: true,
allowPattern: '^catch$',
},
],
// 强制箭头函数的箭头前后使用一致的空格
'arrow-spacing': 2,
// 要求在构造函数中有 super() 的调用
'constructor-super': 2,
// 禁止在可能与比较操作符相混淆的地方使用箭头函数
// 与prettier冲突
// "no-confusing-arrow": [
// 2,
// {
// // 该规则不那么严格,将括号作为有效防止混淆的语法。
// "allowParens": true
// }
// ],
// 禁止修改类声明的变量
'no-class-assign': 2,
// 禁止修改 const 声明的变量
'no-const-assign': 2,
// 允许在构造函数中,在调用 super() 之前使用 this 或 super
'no-this-before-super': 0,
// 要求使用 let 或 const 而不是 var
'no-var': 2,
// 重复模块导入
'no-duplicate-imports': 1,
// 建议使用剩余参数而不是 arguments
'prefer-rest-params': 1,
// 禁止 Unicode 字节顺序标记 (BOM)
'unicode-bom': 2,
// 强制每一行中所允许的最大语句数量为2
'max-statements-per-line': 2,
// 允许不必要的构造函数
'no-useless-constructor': 0,
// 允许在函数标识符和其调用之间有空格
'func-call-spacing': 'off',
'@typescript-eslint/func-call-spacing': 'error',
// 允许出现未使用过的变量
'no-unused-vars': 'off',
'@typescript-eslint/no-unused-vars': [
1,
{
// 仅仅检测本作用域中声明的变量是否使用,允许不使用全局环境中的变量。
vars: 'local',
// 不检查参数
args: 'none',
},
],
// 禁用特定的全局变量
'no-restricted-globals': [2, 'event', 'name', 'length', 'orientation', 'top', 'parent', 'location', 'closed'],
// 不允许省略大括号
curly: 'error',
'promise/catch-or-return': 'warn',
},
};