@ver0/oxlint-config 0.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,263 +1,130 @@
1
- import {GLOBS} from '../utils/globs.js';
2
-
3
1
  /** @type {import('oxlint').OxlintConfig} */
4
2
  const javascript = {
5
- plugins: [],
3
+ plugins: ['import', 'oxc', 'promise', 'unicorn'],
6
4
  categories: {
7
- correctness: 'off',
5
+ correctness: 'error',
6
+ suspicious: 'error',
7
+ pedantic: 'error',
8
+ perf: 'error',
8
9
  },
9
10
  env: {
10
11
  builtin: true,
12
+ es2026: true,
11
13
  },
12
- overrides: [
13
- {
14
- files: [GLOBS.JS],
15
- rules: {
16
- 'constructor-super': 'error',
17
- 'for-direction': 'error',
18
- 'getter-return': 'error',
19
- 'no-async-promise-executor': 'error',
20
- 'no-case-declarations': 'error',
21
- 'no-class-assign': 'error',
22
- 'no-compare-neg-zero': 'error',
23
- 'no-cond-assign': 'error',
24
- 'no-const-assign': 'error',
25
- 'no-constant-binary-expression': 'error',
26
- 'no-constant-condition': 'error',
27
- 'no-control-regex': 'error',
28
- 'no-debugger': 'error',
29
- 'no-delete-var': 'error',
30
- 'no-dupe-class-members': 'error',
31
- 'no-dupe-else-if': 'error',
32
- 'no-dupe-keys': 'error',
33
- 'no-duplicate-case': 'error',
34
- 'no-empty': 'error',
35
- 'no-empty-character-class': 'error',
36
- 'no-empty-pattern': 'error',
37
- 'no-empty-static-block': 'error',
38
- 'no-ex-assign': 'error',
39
- 'no-extra-boolean-cast': 'error',
40
- 'no-fallthrough': 'error',
41
- 'no-func-assign': 'error',
42
- 'no-global-assign': 'error',
43
- 'no-import-assign': 'error',
44
- 'no-invalid-regexp': 'error',
45
- 'no-irregular-whitespace': 'error',
46
- 'no-loss-of-precision': 'error',
47
- 'no-misleading-character-class': 'error',
48
- 'no-new-native-nonconstructor': 'error',
49
- 'no-nonoctal-decimal-escape': 'error',
50
- 'no-obj-calls': 'error',
51
- 'no-prototype-builtins': 'error',
52
- 'no-redeclare': 'error',
53
- 'no-regex-spaces': 'error',
54
- 'no-self-assign': 'error',
55
- 'no-setter-return': 'error',
56
- 'no-shadow-restricted-names': 'error',
57
- 'no-sparse-arrays': 'error',
58
- 'no-this-before-super': 'error',
59
- 'no-unassigned-vars': 'error',
60
- 'no-unexpected-multiline': 'error',
61
- 'no-unreachable': 'error',
62
- 'no-unsafe-finally': 'error',
63
- 'no-unsafe-negation': 'error',
64
- 'no-unsafe-optional-chaining': 'error',
65
- 'no-unused-labels': 'error',
66
- 'no-unused-private-class-members': 'error',
67
- 'no-unused-vars': 'error',
68
- 'no-useless-backreference': 'error',
69
- 'no-useless-catch': 'error',
70
- 'no-useless-escape': 'error',
71
- 'no-with': 'error',
72
- 'preserve-caught-error': 'error',
73
- 'require-yield': 'error',
74
- 'use-isnan': 'error',
75
- 'valid-typeof': 'error',
76
- 'import/namespace': 'error',
77
- 'import/default': 'error',
78
- 'import/no-named-as-default': 'error',
79
- 'import/no-named-as-default-member': 'error',
80
- 'import/no-duplicates': [
81
- 'error',
82
- {
83
- 'prefer-inline': false,
84
- },
85
- ],
86
- 'promise/always-return': 'error',
87
- 'promise/no-return-wrap': [
88
- 'error',
89
- {
90
- allowReject: true,
91
- },
92
- ],
93
- 'promise/param-names': 'error',
94
- 'promise/catch-or-return': 'error',
95
- 'promise/no-nesting': 'warn',
96
- 'promise/no-promise-in-callback': 'warn',
97
- 'promise/no-callback-in-promise': 'warn',
98
- 'promise/avoid-new': 'off',
99
- 'promise/no-new-statics': 'error',
100
- 'promise/valid-params': 'error',
101
- 'no-negated-condition': 'off',
102
- 'no-nested-ternary': 'off',
103
- 'unicorn/catch-error-name': 'error',
104
- 'unicorn/consistent-assert': 'error',
105
- 'unicorn/consistent-date-clone': 'error',
106
- 'unicorn/consistent-empty-array-spread': 'error',
107
- 'unicorn/consistent-existence-index-check': 'error',
108
- 'unicorn/consistent-function-scoping': 'off',
109
- 'unicorn/consistent-template-literal-escape': 'error',
110
- 'unicorn/custom-error-definition': 'off',
111
- 'unicorn/empty-brace-spaces': 'error',
112
- 'unicorn/error-message': 'error',
113
- 'unicorn/escape-case': 'error',
114
- 'unicorn/explicit-length-check': 'error',
115
- 'unicorn/filename-case': 'error',
116
- 'unicorn/import-style': 'error',
117
- 'unicorn/new-for-builtins': 'error',
118
- 'unicorn/no-abusive-eslint-disable': 'error',
119
- 'unicorn/no-accessor-recursion': 'error',
120
- 'unicorn/no-anonymous-default-export': 'error',
121
- 'unicorn/no-array-callback-reference': 'error',
122
- 'unicorn/no-array-fill-with-reference-type': 'error',
123
- 'unicorn/no-array-for-each': 'error',
124
- 'unicorn/no-array-method-this-argument': 'error',
125
- 'unicorn/no-array-reduce': 'error',
126
- 'unicorn/no-array-reverse': 'error',
127
- 'unicorn/no-array-sort': 'error',
128
- 'unicorn/no-await-expression-member': 'error',
129
- 'unicorn/no-await-in-promise-methods': 'error',
130
- 'unicorn/no-console-spaces': 'error',
131
- 'unicorn/no-document-cookie': 'error',
132
- 'unicorn/no-empty-file': 'error',
133
- 'unicorn/no-hex-escape': 'error',
134
- 'unicorn/no-immediate-mutation': 'error',
135
- 'unicorn/no-instanceof-builtins': 'error',
136
- 'unicorn/no-invalid-fetch-options': 'error',
137
- 'unicorn/no-invalid-remove-event-listener': 'error',
138
- 'unicorn/no-lonely-if': 'error',
139
- 'unicorn/no-magic-array-flat-depth': 'error',
140
- 'unicorn/no-negated-condition': 'error',
141
- 'unicorn/no-negation-in-equality-check': 'error',
142
- 'unicorn/no-nested-ternary': 'error',
143
- 'unicorn/no-new-array': 'error',
144
- 'unicorn/no-new-buffer': 'error',
145
- 'unicorn/no-null': 'off',
146
- 'unicorn/no-object-as-default-parameter': 'error',
147
- 'unicorn/no-process-exit': 'error',
148
- 'unicorn/no-single-promise-in-promise-methods': 'error',
149
- 'unicorn/no-static-only-class': 'error',
150
- 'unicorn/no-thenable': 'error',
151
- 'unicorn/no-this-assignment': 'error',
152
- 'unicorn/no-typeof-undefined': 'error',
153
- 'unicorn/no-unnecessary-array-flat-depth': 'error',
154
- 'unicorn/no-unnecessary-array-splice-count': 'error',
155
- 'unicorn/no-unnecessary-await': 'error',
156
- 'unicorn/no-unnecessary-slice-end': 'error',
157
- 'unicorn/no-unreadable-array-destructuring': 'error',
158
- 'unicorn/no-unreadable-iife': 'error',
159
- 'unicorn/no-useless-collection-argument': 'error',
160
- 'unicorn/no-useless-error-capture-stack-trace': 'error',
161
- 'unicorn/no-useless-fallback-in-spread': 'error',
162
- 'unicorn/no-useless-length-check': 'error',
163
- 'unicorn/no-useless-promise-resolve-reject': 'error',
164
- 'unicorn/no-useless-spread': 'error',
165
- 'unicorn/no-useless-switch-case': 'error',
166
- 'unicorn/no-useless-undefined': 'off',
167
- 'unicorn/no-zero-fractions': 'error',
168
- 'unicorn/number-literal-case': 'error',
169
- 'unicorn/numeric-separators-style': 'error',
170
- 'unicorn/prefer-add-event-listener': 'error',
171
- 'unicorn/prefer-array-find': 'error',
172
- 'unicorn/prefer-array-flat': 'error',
173
- 'unicorn/prefer-array-flat-map': 'error',
174
- 'unicorn/prefer-array-index-of': 'error',
175
- 'unicorn/prefer-array-some': 'error',
176
- 'unicorn/prefer-at': 'error',
177
- 'unicorn/prefer-bigint-literals': 'error',
178
- 'unicorn/prefer-blob-reading-methods': 'error',
179
- 'unicorn/prefer-class-fields': 'error',
180
- 'unicorn/prefer-classlist-toggle': 'error',
181
- 'unicorn/prefer-code-point': 'error',
182
- 'unicorn/prefer-date-now': 'error',
183
- 'unicorn/prefer-default-parameters': 'error',
184
- 'unicorn/prefer-dom-node-append': 'error',
185
- 'unicorn/prefer-dom-node-remove': 'error',
186
- 'unicorn/prefer-dom-node-text-content': 'error',
187
- 'unicorn/prefer-event-target': 'error',
188
- 'unicorn/prefer-export-from': 'error',
189
- 'unicorn/prefer-global-this': 'error',
190
- 'unicorn/prefer-import-meta-properties': 'off',
191
- 'unicorn/prefer-includes': 'error',
192
- 'unicorn/prefer-keyboard-event-key': 'error',
193
- 'unicorn/prefer-logical-operator-over-ternary': 'error',
194
- 'unicorn/prefer-math-min-max': 'error',
195
- 'unicorn/prefer-math-trunc': 'error',
196
- 'unicorn/prefer-modern-dom-apis': 'error',
197
- 'unicorn/prefer-modern-math-apis': 'error',
198
- 'unicorn/prefer-module': 'error',
199
- 'unicorn/prefer-native-coercion-functions': 'error',
200
- 'unicorn/prefer-negative-index': 'error',
201
- 'unicorn/prefer-node-protocol': 'error',
202
- 'unicorn/prefer-number-properties': 'error',
203
- 'unicorn/prefer-object-from-entries': 'error',
204
- 'unicorn/prefer-optional-catch-binding': 'error',
205
- 'unicorn/prefer-prototype-methods': 'error',
206
- 'unicorn/prefer-query-selector': 'error',
207
- 'unicorn/prefer-reflect-apply': 'error',
208
- 'unicorn/prefer-regexp-test': 'error',
209
- 'unicorn/prefer-response-static-json': 'error',
210
- 'unicorn/prefer-set-has': 'error',
211
- 'unicorn/prefer-set-size': 'error',
212
- 'unicorn/prefer-single-call': 'error',
213
- 'unicorn/prefer-spread': 'error',
214
- 'unicorn/prefer-string-raw': 'off',
215
- 'unicorn/prefer-string-replace-all': 'error',
216
- 'unicorn/prefer-string-slice': 'error',
217
- 'unicorn/prefer-string-starts-ends-with': 'error',
218
- 'unicorn/prefer-string-trim-start-end': 'error',
219
- 'unicorn/prefer-structured-clone': 'error',
220
- 'unicorn/prefer-ternary': 'off',
221
- 'unicorn/prefer-top-level-await': 'error',
222
- 'unicorn/prefer-type-error': 'error',
223
- 'unicorn/relative-url-style': 'error',
224
- 'unicorn/require-array-join-separator': 'error',
225
- 'unicorn/require-module-attributes': 'error',
226
- 'unicorn/require-module-specifiers': 'error',
227
- 'unicorn/require-number-to-fixed-digits-argument': 'error',
228
- 'unicorn/require-post-message-target-origin': 'off',
229
- 'unicorn/switch-case-braces': 'error',
230
- 'unicorn/switch-case-break-position': 'error',
231
- 'unicorn/text-encoding-identifier-case': 'error',
232
- 'unicorn/throw-new-error': 'error',
233
- 'capitalized-comments': 'off',
234
- 'import/first': 'error',
235
- 'import/no-unassigned-import': 'off',
236
- 'import/extensions': [
237
- 'error',
238
- 'always',
239
- {
240
- ignorePackages: true,
241
- },
242
- ],
243
- 'import/no-absolute-path': 'error',
244
- 'import/no-anonymous-default-export': 'off',
245
- 'import/no-named-default': 'error',
246
- 'import/no-webpack-loader-syntax': 'error',
247
- 'import/no-self-import': 'error',
248
- 'import/no-cycle': 'off',
249
- 'import/newline-after-import': 'error',
250
- 'import/no-amd': 'error',
251
- 'import/no-empty-named-blocks': 'error',
252
- 'import/no-mutable-exports': 'error',
253
- 'promise/prefer-await-to-then': 'error',
14
+ rules: {
15
+ 'capitalized-comments': 'off',
16
+ 'import/extensions': [
17
+ 'error',
18
+ 'always',
19
+ {
20
+ ignorePackages: true,
21
+ },
22
+ ],
23
+ 'import/first': 'error',
24
+ 'import/max-dependencies': 'off',
25
+ 'import/newline-after-import': 'error',
26
+ 'import/no-amd': 'error',
27
+ 'import/no-anonymous-default-export': 'off',
28
+ 'import/no-cycle': 'off',
29
+ 'import/no-duplicates': [
30
+ 'error',
31
+ {
32
+ 'prefer-inline': false,
254
33
  },
255
- plugins: ['import', 'promise', 'unicorn'],
256
- env: {
257
- es2026: true,
34
+ ],
35
+ 'import/no-mutable-exports': 'error',
36
+ 'import/no-named-default': 'error',
37
+ 'import/no-unassigned-import': 'off',
38
+ 'import/no-webpack-loader-syntax': 'error',
39
+ 'max-classes-per-file': 'off',
40
+ 'max-depth': 'off',
41
+ 'max-lines': 'off',
42
+ 'max-lines-per-function': 'off',
43
+ 'max-nested-callbacks': 'off',
44
+ 'no-empty': 'error',
45
+ 'no-inline-comments': 'off',
46
+ 'no-negated-condition': 'off',
47
+ 'no-nested-ternary': 'off',
48
+ 'no-regex-spaces': 'error',
49
+ 'no-warning-comments': 'off',
50
+ 'promise/avoid-new': 'off',
51
+ 'promise/catch-or-return': 'error',
52
+ 'promise/no-nesting': 'warn',
53
+ 'promise/no-return-wrap': [
54
+ 'error',
55
+ {
56
+ allowReject: true,
258
57
  },
259
- },
260
- ],
58
+ ],
59
+ 'promise/param-names': 'error',
60
+ 'promise/prefer-await-to-then': 'error',
61
+ 'require-unicode-regexp': 'off',
62
+ 'sort-vars': 'off',
63
+ 'unicorn/catch-error-name': 'error',
64
+ 'unicorn/consistent-date-clone': 'error',
65
+ 'unicorn/consistent-existence-index-check': 'error',
66
+ 'unicorn/consistent-function-scoping': 'off',
67
+ 'unicorn/consistent-template-literal-escape': 'error',
68
+ 'unicorn/custom-error-definition': 'off',
69
+ 'unicorn/empty-brace-spaces': 'error',
70
+ 'unicorn/error-message': 'error',
71
+ 'unicorn/filename-case': 'error',
72
+ 'unicorn/import-style': 'error',
73
+ 'unicorn/no-abusive-eslint-disable': 'error',
74
+ 'unicorn/no-anonymous-default-export': 'error',
75
+ 'unicorn/no-array-for-each': 'error',
76
+ 'unicorn/no-array-method-this-argument': 'error',
77
+ 'unicorn/no-array-reduce': 'error',
78
+ 'unicorn/no-await-expression-member': 'error',
79
+ 'unicorn/no-console-spaces': 'error',
80
+ 'unicorn/no-document-cookie': 'error',
81
+ 'unicorn/no-magic-array-flat-depth': 'error',
82
+ 'unicorn/no-nested-ternary': 'error',
83
+ 'unicorn/no-null': 'off',
84
+ 'unicorn/no-process-exit': 'error',
85
+ 'unicorn/no-unreadable-array-destructuring': 'error',
86
+ 'unicorn/no-useless-collection-argument': 'error',
87
+ 'unicorn/no-useless-error-capture-stack-trace': 'error',
88
+ 'unicorn/no-useless-undefined': 'off',
89
+ 'unicorn/no-zero-fractions': 'error',
90
+ 'unicorn/number-literal-case': 'error',
91
+ 'unicorn/numeric-separators-style': 'error',
92
+ 'unicorn/prefer-array-index-of': 'error',
93
+ 'unicorn/prefer-bigint-literals': 'error',
94
+ 'unicorn/prefer-class-fields': 'error',
95
+ 'unicorn/prefer-classlist-toggle': 'error',
96
+ 'unicorn/prefer-default-parameters': 'error',
97
+ 'unicorn/prefer-dom-node-text-content': 'error',
98
+ 'unicorn/prefer-export-from': 'error',
99
+ 'unicorn/prefer-global-this': 'error',
100
+ 'unicorn/prefer-import-meta-properties': 'off',
101
+ 'unicorn/prefer-includes': 'error',
102
+ 'unicorn/prefer-keyboard-event-key': 'error',
103
+ 'unicorn/prefer-logical-operator-over-ternary': 'error',
104
+ 'unicorn/prefer-modern-dom-apis': 'error',
105
+ 'unicorn/prefer-modern-math-apis': 'error',
106
+ 'unicorn/prefer-module': 'error',
107
+ 'unicorn/prefer-negative-index': 'error',
108
+ 'unicorn/prefer-node-protocol': 'error',
109
+ 'unicorn/prefer-number-properties': 'error',
110
+ 'unicorn/prefer-object-from-entries': 'error',
111
+ 'unicorn/prefer-optional-catch-binding': 'error',
112
+ 'unicorn/prefer-reflect-apply': 'error',
113
+ 'unicorn/prefer-response-static-json': 'error',
114
+ 'unicorn/prefer-spread': 'error',
115
+ 'unicorn/prefer-string-raw': 'off',
116
+ 'unicorn/prefer-string-trim-start-end': 'error',
117
+ 'unicorn/prefer-structured-clone': 'error',
118
+ 'unicorn/prefer-ternary': 'off',
119
+ 'unicorn/relative-url-style': 'error',
120
+ 'unicorn/require-array-join-separator': 'error',
121
+ 'unicorn/require-module-attributes': 'error',
122
+ 'unicorn/require-post-message-target-origin': 'off',
123
+ 'unicorn/switch-case-braces': 'error',
124
+ 'unicorn/switch-case-break-position': 'error',
125
+ 'unicorn/text-encoding-identifier-case': 'error',
126
+ 'unicorn/throw-new-error': 'error',
127
+ },
261
128
  };
262
129
 
263
130
  export default javascript;
package/configs/node.js CHANGED
@@ -1,43 +1,23 @@
1
- import {GLOBS} from '../utils/globs.js';
2
-
3
1
  /** @type {import('oxlint').OxlintConfig} */
4
2
  const node = {
5
- plugins: [],
6
- categories: {
7
- correctness: 'off',
8
- },
3
+ plugins: ['node'],
9
4
  env: {
10
- builtin: true,
5
+ node: true,
6
+ es2026: true,
7
+ },
8
+ globals: {
9
+ __dirname: 'off',
10
+ __filename: 'off',
11
+ exports: 'off',
12
+ module: 'off',
13
+ require: 'off',
14
+ },
15
+ rules: {
16
+ 'node/no-exports-assign': 'error',
17
+ 'node/no-mixed-requires': ['error', {grouping: true, allowCall: true}],
18
+ 'node/no-new-require': 'error',
19
+ 'node/no-path-concat': 'error',
11
20
  },
12
- overrides: [
13
- {
14
- files: [GLOBS.JS, GLOBS.TS],
15
- rules: {
16
- 'node/no-exports-assign': 'error',
17
- 'node/no-mixed-requires': [
18
- 'error',
19
- {
20
- grouping: true,
21
- allowCall: true,
22
- },
23
- ],
24
- 'node/no-new-require': 'error',
25
- 'node/no-path-concat': 'error',
26
- },
27
- globals: {
28
- __dirname: 'off',
29
- __filename: 'off',
30
- exports: 'off',
31
- module: 'off',
32
- require: 'off',
33
- },
34
- plugins: ['node'],
35
- env: {
36
- es2026: true,
37
- node: true,
38
- },
39
- },
40
- ],
41
21
  };
42
22
 
43
23
  export default node;
package/configs/react.js CHANGED
@@ -1,117 +1,84 @@
1
- import {GLOBS} from '../utils/globs.js';
2
-
3
1
  /** @type {import('oxlint').OxlintConfig} */
4
2
  const react = {
5
- plugins: [],
3
+ plugins: ['react'],
6
4
  categories: {
7
- correctness: 'off',
8
- },
9
- env: {
10
- builtin: true,
5
+ correctness: 'error',
6
+ suspicious: 'error',
7
+ pedantic: 'error',
8
+ perf: 'error',
11
9
  },
12
- overrides: [
13
- {
14
- files: [GLOBS.JS, GLOBS.TS],
15
- rules: {
16
- 'react/button-has-type': 'error',
17
- 'react/checked-requires-onchange-or-readonly': 'error',
18
- 'react/forward-ref-uses-ref': 'error',
19
- 'react/function-component-definition': [
20
- 'error',
21
- {
22
- namedComponents: 'function-declaration',
23
- unnamedComponents: 'arrow-function',
24
- },
25
- ],
26
- 'react/hook-use-state': [
27
- 'error',
28
- {
29
- allowDestructuredState: true,
30
- },
31
- ],
32
- 'react/iframe-missing-sandbox': 'error',
33
- 'react/no-array-index-key': 'error',
34
- 'react/no-children-prop': 'error',
35
- 'react/no-danger': 'error',
36
- 'react/no-danger-with-children': 'error',
37
- 'react/no-did-update-set-state': 'error',
38
- 'react/no-direct-mutation-state': 'error',
39
- 'react/no-find-dom-node': 'error',
40
- 'react/no-is-mounted': 'error',
41
- 'react/no-namespace': 'error',
42
- 'react/no-object-type-as-default-prop': 'error',
43
- 'react/no-redundant-should-component-update': 'error',
44
- 'react/no-render-return-value': 'error',
45
- 'react/no-string-refs': [
46
- 'error',
47
- {
48
- noTemplateLiterals: true,
49
- },
50
- ],
51
- 'react/no-this-in-sfc': 'error',
52
- 'react/no-unescaped-entities': 'error',
53
- 'react/no-unknown-property': [
54
- 'error',
55
- {
56
- requireDataLowercase: true,
57
- },
58
- ],
59
- 'react/no-unsafe': 'error',
60
- 'react/react-in-jsx-scope': 'off',
61
- 'react/self-closing-comp': 'error',
62
- 'react/state-in-constructor': ['error', 'never'],
63
- 'react/style-prop-object': [
64
- 'error',
65
- {
66
- allow: ['FormattedNumber'],
67
- },
68
- ],
69
- 'react/void-dom-elements-no-children': 'error',
70
- 'react/jsx-boolean-value': 'error',
71
- 'react/jsx-key': [
72
- 'error',
73
- {
74
- checkFragmentShorthand: true,
75
- checkKeyMustBeforeSpread: true,
76
- warnOnDuplicates: true,
77
- },
78
- ],
79
- 'react/jsx-no-comment-textnodes': 'error',
80
- 'react/jsx-no-constructed-context-values': 'error',
81
- 'react/jsx-no-duplicate-props': 'error',
82
- 'react/jsx-no-script-url': [
83
- 'error',
84
- {
85
- includeFromSettings: true,
86
- },
87
- ],
88
- 'react/jsx-no-target-blank': [
89
- 'error',
90
- {
91
- warnOnSpreadAttributes: true,
92
- forms: true,
93
- },
94
- ],
95
- 'react/jsx-no-undef': 'error',
96
- 'react/jsx-no-useless-fragment': 'error',
97
- 'react/jsx-curly-brace-presence': [
98
- 'error',
99
- {
100
- props: 'never',
101
- children: 'never',
102
- propElementValues: 'always',
103
- },
104
- ],
105
- 'react/jsx-fragments': ['error', 'syntax'],
106
- 'react/jsx-pascal-case': 'error',
107
- 'react/jsx-props-no-spread-multi': 'error',
108
- 'react/rules-of-hooks': 'error',
109
- 'react/exhaustive-deps': 'warn',
110
- 'react/display-name': 'off',
10
+ rules: {
11
+ 'react/button-has-type': 'error',
12
+ 'react/display-name': 'off',
13
+ 'react/function-component-definition': [
14
+ 'error',
15
+ {
16
+ namedComponents: 'function-declaration',
17
+ unnamedComponents: 'arrow-function',
18
+ },
19
+ ],
20
+ 'react/hook-use-state': [
21
+ 'error',
22
+ {
23
+ allowDestructuredState: true,
24
+ },
25
+ ],
26
+ 'react/jsx-boolean-value': 'error',
27
+ 'react/jsx-curly-brace-presence': [
28
+ 'error',
29
+ {
30
+ props: 'never',
31
+ children: 'never',
32
+ propElementValues: 'always',
33
+ },
34
+ ],
35
+ 'react/jsx-fragments': ['error', 'syntax'],
36
+ 'react/jsx-key': [
37
+ 'error',
38
+ {
39
+ checkFragmentShorthand: true,
40
+ checkKeyMustBeforeSpread: true,
41
+ warnOnDuplicates: true,
42
+ },
43
+ ],
44
+ 'react/jsx-no-script-url': [
45
+ 'error',
46
+ {
47
+ includeFromSettings: true,
111
48
  },
112
- plugins: ['react'],
113
- },
114
- ],
49
+ ],
50
+ 'react/jsx-no-target-blank': [
51
+ 'error',
52
+ {
53
+ warnOnSpreadAttributes: true,
54
+ forms: true,
55
+ },
56
+ ],
57
+ 'react/jsx-pascal-case': 'error',
58
+ 'react/no-danger': 'error',
59
+ 'react/no-redundant-should-component-update': 'error',
60
+ 'react/no-string-refs': [
61
+ 'error',
62
+ {
63
+ noTemplateLiterals: true,
64
+ },
65
+ ],
66
+ 'react/no-unknown-property': [
67
+ 'error',
68
+ {
69
+ requireDataLowercase: true,
70
+ },
71
+ ],
72
+ 'react/react-in-jsx-scope': 'off',
73
+ 'react/self-closing-comp': 'error',
74
+ 'react/state-in-constructor': ['error', 'never'],
75
+ 'react/style-prop-object': [
76
+ 'error',
77
+ {
78
+ allow: ['FormattedNumber'],
79
+ },
80
+ ],
81
+ },
115
82
  };
116
83
 
117
84
  export default react;