-
Notifications
You must be signed in to change notification settings - Fork 26
/
.xo-config.cjs
245 lines (224 loc) · 7.6 KB
/
.xo-config.cjs
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
module.exports = {
prettier: true,
plugins: ["i18next", "jsdoc", "solid", "no-autofix"],
extends: ["plugin:solid/typescript", "plugin:jsdoc/recommended"],
ignores: ["*.js", "*.mjs"],
rules: {
// 允许不使用 _ 命名的变量
"@typescript-eslint/no-unused-vars": [
"warn",
{
"args": "all",
"argsIgnorePattern": "_+",
"caughtErrors": "all",
"caughtErrorsIgnorePattern": "_+",
"destructuredArrayIgnorePattern": "_+",
"varsIgnorePattern": "_+",
"ignoreRestSiblings": true
}
],
// 提示使用了 console
"no-console": ["warn", { allow: ["warn", "error"] }],
"no-debugger": "warn",
// 不知道为啥会对 `[...list].at(-1)` 报错
"no-use-extend-native/no-use-extend-native": "off",
// 禁止重新赋值函数参数
"no-param-reassign": "error",
// 禁用 prefer-const 的自动修复
"prefer-const": "off",
"no-autofix/prefer-const": ["warn", { "destructuring": "all" }],
// 不限制代码深度
"max-depth": "off",
// 不限制文件名的大小写样式
"unicorn/filename-case": "off",
// 不限制 import 的扩展名
"import/extensions": "off",
"n/file-extension-in-import": "off",
// 不限制注释首字母大小写
"capitalized-comments": "off",
// 不限制代码复杂性
complexity: "off",
// 不限制函数参数数
"max-params": "off",
// 不强制使用 querySelector
"unicorn/prefer-query-selector": "off",
// 不限制在 switch case 中使用大括号
"unicorn/switch-case-braces": "off",
// 允许直接传递函数给迭代器方法
"unicorn/no-array-callback-reference": "off",
// 允许使用缩写
"unicorn/prevent-abbreviations": "off",
// 允许默认导入变量名称和导入模块名称不同
"import/no-named-as-default": "off",
// 允许在 Promise 中返回值
"no-promise-executor-return": "off",
// 允许在循环中使用 await
"no-await-in-loop": "off",
// 允许使用 js url
"no-script-url": "off",
// 允许 TODO 注释
"no-warning-comments": "off",
// 允许 return await
"no-return-await": "off",
// 允许使用复杂的数组解构
"unicorn/no-unreadable-array-destructuring": "off",
// 允许在相等判断中使用 !
"unicorn/no-negation-in-equality-check": "off",
// structured 无法处理代理对象
"unicorn/prefer-structured-clone": "off",
// 允许默认导出匿名函数
"unicorn/no-anonymous-default-export": "off",
// 允许匿名默认导出
"import/no-anonymous-default-export": "off",
// 允许括号 await
"unicorn/no-await-expression-member": "off",
// import 不同分组之间加上空行
"import/order": ["warn", { "newlines-between": "always" }],
// 使用 process
"n/prefer-global/process": ["error", "always"],
// 禁止变量遮蔽
"no-shadow": ["error", { "ignoreOnInitialization": true, "allow": ["_"] }],
//
// 项目特有的规则
//
// 允许正常调用异步函数并使用 catch
"unicorn/prefer-top-level-await": "off",
// 允许调用大写开头的函数
"new-cap": ["error", { capIsNew: false }],
// 允许未分配导入
"import/no-unassigned-import": "off",
// 不强制使用 addEventListener
"unicorn/prefer-add-event-listener": "off",
// 允许使用 js url
"solid/jsx-no-script-url": "off",
// eslint-plugin-jsdoc 还无法识别出 TS 定义的接口
"jsdoc/no-undefined-types": "off",
// 不强制要求 jsdoc
"jsdoc/require-jsdoc": "off",
// TS 不需要写明类型注释
"jsdoc/require-param-type": "off",
"jsdoc/require-returns-type": "off",
// 允许使用其他的 jsdoc 标签,以便使用 typescript-json-schema
"jsdoc/check-tag-names": "off",
"jsdoc/check-param-names": [
"warn",
{
checkDestructured: false,
disableMissingParamChecks: true,
},
],
// 允许不写返回值
"jsdoc/require-returns": "off",
// 允许有参数不被写明
"jsdoc/require-param": "off",
"solid/reactivity": "off",
"no-restricted-imports": [
"warn",
{
patterns: [
{ group: ["helper/**/*", "!helper/languages"], message: "只能直接通过 helper 导入" },
{ group: ["**/request", "!request"], message: "必须直接导入" },
],
},
],
},
overrides: [
{
files: ["**/*.ts", "**/*.tsx", "**/*.mts"],
rules: {
// 允许在 void 的函数内 return
"@typescript-eslint/no-confusing-void-expression": "off",
// 不限制变量名的大小写样式
"@typescript-eslint/naming-convention": "off",
// 不限制类型断言的方式
"@typescript-eslint/consistent-type-assertions": "off",
// 不限制类型定义的方式
"@typescript-eslint/consistent-type-definitions": "off",
// 不强制使用 for of
"@typescript-eslint/prefer-for-of": "off",
// 不禁止类型
"@typescript-eslint/ban-types": "off",
// 不强制返回 Promise 的函数使用 async
"@typescript-eslint/promise-function-async": "off",
// 不强制换行
"@typescript-eslint/padding-line-between-statements": "off",
// 允许 switch 省略部分值
"@typescript-eslint/switch-exhaustiveness-check": "off",
// 允许浮动 Promise
"@typescript-eslint/no-floating-promises": "off",
// 允许使用空函数
"@typescript-eslint/no-empty-function": "off",
// 允许使用 any
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
// 允许 return await
"@typescript-eslint/return-await": [
"off",
"error-handling-correctness-only",
],
// 在判断类型时允许使用 ||
"@typescript-eslint/prefer-nullish-coalescing": [
"error",
{ ignorePrimitives: true },
],
// 允许短路表达式
"@typescript-eslint/no-unused-expressions": [
"error",
{ allowShortCircuit: true },
],
// 允许使用 require
"unicorn/prefer-module": "off",
"@typescript-eslint/no-require-imports": "off",
"@typescript-eslint/no-var-requires": "off",
"@typescript-eslint/consistent-type-imports": [
"error",
{
// 允许 typeof import
disallowTypeAnnotations: false,
// 使用 内联类型导入
fixStyle: "inline-type-imports",
},
],
},
},
{
files: ["!**/*.stories.tsx"],
rules: {
"i18next/no-literal-string": [
"error",
{
mode: "jsx-only",
"jsx-attributes": { include: ["^name", "children", "textContent"] },
},
],
},
},
{
files: "src/site/**/*",
rules: {
"no-restricted-imports": [
"warn",
{
patterns: [
{
group: [
"*/**/*",
"!solid-js/**/*",
"!components/**/*",
"!userscript/**/*",
"!@material*/**/*",
"../**/*",
"!.*/**/*",
],
message: "只能通过 main 导入",
},
],
},
],
"solid/components-return-once": "off",
},
},
],
};