-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path.eslintrc.json
731 lines (728 loc) · 19 KB
/
.eslintrc.json
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
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
/**
"off"或者0 //关闭规则
"warn"或者1 //在打开的规则作为警告(不影响退出代码)
"error"或者2 //把规则作为一个错误(退出代码触发时为1
**/
{
// 全局变量
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true,
"worker": true,
"jquery": true
},
"extends": [
"react-app",
"eslint:recommended",
"plugin:react/recommended"
],
//排除特点的规则检测
"overrides": [
{
"files": [
"*.tsx"
],
"rules": {
//react的缩进规则
"react/jsx-indent-props": "off",
//一个缩进必须用四个空格替代, switch语句里面的case 2个空格
"indent": "off"
}
}
],
"parserOptions": {
"parser": "babel-eslint",
"ecmaFeatures": {
// 启用对实验性的 object rest/spread properties 的支持。
"experimentalObjectRestSpread": true,
"jsx": true,
"globalReturn": false,
// 启用全局 strict mode
"impliedStrict": true
},
// 设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。
"sourceType": "module",
// 设置为 3, 5 (默认), 6、7 或 8 指定你想要使用的 ECMAScript 版本。你也可以指定为 2015(同 6),2016(同 7),或 2017(同 8)使用年份命名
"ecmaVersion": 7
},
"plugins": [
],
"rules": {
/*
* ------------------------------------------------
* Possible Errors
* 以下规则与 JavaScript 代码中可能的错误或逻辑错误有关
* ------------------------------------------------
*/
//react 相关配置项
"react/forbid-prop-types": [
0
],
"react/jsx-filename-extension": [
1,
{
"extensions": [
".tsx",
".ts"
]
}
],
//JSX中不允许使用箭头函数和bind
"react/jsx-no-bind": [
"off"
],
"react/jsx-indent": [
2,
4
],
//react的缩进规则
"react/jsx-indent-props": [
"error",
4
],
//reactkey是否必须填写
"react/jsx-key": "off",
//blank
"react/jsx-no-target-blank": "off",
//防止在React组件定义中丢失displayName
"react/display-name": "off",
"react/no-unescaped-entities": "off",
//防止反应被错误地标记为未使用
"react/jsx-uses-react": "error",
//防止在JSX中使用的变量被错误地标记为未使用
"react/jsx-uses-vars": "error",
//禁止某些propTypes 启用写法 "react/forbid-prop-types": [2, {"forbid": ["any"]}]
"react/prop-types": [
"off"
],
//在JSX中强制布尔属性符号
"react/jsx-boolean-value": [
"error",
"always",
{
"never": [
"personal"
]
}
],
//在JSX中验证右括号位置
"react/jsx-closing-bracket-location": "off",
"react/prefer-stateless-function": [
0
],
"react/jsx-wrap-multilines": [
"warn",
{
"declaration": "parens-new-line",
"assignment": "parens-new-line",
"return": "parens-new-line",
"arrow": "parens-new-line",
"condition": "parens-new-line",
"logical": "parens-new-line",
"prop": "ignore"
}
],
"react/jsx-curly-spacing": [
2,
{
"when": "never",
"children": true
}
],
//在JSX属性和表达式中加强或禁止大括号内的空格。
"react/jsx-max-props-per-line": [
"off",
{
"maximum": 1
}
],
"react/jsx-no-duplicate-props": 2,
//防止在JSX中重复的props
"react/jsx-no-literals": "off",
//防止使用未包装的JSX字符串
"react/jsx-no-undef": 1,
//在JSX中禁止未声明的变量
"react/jsx-pascal-case": "off",
//为用户定义的JSX组件强制使用PascalCase
"react/jsx-sort-props": "off",
//强化props按字母排序
"react/no-danger": "off",
//防止使用危险的JSX属性
"react/no-did-mount-set-state": 0,
//防止在componentDidMount中使用setState
"react/no-did-update-set-state": 1,
//防止在componentDidUpdate中使用setState
"react/no-direct-mutation-state": 2,
//防止this.state的直接变异
"react/no-multi-comp": "off",
//防止每个文件有多个组件定义
"react/no-set-state": 0,
//防止使用setState
"react/no-unknown-property": 2,
//防止使用未知的DOM属性
"react/prefer-es6-class": 2,
//防止在React组件定义中丢失props验证
"react/react-in-jsx-scope": 2,
//使用JSX时防止丢失React
"react/self-closing-comp": 0,
//防止没有children的组件的额外结束标签
"react/sort-comp": "off",
//强制组件方法顺序
"no-extra-boolean-cast": 0,
//禁止不必要的bool转换
"react/no-array-index-key": 0,
//防止在数组中遍历中使用数组key做索引
"react/no-deprecated": "warn",
//不使用弃用的方法
"react/jsx-equals-spacing": 2,
//在JSX属性中强制或禁止等号周围的空格
"jsx-a11y/no-static-element-interactions": [
0
],
"jsx-a11y/no-noninteractive-element-interactions": [
0
],
"jsx-a11y/click-events-have-key-events": [
0
],
"jsx-a11y/anchor-is-valid": [
0
],
"@typescript-eslint/no-namespace": "off",
// 禁止在常规字符串中出现模板字面量占位符语法
"no-template-curly-in-string": 1,
// error; for循转方向出错
"for-direction": 2,
// error; getter必须有返回值,并且禁止返回值为undefined, 比如 return;
"getter-return": [
2,
{
"allowImplicit": false
}
],
// error; 禁止在循环中出现 await
"no-await-in-loop": 2,
// error; 不允许使用console进行代码调试
"no-console": "off",
// error; 不允许使用debugger进行代码调试
"no-debugger": "error",
/*
* ------------------------------------------------
* Best Practices
* 这些规则是关于最佳实践的,帮助你避免一些问题
* ------------------------------------------------
*/
// error; 强制 getter 和 setter 在对象中成对出现
"accessor-pairs": 2,
// off; 对于数据相关操作函数比如reduce, map, filter等,callback必须有return
"array-callback-return": 0,
// error; 把var关键字看成块级作用域,防止变量提升导致的bug
"block-scoped-var": 2,
// error; class this
"class-methods-use-this": 0,
// error; 禁止或强制在计算属性中使用空格
"computed-property-spacing": [
2,
"never"
],
// error; 要求遵循大括号约定
"curly": [
2,
"all"
],
// error; switch case语句里面一定需要default分支
"default-case": 2,
// error; 要求点操作符和属性放在同一行
"dot-location": [
2,
"property"
],
// warn; 推荐.操作符
"dot-notation": [
1,
{
"allowKeywords": false
}
],
// error; === !==
"eqeqeq": 2,
//不建议在{}代码块内部声明变量或函数
"no-inner-declarations": "off",
"no-empty": "off",
// error; 禁止使用看起来像除法的正则表达式
"no-div-regex": 2,
// error; 禁止在 else 前有 return
"no-else-return": 2,
// error; 不允许使用空函数,除非在空函数里面给出注释说明
"no-empty-function": "off",
// error; if (foo === null)
"no-eq-null": "warn",
// error; 代码中不允许使用eval
"no-eval": 2,
// error; 禁止修改原生对象
"no-extend-native": [
2,
{
"exceptions": [
"Object",
"Promise"
]
}
],
// error; 禁止出现没必要的 bind
"no-extra-bind": 2,
// error; 表示小数时,禁止省略 0,比如 .5
"no-floating-decimal": 2,
// error; 强制类型转换
"no-implicit-coercion": [
2,
{
"boolean": false,
"string": false
}
],
// this关键字出现在类和类对象之外
"no-invalid-this": "off",
// error; 禁止使用类似 eval() 的方法
"no-implied-eval": 2,
// error; 禁止使用 __iterator__
"no-iterator": 2,
// error; 禁用标签语句
"no-labels": 2,
// error; 禁止循环中存在函数
"no-loop-func": 2,
// error; 禁止使用没必要的 {} 作为代码块
"no-lone-blocks": 2,
// error; 禁止出现连续的多个空格,除非是注释前,或对齐对象的属性、变量定义、import 等
"no-multi-spaces": [
2,
{
"ignoreEOLComments": true,
"exceptions": {
"Property": true,
"BinaryExpression": false,
"VariableDeclarator": true,
"ImportDeclaration": true
}
}
],
//console 警告
"no-unreachable": "warn",
//禁止不必要的构造函数
"no-useless-constructor": "error",
// error; 禁止多行字符串
"no-multi-str": 2,
// error; 禁止直接 new 一个类而不赋值
"no-new": 2,
// error; 禁止使用 new Function,比如 const expression = new Function("a", "b", "return a + b");
"no-new-func": 2,
// error; 对于JS的原始类型比如String, Number, Boolean等,不允许使用new 操作符
"no-new-wrappers": 2,
// warn; 不推荐对 function 的参数进行重新赋值
"no-param-reassign": "off",
// error; 禁止直接使用__proto__属性,可以使用getPrototypeOf替代
"no-proto": 2,
// error; 禁止在 return 语句中使用赋值语句
"no-return-assign": "warn",
// error; 禁止在 return 语句中使用await
"no-return-await": 2,
// warn; 不推荐逗号操作符
"no-sequences": 1,
// error; 禁止抛出异常字面量
"no-throw-literal": 2,
// error; 禁用一成不变的循环条件
"no-unmodified-loop-condition": 2,
// error; 禁止出现未使用过的表达式
"no-unused-expressions": [
"off",
{
"allowShortCircuit": false,
"allowTernary": false,
"allowTaggedTemplates": false
}
],
// error; 禁止不必要的 .call() 和 .apply()
"no-useless-call": 2,
// error; 禁止出现没必要的字符串拼接,比如 "hello" + "world",可以直接写成"hello world"
"no-useless-concat": 2,
// error; disallow redundant return statements
"no-useless-return": 2,
// 禁用 Alert
"no-alert": "off",
// 禁用 Script URL
"no-script-url": 2,
// error; 对数字使用 parseInt 并且总是带上类型转换的基数
"radix": 2,
// error; async函数里面必须有await
"require-await": 0,
// error; 要求所有的 var 声明出现在它们所在的作用域顶部
"vars-on-top": 2,
//推荐yoda表达式
"yoda": [
"off",
"always"
],
// 需要约束 for-in
"guard-for-in": 2,
/*
* ------------------------------------------------
* Variables
* 这些规则与变量声明有关
* ------------------------------------------------
*/
// error; 禁止 catch 子句的参数与外层作用域中的变量同名
"no-catch-shadow": "error",
// error; 禁止变量声明与外层作用域的变量同名
"no-shadow": "error",
// error; 禁用特定的全局变量
"no-restricted-globals": [
"error",
"event",
"fdescribe"
],
// error; js关键字和保留字不能作为函数名或者变量名
"no-shadow-restricted-names": "error",
// error; 禁止label名称和var相同
"no-label-var": 2,
// 避免变量值为 undefined
"no-undef": "warn",
// error; 避免初始化变量值为 undefined
"no-undef-init": "warn",
// 禁止将undefined当成标志符
"no-undefined": "off",
// error; 变量使用之前必须进行定义,函数除外
"no-use-before-define": [
2,
{
"functions": false
}
],
/*
* ------------------------------------------------
* Stylistic Issues
* 这些规则是关于风格指南的,而且是非常主观的
* ------------------------------------------------
*/
// error; 是否允许非空数组里面有多余的空格
"array-bracket-spacing": [
2,
"never"
],
// warn; 大括号风格
"brace-style": [
1,
"1tbs"
],
// error; 变量命名需要以驼峰命名法,对属性字段不做限制
"camelcase": [
2,
{
"properties": "never"
}
],
// error; 对象字面量项尾不能有逗号
"comma-dangle": [
2,
"never"
],
// error; 逗号风格,换行时在行首还是行尾
"comma-style": [
2,
"last"
],
// error; 当获取当前执行环境的上下文时,强制使用一致的命名
"consistent-this": [
2,
"self",
"that"
],
// error; 函数名和执行它的括号之间禁止有空格
"func-call-spacing": [
2,
"never"
],
// error; 强制一致地使用 function 声明或表达式
"func-style": [
2,
"declaration",
{
"allowArrowFunctions": true
}
],
// error; 一个缩进必须用四个空格替代, switch语句里面的case 2个空格
"indent": [
"error",
4,
{
"SwitchCase": 2
}
],
// error; 对象字面量中冒号前面禁止有空格,后面必须有空格
"key-spacing": [
2,
{
"beforeColon": false,
"afterColon": true,
"mode": "strict"
}
],
// error; 关键字前后必须要加上空格
"keyword-spacing": [
2,
{
"before": true,
"after": true
}
],
// off; 不限制注释位置
"line-comment-position": 0,
// error; 换行符
"linebreak-style": [
"off",
"windows"
],
// warn; 注释前有一空行
"lines-around-comment": [
0,
{
"beforeBlockComment": true,
"beforeLineComment": true
}
],
// error; 强制可嵌套的块的最大深度
"max-depth": [
2,
{
"max": 4
}
],
// warn; 单行最多允许255个字符, 对包含url的行不进行此限制
"max-len": [
1,
{
"code": 255,
"ignoreUrls": true,
"ignoreComments": true,
"ignoreStrings": true,
"ignoreTemplateLiterals": true,
"ignoreRegExpLiterals": true
}
],
// warn; 强制回调函数最大嵌套深度
"max-nested-callbacks": [
2,
{
"max": 3
}
],
//构造函数的必须以大写字母开头
"new-cap": "off",
// error; new 后面类必须带上括号
"new-parens": 2,
// error; 禁止使用 Array 构造函数
"no-array-constructor": 2,
// error; no continue
"no-continue": 2,
// error; 禁止 if 语句作为唯一语句出现在 else 语句块中
"no-lonely-if": 2,
// warn; 不允许多个空行
"no-multiple-empty-lines": [
1,
{
"max": 1
}
],
// error; 禁止使用嵌套的三元表达式
"no-nested-ternary": 2,
// error; 禁用 Object 的构造函数
"no-new-object": 2,
// error; 强制在花括号内使用一致的换行符
"object-curly-newline": [
"off",
{
"multiline": true
}
],
//强制将对象的属性放在不同的行上
"object-property-newline": "off",
// error; 变量申明必须每行一个
"one-var": [
2,
"never"
],
// warn; 变量申明必须每行一个
"one-var-declaration-per-line": [
2,
"always"
],
// error; 换行时运算符在行尾还是行首
"operator-linebreak": [
"off",
"after"
],
//句柄padding
"padding-line-between-statements": [
"off",
{
"blankLine": "always",
"prev": [
"const",
"let",
"var"
],
"next": "*"
},
{
"blankLine": "any",
"prev": [
"const",
"let",
"var"
],
"next": [
"const",
"let",
"var"
]
}
],
// error; 必须使用单引号
"quotes": [
2,
"single",
{
"avoidEscape": true,
"allowTemplateLiterals": true
}
],
// warn; 推荐jsdoc注释
"require-jsdoc": [
1,
{
"require": {
"FunctionDeclaration": true,
"MethodDefinition": false,
"ClassDeclaration": false,
"ArrowFunctionExpression": false
}
}
],
// error; 结尾必须有分号
"semi": [
"off",
"always"
],
// error; 一行有多个语句时,分号前面禁止有空格,分号后面必须有空格
"semi-spacing": [
2,
{
"before": false,
"after": true
}
],
// error; 分号必须写在行尾,禁止在行首出现
"semi-style": [
2,
"last"
],
// error; if, function 等的大括号之前必须要有空格
"space-before-blocks": [
2,
"always"
],
// error; 注释空格
"spaced-comment": [
"off",
"always",
{
"line": {
"markers": [
"/"
],
"exceptions": [
"-",
"+"
]
},
"block": {
"markers": [
"!"
],
"exceptions": [
"*"
],
"balanced": true
}
}
],
// error; case 子句冒号前禁止有空格,冒号后必须有空格
"switch-colon-spacing": [
2,
{
"after": true,
"before": false
}
],
// 链式调用必须换行
"newline-per-chained-call": "warn",
/*
* ------------------------------------------------
* ECMAScript 6
* 这些规则只与 ES6 有关
* ------------------------------------------------
*/
// error; 箭头函数的箭头前后必须有空格
"arrow-spacing": [
2,
{
"before": true,
"after": true
}
],
// error; 禁止import重复模块
"no-duplicate-imports": 2,
// error; 要求使用 let 或 const 而不是 var
"no-var": 2,
// warn; 推荐使用箭头函数作为回调
"prefer-arrow-callback": [
1,
{
"allowNamedFunctions": true
}
],
// error; 使用const
"prefer-const": [
2,
{
"destructuring": "any",
"ignoreReadBeforeAssign": false
}
],
//结构赋值
"prefer-destructuring": [
"off",
{
"array": true,
"object": true
},
{
"enforceForRenamedProperties": false
}
],
// warn; 推荐rest运算符
"prefer-rest-params": 1,
// warn; 推荐扩展运算符
"prefer-spread": 1,
// error; rest 空格
"rest-spread-spacing": [
2,
"never"
],
// error; require symbol description
"symbol-description": 2,
// 禁止在对象中使用不必要的计算属性
"no-useless-computed-key": 1
}
}