1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | 'use strict';
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | const restrictedGlobals = require('confusing-browser-globals');
|
25 |
|
26 | module.exports = {
|
27 | extends: [require.resolve('./base')],
|
28 |
|
29 | plugins: ['import', 'flowtype', 'jsx-a11y', 'react-hooks'],
|
30 |
|
31 | overrides: [
|
32 | {
|
33 | files: ['**/*.ts?(x)'],
|
34 | parser: '@typescript-eslint/parser',
|
35 | parserOptions: {
|
36 | ecmaVersion: 2018,
|
37 | sourceType: 'module',
|
38 | ecmaFeatures: {
|
39 | jsx: true,
|
40 | },
|
41 |
|
42 |
|
43 | warnOnUnsupportedTypeScriptVersion: true,
|
44 | },
|
45 | plugins: ['@typescript-eslint'],
|
46 |
|
47 |
|
48 | rules: {
|
49 |
|
50 | 'default-case': 'off',
|
51 |
|
52 | 'no-dupe-class-members': 'off',
|
53 |
|
54 | 'no-undef': 'off',
|
55 |
|
56 |
|
57 | '@typescript-eslint/consistent-type-assertions': 'warn',
|
58 | 'no-array-constructor': 'off',
|
59 | '@typescript-eslint/no-array-constructor': 'warn',
|
60 | 'no-redeclare': 'off',
|
61 | '@typescript-eslint/no-redeclare': 'warn',
|
62 | 'no-use-before-define': 'off',
|
63 | '@typescript-eslint/no-use-before-define': [
|
64 | 'warn',
|
65 | {
|
66 | functions: false,
|
67 | classes: false,
|
68 | variables: false,
|
69 | typedefs: false,
|
70 | },
|
71 | ],
|
72 | 'no-unused-expressions': 'off',
|
73 | '@typescript-eslint/no-unused-expressions': [
|
74 | 'error',
|
75 | {
|
76 | allowShortCircuit: true,
|
77 | allowTernary: true,
|
78 | allowTaggedTemplates: true,
|
79 | },
|
80 | ],
|
81 | 'no-unused-vars': 'off',
|
82 | '@typescript-eslint/no-unused-vars': [
|
83 | 'warn',
|
84 | {
|
85 | args: 'none',
|
86 | ignoreRestSiblings: true,
|
87 | },
|
88 | ],
|
89 | 'no-useless-constructor': 'off',
|
90 | '@typescript-eslint/no-useless-constructor': 'warn',
|
91 | },
|
92 | },
|
93 | ],
|
94 |
|
95 |
|
96 |
|
97 | rules: {
|
98 |
|
99 | 'array-callback-return': 'warn',
|
100 | 'default-case': ['warn', { commentPattern: '^no default$' }],
|
101 | 'dot-location': ['warn', 'property'],
|
102 | eqeqeq: ['warn', 'smart'],
|
103 | 'new-parens': 'warn',
|
104 | 'no-array-constructor': 'warn',
|
105 | 'no-caller': 'warn',
|
106 | 'no-cond-assign': ['warn', 'except-parens'],
|
107 | 'no-const-assign': 'warn',
|
108 | 'no-control-regex': 'warn',
|
109 | 'no-delete-var': 'warn',
|
110 | 'no-dupe-args': 'warn',
|
111 | 'no-dupe-class-members': 'warn',
|
112 | 'no-dupe-keys': 'warn',
|
113 | 'no-duplicate-case': 'warn',
|
114 | 'no-empty-character-class': 'warn',
|
115 | 'no-empty-pattern': 'warn',
|
116 | 'no-eval': 'warn',
|
117 | 'no-ex-assign': 'warn',
|
118 | 'no-extend-native': 'warn',
|
119 | 'no-extra-bind': 'warn',
|
120 | 'no-extra-label': 'warn',
|
121 | 'no-fallthrough': 'warn',
|
122 | 'no-func-assign': 'warn',
|
123 | 'no-implied-eval': 'warn',
|
124 | 'no-invalid-regexp': 'warn',
|
125 | 'no-iterator': 'warn',
|
126 | 'no-label-var': 'warn',
|
127 | 'no-labels': ['warn', { allowLoop: true, allowSwitch: false }],
|
128 | 'no-lone-blocks': 'warn',
|
129 | 'no-loop-func': 'warn',
|
130 | 'no-mixed-operators': [
|
131 | 'warn',
|
132 | {
|
133 | groups: [
|
134 | ['&', '|', '^', '~', '<<', '>>', '>>>'],
|
135 | ['==', '!=', '===', '!==', '>', '>=', '<', '<='],
|
136 | ['&&', '||'],
|
137 | ['in', 'instanceof'],
|
138 | ],
|
139 | allowSamePrecedence: false,
|
140 | },
|
141 | ],
|
142 | 'no-multi-str': 'warn',
|
143 | 'no-global-assign': 'warn',
|
144 | 'no-unsafe-negation': 'warn',
|
145 | 'no-new-func': 'warn',
|
146 | 'no-new-object': 'warn',
|
147 | 'no-new-symbol': 'warn',
|
148 | 'no-new-wrappers': 'warn',
|
149 | 'no-obj-calls': 'warn',
|
150 | 'no-octal': 'warn',
|
151 | 'no-octal-escape': 'warn',
|
152 | 'no-redeclare': 'warn',
|
153 | 'no-regex-spaces': 'warn',
|
154 | 'no-restricted-syntax': ['warn', 'WithStatement'],
|
155 | 'no-script-url': 'warn',
|
156 | 'no-self-assign': 'warn',
|
157 | 'no-self-compare': 'warn',
|
158 | 'no-sequences': 'warn',
|
159 | 'no-shadow-restricted-names': 'warn',
|
160 | 'no-sparse-arrays': 'warn',
|
161 | 'no-template-curly-in-string': 'warn',
|
162 | 'no-this-before-super': 'warn',
|
163 | 'no-throw-literal': 'warn',
|
164 | 'no-undef': 'error',
|
165 | 'no-restricted-globals': ['error'].concat(restrictedGlobals),
|
166 | 'no-unreachable': 'warn',
|
167 | 'no-unused-expressions': [
|
168 | 'error',
|
169 | {
|
170 | allowShortCircuit: true,
|
171 | allowTernary: true,
|
172 | allowTaggedTemplates: true,
|
173 | },
|
174 | ],
|
175 | 'no-unused-labels': 'warn',
|
176 | 'no-unused-vars': [
|
177 | 'warn',
|
178 | {
|
179 | args: 'none',
|
180 | ignoreRestSiblings: true,
|
181 | },
|
182 | ],
|
183 | 'no-use-before-define': [
|
184 | 'warn',
|
185 | {
|
186 | functions: false,
|
187 | classes: false,
|
188 | variables: false,
|
189 | },
|
190 | ],
|
191 | 'no-useless-computed-key': 'warn',
|
192 | 'no-useless-concat': 'warn',
|
193 | 'no-useless-constructor': 'warn',
|
194 | 'no-useless-escape': 'warn',
|
195 | 'no-useless-rename': [
|
196 | 'warn',
|
197 | {
|
198 | ignoreDestructuring: false,
|
199 | ignoreImport: false,
|
200 | ignoreExport: false,
|
201 | },
|
202 | ],
|
203 | 'no-with': 'warn',
|
204 | 'no-whitespace-before-property': 'warn',
|
205 | 'react-hooks/exhaustive-deps': 'warn',
|
206 | 'require-yield': 'warn',
|
207 | 'rest-spread-spacing': ['warn', 'never'],
|
208 | strict: ['warn', 'never'],
|
209 | 'unicode-bom': ['warn', 'never'],
|
210 | 'use-isnan': 'warn',
|
211 | 'valid-typeof': 'warn',
|
212 | 'no-restricted-properties': [
|
213 | 'error',
|
214 | {
|
215 | object: 'require',
|
216 | property: 'ensure',
|
217 | message:
|
218 | 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting',
|
219 | },
|
220 | {
|
221 | object: 'System',
|
222 | property: 'import',
|
223 | message:
|
224 | 'Please use import() instead. More info: https://facebook.github.io/create-react-app/docs/code-splitting',
|
225 | },
|
226 | ],
|
227 | 'getter-return': 'warn',
|
228 |
|
229 |
|
230 | 'import/first': 'error',
|
231 | 'import/no-amd': 'error',
|
232 | 'import/no-anonymous-default-export': 'warn',
|
233 | 'import/no-webpack-loader-syntax': 'error',
|
234 |
|
235 |
|
236 | 'react/forbid-foreign-prop-types': ['warn', { allowInPropTypes: true }],
|
237 | 'react/jsx-no-comment-textnodes': 'warn',
|
238 | 'react/jsx-no-duplicate-props': 'warn',
|
239 | 'react/jsx-no-target-blank': 'warn',
|
240 | 'react/jsx-no-undef': 'error',
|
241 | 'react/jsx-pascal-case': [
|
242 | 'warn',
|
243 | {
|
244 | allowAllCaps: true,
|
245 | ignore: [],
|
246 | },
|
247 | ],
|
248 | 'react/no-danger-with-children': 'warn',
|
249 |
|
250 |
|
251 |
|
252 |
|
253 | 'react/no-direct-mutation-state': 'warn',
|
254 | 'react/no-is-mounted': 'warn',
|
255 | 'react/no-typos': 'error',
|
256 | 'react/require-render-return': 'error',
|
257 | 'react/style-prop-object': 'warn',
|
258 |
|
259 |
|
260 | 'jsx-a11y/alt-text': 'warn',
|
261 | 'jsx-a11y/anchor-has-content': 'warn',
|
262 | 'jsx-a11y/anchor-is-valid': [
|
263 | 'warn',
|
264 | {
|
265 | aspects: ['noHref', 'invalidHref'],
|
266 | },
|
267 | ],
|
268 | 'jsx-a11y/aria-activedescendant-has-tabindex': 'warn',
|
269 | 'jsx-a11y/aria-props': 'warn',
|
270 | 'jsx-a11y/aria-proptypes': 'warn',
|
271 | 'jsx-a11y/aria-role': ['warn', { ignoreNonDOM: true }],
|
272 | 'jsx-a11y/aria-unsupported-elements': 'warn',
|
273 | 'jsx-a11y/heading-has-content': 'warn',
|
274 | 'jsx-a11y/iframe-has-title': 'warn',
|
275 | 'jsx-a11y/img-redundant-alt': 'warn',
|
276 | 'jsx-a11y/no-access-key': 'warn',
|
277 | 'jsx-a11y/no-distracting-elements': 'warn',
|
278 | 'jsx-a11y/no-redundant-roles': 'warn',
|
279 | 'jsx-a11y/role-has-required-aria-props': 'warn',
|
280 | 'jsx-a11y/role-supports-aria-props': 'warn',
|
281 | 'jsx-a11y/scope': 'warn',
|
282 |
|
283 |
|
284 | 'react-hooks/rules-of-hooks': 'error',
|
285 |
|
286 |
|
287 | 'flowtype/define-flow-type': 'warn',
|
288 | 'flowtype/require-valid-file-annotation': 'warn',
|
289 | 'flowtype/use-flow-type': 'warn',
|
290 | },
|
291 | };
|