-
Notifications
You must be signed in to change notification settings - Fork 0
/
.eslintrc.cjs
275 lines (270 loc) · 8.25 KB
/
.eslintrc.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
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
module.exports = {
root: true,
parser: `@typescript-eslint/parser`,
plugins: [
`@typescript-eslint`,
`no-only-tests`,
`react`,
`react-hooks`,
`jsx-a11y`,
`import`,
],
extends: [`eslint:recommended`, `plugin:@typescript-eslint/recommended`, `prettier`],
ignorePatterns: [
`**/dist/*`,
`**/bundled/*`,
`apps/storybook/storybook-static/*`,
`**/friends.js`,
],
rules: {
'no-var': `off`,
'no-console': `error`,
'prefer-const': [`error`, { destructuring: `all` }],
'default-case': `off`,
'no-only-tests/no-only-tests': `error`,
'no-useless-constructor': `off`,
'@typescript-eslint/no-non-null-assertion': `error`,
'@typescript-eslint/no-namespace': `off`,
'@typescript-eslint/no-empty-function': `off`,
'@typescript-eslint/ban-ts-comment': `off`,
'@typescript-eslint/consistent-type-imports': `error`,
'@typescript-eslint/no-useless-constructor': `error`,
'@typescript-eslint/no-explicit-any': `off`,
'@typescript-eslint/no-this-alias': `off`,
'@typescript-eslint/no-angle-bracket-type-assertion': `off`,
'@typescript-eslint/no-use-before-define': `off`,
'@typescript-eslint/explicit-module-boundary-types': `error`,
'@typescript-eslint/no-parameter-properties': `off`,
'@typescript-eslint/no-unused-vars': [`error`, { argsIgnorePattern: `^_` }],
'no-unused-vars': `off`,
'no-undef': `off`,
camelcase: `off`,
'@typescript-eslint/quotes': [`error`, `backtick`],
'@typescript-eslint/explicit-function-return-type': [
`error`,
{
allowExpressions: true,
allowTypedFunctionExpressions: true,
},
],
'no-unreachable-loop': `error`,
'no-useless-backreference': `error`,
'require-atomic-updates': `error`,
// taken from eslint-config-react-app
'array-callback-return': `error`,
'dot-location': [`error`, `property`],
eqeqeq: [`error`, `smart`],
'new-parens': `error`,
'no-array-constructor': `error`,
'no-caller': `error`,
'no-cond-assign': [`error`, `except-parens`],
'no-const-assign': `error`,
'no-control-regex': `error`,
'no-delete-var': `error`,
'no-dupe-args': `error`,
'no-dupe-class-members': `error`,
'no-dupe-keys': `error`,
'no-duplicate-case': `error`,
'no-empty-character-class': `error`,
'no-empty-pattern': `error`,
'no-eval': `error`,
'no-ex-assign': `error`,
'no-extend-native': `error`,
'no-extra-bind': `error`,
'no-extra-label': `error`,
'no-fallthrough': `error`,
'no-func-assign': `error`,
'no-implied-eval': `error`,
'no-invalid-regexp': `error`,
'no-iterator': `error`,
'no-label-var': `error`,
'no-labels': [`error`, { allowLoop: true, allowSwitch: false }],
'no-lone-blocks': `error`,
'no-mixed-operators': [
`error`,
{
groups: [
[`&`, `|`, `^`, `~`, `<<`, `>>`, `>>>`],
[`==`, `!=`, `===`, `!==`, `>`, `>=`, `<`, `<=`],
[`&&`, `||`],
[`in`, `instanceof`],
],
allowSamePrecedence: false,
},
],
'no-multi-str': `error`,
'no-native-reassign': `error`,
'no-negated-in-lhs': `error`,
'no-new-func': `error`,
'no-new-object': `error`,
'no-new-symbol': `error`,
'no-new-wrappers': `error`,
'no-obj-calls': `error`,
'no-octal': `error`,
'no-octal-escape': `error`,
'no-regex-spaces': `error`,
'no-restricted-syntax': [`error`, `WithStatement`],
'no-script-url': `error`,
'no-self-assign': `error`,
'no-self-compare': `error`,
'no-sequences': `error`,
'no-shadow-restricted-names': `error`,
'no-sparse-arrays': `error`,
'no-template-curly-in-string': `error`,
'no-this-before-super': `error`,
'no-throw-literal': `error`,
'no-unreachable': `error`,
'no-unused-expressions': [
`error`,
{
allowShortCircuit: true,
allowTernary: true,
allowTaggedTemplates: true,
},
],
'no-unused-labels': `error`,
'no-useless-computed-key': `error`,
'no-useless-concat': `error`,
'no-useless-escape': `error`,
'no-useless-rename': [
`error`,
{
ignoreDestructuring: false,
ignoreImport: false,
ignoreExport: false,
},
],
'no-with': `error`,
'no-whitespace-before-property': `error`,
'react-hooks/exhaustive-deps': `error`,
'require-yield': `error`,
'rest-spread-spacing': [`error`, `never`],
strict: [`error`, `never`],
'unicode-bom': [`error`, `never`],
'use-isnan': `error`,
'valid-typeof': `error`,
'getter-return': `error`,
// import
'import/order': [
`error`,
{ groups: [`builtin`, `external`, `type`, `parent`, `sibling`, `index`] },
],
'import/first': `error`,
'import/no-amd': `error`,
'import/no-webpack-loader-syntax': `error`,
// react
'react/forbid-foreign-prop-types': [`error`, { allowInPropTypes: true }],
'react/jsx-no-comment-textnodes': `error`,
'react/jsx-no-duplicate-props': `error`,
'react/jsx-no-target-blank': `error`,
'react/jsx-no-undef': `error`,
'react/jsx-pascal-case': [
`error`,
{
allowAllCaps: true,
ignore: [],
},
],
'jsx-quotes': [`error`, `prefer-double`],
'react/jsx-uses-react': `error`,
'react/jsx-uses-vars': `error`,
'react/no-danger-with-children': `error`,
'react/no-deprecated': `error`,
'react/no-direct-mutation-state': `error`,
'react/no-is-mounted': `error`,
'react/no-typos': `error`,
'react/require-render-return': `error`,
'react/style-prop-object': `error`,
// react-hooks
'react-hooks/rules-of-hooks': `error`,
// react-jsx-a11y
'jsx-a11y/accessible-emoji': `error`,
'jsx-a11y/alt-text': `error`,
'jsx-a11y/anchor-has-content': `error`,
'jsx-a11y/anchor-is-valid': [
`error`,
{
aspects: [`noHref`, `invalidHref`],
},
],
'jsx-a11y/aria-activedescendant-has-tabindex': `error`,
'jsx-a11y/aria-props': `error`,
'jsx-a11y/aria-proptypes': `error`,
'jsx-a11y/aria-role': [`error`, { ignoreNonDOM: true }],
'jsx-a11y/aria-unsupported-elements': `error`,
'jsx-a11y/heading-has-content': `error`,
'jsx-a11y/iframe-has-title': `error`,
'jsx-a11y/img-redundant-alt': `error`,
'jsx-a11y/no-access-key': `error`,
'jsx-a11y/no-distracting-elements': `error`,
'jsx-a11y/no-redundant-roles': `error`,
'jsx-a11y/role-has-required-aria-props': `error`,
'jsx-a11y/role-supports-aria-props': `error`,
'jsx-a11y/scope': `error`,
},
overrides: [
{
files: [`**/*.tsx`],
rules: {
'arrow-body-style': [`error`, `as-needed`],
},
},
{
files: [`apps/admin/**`, `apps/cover-web-app/**`, `apps/native/**`],
rules: {
'@typescript-eslint/no-non-null-assertion': `off`,
},
},
{
files: [`apps/cli/**`],
rules: {
'@typescript-eslint/no-non-null-assertion': `off`,
'require-atomic-updates': `off`,
'no-console': `off`,
},
},
{
files: [`apps/styleguide/**`],
rules: {
'jsx-a11y/accessible-emoji': `off`,
},
},
{
files: [`**/*.stories.tsx`, `**/cypress/**/*.cy.ts`],
rules: {
'@typescript-eslint/explicit-module-boundary-types': `off`,
'@typescript-eslint/explicit-function-return-type': `off`,
'@typescript-eslint/no-non-null-asserted-optional-chain': `off`,
'@typescript-eslint/no-non-null-assertion': `off`,
},
},
{
files: [`*.js`],
rules: {
'@typescript-eslint/no-var-requires': `off`,
'@typescript-eslint/explicit-module-boundary-types': `off`,
'@typescript-eslint/explicit-function-return-type': `off`,
},
},
{
files: [`**/__tests__/**`],
rules: {
'no-throw-literal': `off`,
'@typescript-eslint/consistent-type-assertions': `off`,
'@typescript-eslint/explicit-function-return-type': `off`,
'@typescript-eslint/no-non-null-asserted-optional-chain': `off`,
'@typescript-eslint/no-non-null-assertion': `off`,
},
},
],
settings: {
react: {
version: `999.999.999`,
},
},
parserOptions: {
ecmaVersion: 2020,
ecmaFeatures: { jsx: true },
sourceType: `module`,
},
};