eslint-config-heck 1.47.2 → 1.49.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.
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ const node = require("./nodeWithBiome");
4
+
5
+ const env = {
6
+ ...node.env,
7
+
8
+ browser: true,
9
+ commonjs: true,
10
+ serviceworker: true,
11
+ "shared-node-browser": true,
12
+ worker: true,
13
+ };
14
+
15
+ module.exports = {
16
+ ...node,
17
+ env,
18
+ };
package/complexity.js CHANGED
@@ -3,14 +3,14 @@
3
3
  module.exports = {
4
4
  rules: {
5
5
  "max-depth": ["warn", 2],
6
- "max-lines-per-function": ["warn", 200],
6
+ "max-statements": ["warn", 20],
7
7
  "max-params": ["warn", 3],
8
8
  },
9
9
  overrides: [
10
10
  {
11
11
  files: ["*.spec.ts", "*.spec.tsx", "*.test.ts", "*.test.tsx", "*.spec.js", "*.spec.jsx", "*.test.js", "*.test.jsx"],
12
12
  rules: {
13
- "max-lines-per-function": "off",
13
+ "max-statements": "off",
14
14
  "max-params": "off",
15
15
  },
16
16
  },
package/node.js CHANGED
@@ -308,6 +308,7 @@ const rules = {
308
308
  "max-depth": "off",
309
309
  "max-len": "off",
310
310
  "max-lines": "off",
311
+ "max-lines-per-function": "off",
311
312
  "max-nested-callbacks": "off",
312
313
  "max-params": "off",
313
314
  "max-statements": "off",
@@ -0,0 +1,1231 @@
1
+ "use strict";
2
+
3
+ const path = require("node:path");
4
+
5
+ const parserOptions = {
6
+ sourceType: "script",
7
+
8
+ ecmaVersion: 13,
9
+ ecmaFeatures: {
10
+ globalReturn: false,
11
+ impliedStrict: false,
12
+ jsx: true,
13
+ },
14
+ };
15
+
16
+ const env = {
17
+ es2022: true,
18
+ node: true,
19
+ };
20
+
21
+ const globals = {};
22
+ const extendConfigs = ["plugin:import/typescript"];
23
+ const plugins = ["react", "react-hooks", "unicorn", "import"];
24
+ const settings = {
25
+ react: {
26
+ version: "detect",
27
+ },
28
+ };
29
+
30
+ const rules = {
31
+ // Possible problems
32
+ "for-direction": "off",
33
+ "getter-return": "off",
34
+ "no-async-promise-executor": "off",
35
+ "no-await-in-loop": "warn",
36
+ "no-compare-neg-zero": "off",
37
+ "no-cond-assign": "off",
38
+ "no-console": "off",
39
+ "no-constant-binary-expression": "error",
40
+ "no-constant-condition": "off",
41
+ "no-control-regex": "off",
42
+ "no-debugger": "off",
43
+ "no-dupe-args": "off",
44
+ "no-dupe-else-if": "error",
45
+ "no-dupe-keys": "off",
46
+ "no-duplicate-case": "off",
47
+ "no-empty": "error",
48
+ "no-empty-character-class": "error",
49
+ "no-ex-assign": "off",
50
+ "no-extra-boolean-cast": "off",
51
+ "no-extra-parens": "off",
52
+ "no-extra-semi": "off",
53
+ "no-func-assign": "off",
54
+ "no-import-assign": "off",
55
+ "no-inner-declarations": "off",
56
+ "no-invalid-regexp": "error",
57
+ "no-irregular-whitespace": [
58
+ "error",
59
+ {
60
+ skipComments: false,
61
+ skipRegExps: false,
62
+ skipStrings: false,
63
+ skipTemplates: false,
64
+ },
65
+ ],
66
+ "no-loss-of-precision": "off",
67
+ "no-misleading-character-class": "error",
68
+ "no-new-native-nonconstructor": "error",
69
+ "no-obj-calls": "off",
70
+ "no-promise-executor-return": "error",
71
+ "no-prototype-builtins": "off",
72
+ "no-regex-spaces": "off",
73
+ "no-setter-return": "off",
74
+ "no-sparse-arrays": "off",
75
+ "no-template-curly-in-string": "error",
76
+ "no-unexpected-multiline": "error",
77
+ "no-unreachable": "off",
78
+ "no-unreachable-loop": "error",
79
+ "no-unsafe-finally": "off",
80
+ "no-unsafe-negation": "off",
81
+ "no-unsafe-optional-chaining": "off",
82
+ "no-useless-backreference": "error",
83
+ "require-atomic-updates": "error",
84
+ "use-isnan": "off",
85
+ "valid-typeof": "off",
86
+
87
+ // Suggestions
88
+ "accessor-pairs": [
89
+ "error",
90
+ {
91
+ getWithoutSet: false,
92
+ setWithoutGet: true,
93
+ enforceForClassMembers: true,
94
+ },
95
+ ],
96
+ "array-callback-return": [
97
+ "error",
98
+ {
99
+ allowImplicit: true,
100
+ checkForEach: false,
101
+ },
102
+ ],
103
+ "block-scoped-var": "error",
104
+ "class-methods-use-this": "error",
105
+ complexity: "off",
106
+ "consistent-return": "error",
107
+ curly: "off",
108
+ "default-case": "off",
109
+ "default-case-last": "off",
110
+ "default-param-last": "off",
111
+ "dot-location": "off",
112
+ "dot-notation": "off",
113
+ eqeqeq: "off",
114
+ "grouped-accessor-pairs": ["error", "getBeforeSet"],
115
+ "guard-for-in": "error",
116
+ "logical-assignment-operators": "error",
117
+ "max-classes-per-file": "off",
118
+ "no-alert": "error",
119
+ "no-caller": "error",
120
+ "no-case-declarations": "off",
121
+ "no-constructor-return": "off",
122
+ "no-div-regex": "off",
123
+ "no-else-return": [
124
+ "error",
125
+ {
126
+ allowElseIf: false,
127
+ },
128
+ ],
129
+ "no-empty-function": "error",
130
+ "no-empty-pattern": "off",
131
+ "no-empty-static-block": "error",
132
+ "no-eq-null": "off",
133
+ "no-eval": "error",
134
+ "no-extend-native": "error",
135
+ "no-extra-bind": "error",
136
+ "no-extra-label": "off",
137
+ "no-fallthrough": "off",
138
+ "no-floating-decimal": "error",
139
+ "no-global-assign": "error",
140
+ "no-implicit-coercion": "error",
141
+ "no-implicit-globals": "off",
142
+ "no-implied-eval": "error",
143
+ "no-invalid-this": "error",
144
+ "no-iterator": "error",
145
+ "no-labels": "error",
146
+ "no-lone-blocks": "error",
147
+ "no-loop-func": "error",
148
+ "no-magic-numbers": "off",
149
+ "no-multi-spaces": "off",
150
+ "no-multi-str": "error",
151
+ "no-new": "error",
152
+ "no-new-func": "error",
153
+ "no-new-wrappers": "error",
154
+ "no-nonoctal-decimal-escape": "off",
155
+ "no-octal-escape": "error",
156
+ "no-param-reassign": "off",
157
+ "no-proto": "error",
158
+ "no-redeclare": "off",
159
+ "no-restricted-properties": "off",
160
+ "no-return-assign": "off",
161
+ "no-script-url": "error",
162
+ "no-self-assign": "off",
163
+ "no-self-compare": "off",
164
+ "no-sequences": "off",
165
+ "no-throw-literal": "error",
166
+ "no-unmodified-loop-condition": "error",
167
+ "no-unused-expressions": "error",
168
+ "no-unused-labels": "off",
169
+ "no-useless-call": "error",
170
+ "no-useless-catch": "off",
171
+ "no-useless-concat": "error",
172
+ "no-useless-escape": "error",
173
+ "no-useless-return": "error",
174
+ "no-void": "off",
175
+ "no-warning-comments": "warn",
176
+ "no-with": "off",
177
+ "prefer-named-capture-group": "error",
178
+ "prefer-object-has-own": "error",
179
+ "prefer-promise-reject-errors": "error",
180
+ "prefer-regex-literals": "error",
181
+ radix: ["error", "always"],
182
+ "require-await": "off",
183
+ "require-unicode-regexp": "error",
184
+ "vars-on-top": "error",
185
+ "wrap-iife": "off",
186
+ yoda: [
187
+ "error",
188
+ "never",
189
+ {
190
+ exceptRange: true,
191
+ onlyEquality: false,
192
+ },
193
+ ],
194
+
195
+ // Strict mode
196
+ strict: ["error", "global"],
197
+
198
+ // Variables
199
+ "init-declarations": "off",
200
+ "no-delete-var": "off",
201
+ "no-label-var": "off",
202
+ "no-restricted-globals": "off",
203
+ "no-shadow": "error",
204
+ "no-shadow-restricted-names": "off",
205
+ "no-undef": "off",
206
+ "no-undef-init": "error",
207
+ "no-undefined": "off",
208
+ "no-unused-vars": "off",
209
+ "no-use-before-define": ["error", "nofunc"],
210
+
211
+ // Layout & Formatting
212
+ "array-bracket-newline": "off",
213
+ "array-bracket-spacing": "off",
214
+ "array-element-newline": "off",
215
+ "block-spacing": "off",
216
+ "brace-style": "off",
217
+ camelcase: "error",
218
+ "capitalized-comments": "off",
219
+ "comma-dangle": "off",
220
+ "comma-spacing": "off",
221
+ "comma-style": "off",
222
+ "computed-property-spacing": "off",
223
+ "consistent-this": ["error", "that"],
224
+ "eol-last": "off",
225
+ "func-call-spacing": "off",
226
+ "func-name-matching": "off",
227
+ "func-names": "off",
228
+ "func-style": ["error", "declaration", { allowArrowFunctions: true }],
229
+ "function-call-argument-newline": "off",
230
+ "function-paren-newline": "off",
231
+ "id-denylist": "off",
232
+ "id-length": [
233
+ "error",
234
+ {
235
+ exceptions: ["_", "i", "j", "x", "y", "z"],
236
+ },
237
+ ],
238
+ "id-match": "off",
239
+ "implicit-arrow-linebreak": "off",
240
+ indent: "off",
241
+ "jsx-quotes": "off",
242
+ "key-spacing": "off",
243
+ "keyword-spacing": "off",
244
+ // redundant with no-inline-comments
245
+ "line-comment-position": "off",
246
+ "linebreak-style": "off",
247
+ "lines-around-comment": "off",
248
+ "lines-between-class-members": "off",
249
+ "max-depth": "off",
250
+ "max-len": "off",
251
+ "max-lines": "off",
252
+ "max-lines-per-function": "off",
253
+ "max-nested-callbacks": "off",
254
+ "max-params": "off",
255
+ "max-statements": "off",
256
+ "max-statements-per-line": "error",
257
+ "multiline-comment-style": ["error", "separate-lines"],
258
+ "multiline-ternary": "off",
259
+ "new-cap": "error",
260
+ "new-parens": "off",
261
+ "newline-per-chained-call": "off",
262
+ "no-array-constructor": "error",
263
+ "no-bitwise": [
264
+ "error",
265
+ {
266
+ allow: [],
267
+ int32Hint: false,
268
+ },
269
+ ],
270
+ "no-continue": "off",
271
+ "no-inline-comments": "error",
272
+ "no-lonely-if": "off",
273
+ "no-mixed-operators": "off",
274
+ "no-mixed-spaces-and-tabs": "off",
275
+ "no-multi-assign": "error",
276
+ "no-multiple-empty-lines": "off",
277
+ "no-negated-condition": "off",
278
+
279
+ "no-nested-ternary": "error",
280
+ "no-new-object": "error",
281
+ "no-plusplus": "off",
282
+ "no-restricted-syntax": "off",
283
+ "no-tabs": "off",
284
+ "no-ternary": "off",
285
+ "no-trailing-spaces": "off",
286
+ "no-underscore-dangle": [
287
+ "error",
288
+ {
289
+ enforceInMethodNames: true,
290
+ },
291
+ ],
292
+ "no-unneeded-ternary": "error",
293
+ "no-whitespace-before-property": "off",
294
+ "nonblock-statement-body-position": "off",
295
+ "object-curly-newline": "off",
296
+ "object-curly-spacing": "off",
297
+ "object-property-newline": "off",
298
+ "one-var": "off",
299
+ "one-var-declaration-per-line": "off",
300
+ "operator-assignment": "error",
301
+ "operator-linebreak": "off",
302
+ "padded-blocks": "off",
303
+ "padding-line-between-statements": [
304
+ "error",
305
+ // return
306
+ {
307
+ blankLine: "always", prev: "*", next: "return",
308
+ },
309
+ // const, let, var
310
+ {
311
+ blankLine: "always", prev: ["const", "let", "var"], next: "*",
312
+ },
313
+ {
314
+ blankLine: "always", prev: "*", next: ["const", "let", "var"],
315
+ },
316
+ {
317
+ blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"],
318
+ },
319
+ // import
320
+ {
321
+ blankLine: "always", prev: ["import", "cjs-import"], next: "*",
322
+ },
323
+ {
324
+ blankLine: "never", prev: ["import", "cjs-import"], next: ["import", "cjs-import"],
325
+ },
326
+ // export
327
+ {
328
+ blankLine: "always", prev: "*", next: ["export", "cjs-export"],
329
+ },
330
+ {
331
+ blankLine: "any", prev: ["export", "cjs-export"], next: ["export", "cjs-export"],
332
+ },
333
+ // function
334
+ {
335
+ blankLine: "always", prev: "*", next: "function",
336
+ },
337
+ ],
338
+ "prefer-exponentiation-operator": "off",
339
+ "prefer-object-spread": "error",
340
+ "quote-props": ["error", "as-needed"],
341
+ quotes: "off",
342
+ semi: "off",
343
+ "semi-spacing": "off",
344
+ "semi-style": "off",
345
+ "sort-keys": "off",
346
+ "sort-vars": "off",
347
+ "space-before-blocks": "off",
348
+ "space-before-function-paren": "off",
349
+ "space-in-parens": "off",
350
+ "space-infix-ops": "off",
351
+ "space-unary-ops": "off",
352
+ "spaced-comment": ["error", "always"],
353
+ "switch-colon-spacing": "off",
354
+ "template-tag-spacing": "off",
355
+ "unicode-bom": "error",
356
+ "wrap-regex": "off",
357
+
358
+ // ECMAScript6
359
+ "arrow-body-style": ["error", "as-needed"],
360
+ "arrow-parens": "off",
361
+ "arrow-spacing": "off",
362
+ "constructor-super": "off",
363
+ "generator-star-spacing": "off",
364
+ "no-class-assign": "off",
365
+ "no-confusing-arrow": "off",
366
+ "no-const-assign": "off",
367
+ "no-dupe-class-members": "off",
368
+ "no-duplicate-imports": "off",
369
+ "no-new-symbol": "off",
370
+ "no-restricted-imports": "off",
371
+ "no-restricted-exports": "off",
372
+ "no-this-before-super": "off",
373
+ "no-useless-computed-key": [
374
+ "error",
375
+ {
376
+ enforceForClassMembers: true,
377
+ },
378
+ ],
379
+ "no-useless-constructor": "off",
380
+ "no-useless-rename": "off",
381
+ "no-var": "off",
382
+ "object-shorthand": [
383
+ "error",
384
+ "always",
385
+ {
386
+ avoidExplicitReturnArrows: true,
387
+ },
388
+ ],
389
+ "prefer-arrow-callback": "off",
390
+ "prefer-const": "off",
391
+ "prefer-destructuring": [
392
+ "error",
393
+ {
394
+ VariableDeclarator: {
395
+ array: false,
396
+ object: true,
397
+ },
398
+ AssignmentExpression: {
399
+ array: false,
400
+ object: false,
401
+ },
402
+ },
403
+ ],
404
+ "prefer-numeric-literals": "off",
405
+ "prefer-rest-params": "off",
406
+ "prefer-spread": "error",
407
+ "prefer-template": "off",
408
+ "require-yield": "off",
409
+ "rest-spread-spacing": "off",
410
+ "sort-imports": "off",
411
+ "symbol-description": "error",
412
+ "template-curly-spacing": "off",
413
+ "yield-star-spacing": "off",
414
+
415
+ // eslint-plugin-react
416
+ "react/boolean-prop-naming": "off",
417
+ "react/button-has-type": "off",
418
+ "react/default-props-match-prop-types": "off",
419
+ "react/destructuring-assignment": [
420
+ "error",
421
+ "always",
422
+ { destructureInSignature: "always" },
423
+ ],
424
+ "react/display-name": "off",
425
+ "react/forbid-component-props": "off",
426
+ "react/forbid-dom-props": "off",
427
+ "react/forbid-elements": "off",
428
+ "react/forbid-foreign-prop-types": "off",
429
+ "react/forbid-prop-types": "off",
430
+ "react/function-component-definition": [
431
+ "error",
432
+ {
433
+ namedComponents: "function-declaration",
434
+ unnamedComponents: "arrow-function",
435
+ },
436
+ ],
437
+ "react/hook-use-state": [
438
+ "error",
439
+ {
440
+ allowDestructuredState: true,
441
+ },
442
+ ],
443
+ "react/iframe-missing-sandbox": "error",
444
+ "react/jsx-boolean-value": "off",
445
+ "react/jsx-child-element-spacing": "error",
446
+ "react/jsx-closing-bracket-location": "off",
447
+ "react/jsx-closing-tag-location": "off",
448
+ "react/jsx-curly-brace-presence": ["error", "always"],
449
+ "react/jsx-curly-newline": "off",
450
+ "react/jsx-curly-spacing": "off",
451
+ "react/jsx-equals-spacing": "off",
452
+ "react/jsx-filename-extension": [
453
+ "error",
454
+ {
455
+ extensions: [".jsx", ".tsx"],
456
+ },
457
+ ],
458
+ "react/jsx-first-prop-new-line": "off",
459
+ "react/jsx-fragments": "off",
460
+ "react/jsx-handler-names": "error",
461
+ "react/jsx-indent": "off",
462
+ "react/jsx-indent-props": "off",
463
+ "react/jsx-key": [
464
+ "error",
465
+ {
466
+ checkFragmentShorthand: true,
467
+ checkKeyMustBeforeSpread: true,
468
+ },
469
+ ],
470
+ "react/jsx-max-depth": "off",
471
+ "react/jsx-max-props-per-line": "off",
472
+ "react/jsx-newline": "off",
473
+ "react/jsx-no-bind": ["error", { allowArrowFunctions: true }],
474
+ "react/jsx-no-comment-textnodes": "off",
475
+ "react/jsx-no-constructed-context-values": "error",
476
+ "react/jsx-no-duplicate-props": "off",
477
+ "react/jsx-no-leaked-render": "error",
478
+ "react/jsx-no-literals": "off",
479
+ "react/jsx-no-script-url": "error",
480
+ "react/jsx-no-target-blank": "off",
481
+ "react/jsx-no-undef": [
482
+ "error",
483
+ {
484
+ allowGlobals: false,
485
+ },
486
+ ],
487
+ "react/jsx-no-useless-fragment": "off",
488
+ "react/jsx-one-expression-per-line": "off",
489
+ "react/jsx-pascal-case": "error",
490
+ "react/jsx-props-no-multi-spaces": "off",
491
+ "react/jsx-props-no-spreading": "off",
492
+ "react/jsx-sort-props": "off",
493
+ "react/jsx-tag-spacing": "off",
494
+ "react/jsx-uses-react": "off",
495
+ "react/jsx-uses-vars": "error",
496
+ "react/jsx-wrap-multilines": "off",
497
+ "react/no-access-state-in-setstate": "error",
498
+ "react/no-adjacent-inline-elements": "error",
499
+ "react/no-array-index-key": "off",
500
+ "react/no-arrow-function-lifecycle": "error",
501
+ "react/no-children-prop": "off",
502
+ "react/no-danger": "error",
503
+ "react/no-danger-with-children": "off",
504
+ "react/no-deprecated": "error",
505
+ "react/no-did-mount-set-state": "error",
506
+ "react/no-did-update-set-state": "error",
507
+ "react/no-direct-mutation-state": "error",
508
+ "react/no-find-dom-node": "error",
509
+ "react/no-invalid-html-attribute": "error",
510
+ "react/no-is-mounted": "error",
511
+ "react/no-multi-comp": "off",
512
+ "react/no-namespace": "error",
513
+ "react/no-object-type-as-default-prop": "error",
514
+ "react/no-redundant-should-component-update": "error",
515
+ "react/no-render-return-value": "off",
516
+ "react/no-set-state": "off",
517
+ "react/no-string-refs": [
518
+ "error",
519
+ {
520
+ noTemplateLiterals: true,
521
+ },
522
+ ],
523
+ "react/no-this-in-sfc": "error",
524
+ "react/no-typos": "error",
525
+ "react/no-unescaped-entities": "error",
526
+ "react/no-unknown-property": "error",
527
+ "react/no-unsafe": "error",
528
+ "react/no-unstable-nested-components": "error",
529
+ "react/no-unused-class-component-methods": "error",
530
+ "react/no-unused-prop-types": "error",
531
+ "react/no-unused-state": "error",
532
+ "react/no-will-update-set-state": "error",
533
+ "react/prefer-es6-class": ["error", "always"],
534
+ "react/prefer-exact-props": "off",
535
+ "react/prefer-read-only-props": "off",
536
+ "react/prefer-stateless-function": "error",
537
+ "react/prop-types": "off",
538
+ "react/react-in-jsx-scope": "off",
539
+ "react/require-default-props": "off",
540
+ "react/require-optimization": "off",
541
+ "react/require-render-return": "error",
542
+ "react/self-closing-comp": "off",
543
+ "react/sort-comp": [
544
+ "error",
545
+ {
546
+ order: [
547
+ "static-variables",
548
+ "instance-variables",
549
+ "static-methods",
550
+ "lifecycle",
551
+ "render",
552
+ "everything-else",
553
+ ],
554
+ groups: {
555
+ render: ["render", "/^render.+$/"],
556
+ },
557
+ },
558
+ ],
559
+ "react/sort-default-props": "off",
560
+ "react/sort-prop-types": [
561
+ "error",
562
+ {
563
+ callbacksLast: true,
564
+ ignoreCase: true,
565
+ requiredFirst: true,
566
+ sortShapeProp: true,
567
+ noSortAlphabetically: true,
568
+ },
569
+ ],
570
+ "react/state-in-constructor": "error",
571
+ "react/static-property-placement": "off",
572
+ "react/style-prop-object": "error",
573
+ "react/void-dom-elements-no-children": "off",
574
+
575
+ // eslint-plugin-react-hooks
576
+ "react-hooks/rules-of-hooks": "error",
577
+ "react-hooks/exhaustive-deps": "error",
578
+
579
+ // eslint-plugin-unicorn
580
+ "unicorn/better-regex": "error",
581
+ "unicorn/catch-error-name": [
582
+ "error", {
583
+ name: "ex",
584
+ ignore: ["^ex([A-Z0-9].*)?$"],
585
+ },
586
+ ],
587
+ "unicorn/consistent-destructuring": "error",
588
+ "unicorn/consistent-function-scoping": [
589
+ "error", {
590
+ checkArrowFunctions: false,
591
+ },
592
+ ],
593
+ "unicorn/custom-error-definition": "off",
594
+ "unicorn/empty-brace-spaces": "off",
595
+ "unicorn/error-message": "error",
596
+ "unicorn/escape-case": "error",
597
+ "unicorn/expiring-todo-comments": "error",
598
+ "unicorn/explicit-length-check": "error",
599
+ "unicorn/filename-case": [
600
+ "error", {
601
+ cases: {
602
+ camelCase: true,
603
+ pascalCase: true,
604
+ kebabCase: false,
605
+ snakeCase: false,
606
+ },
607
+ },
608
+ ],
609
+ "unicorn/import-style": "error",
610
+ "unicorn/new-for-builtins": "error",
611
+ "unicorn/no-abusive-eslint-disable": "error",
612
+ "unicorn/no-array-callback-reference": "off",
613
+ "unicorn/no-array-for-each": "off",
614
+ "unicorn/no-array-method-this-argument": "error",
615
+ "unicorn/no-array-push-push": "error",
616
+ "unicorn/no-array-reduce": "off",
617
+ "unicorn/no-await-expression-member": "error",
618
+ "unicorn/no-console-spaces": "error",
619
+ "unicorn/no-document-cookie": "error",
620
+ "unicorn/no-empty-file": "error",
621
+ "unicorn/no-for-loop": "error",
622
+ "unicorn/no-hex-escape": "error",
623
+ "unicorn/no-instanceof-array": "off",
624
+ "unicorn/no-invalid-remove-event-listener": "error",
625
+ "unicorn/no-keyword-prefix": "off",
626
+ "unicorn/no-lonely-if": "error",
627
+ "unicorn/no-negated-condition": "off",
628
+ "unicorn/no-nested-ternary": "off",
629
+ "unicorn/no-new-array": "error",
630
+ "unicorn/no-new-buffer": "error",
631
+ "unicorn/no-null": "off",
632
+ "unicorn/no-object-as-default-parameter": "error",
633
+ "unicorn/no-process-exit": "error",
634
+ "unicorn/no-static-only-class": "off",
635
+ "unicorn/no-thenable": "error",
636
+ "unicorn/no-this-assignment": "error",
637
+ "unicorn/no-unnecessary-await": "error",
638
+ "unicorn/no-unreadable-array-destructuring": "error",
639
+ "unicorn/no-unreadable-iife": "error",
640
+ "unicorn/no-unused-properties": "error",
641
+ "unicorn/no-useless-fallback-in-spread": "error",
642
+ "unicorn/no-useless-length-check": "error",
643
+ "unicorn/no-useless-promise-resolve-reject": "error",
644
+ "unicorn/no-useless-spread": "error",
645
+ "unicorn/no-useless-switch-case": "off",
646
+ "unicorn/no-useless-undefined": "error",
647
+ "unicorn/no-typeof-undefined": "error",
648
+ "unicorn/no-zero-fractions": "error",
649
+ "unicorn/number-literal-case": "off",
650
+ "unicorn/numeric-separators-style": "error",
651
+ "unicorn/prefer-add-event-listener": "error",
652
+ "unicorn/prefer-array-find": [
653
+ "error", {
654
+ checkFromLast: true,
655
+ },
656
+ ],
657
+ "unicorn/prefer-array-flat": "error",
658
+ "unicorn/prefer-array-flat-map": "off",
659
+ "unicorn/prefer-array-index-of": "error",
660
+ "unicorn/prefer-array-some": "error",
661
+ "unicorn/prefer-at": "error",
662
+ "unicorn/prefer-blob-reading-methods": "error",
663
+ "unicorn/prefer-code-point": "error",
664
+ "unicorn/prefer-date-now": "error",
665
+ "unicorn/prefer-default-parameters": "error",
666
+ "unicorn/prefer-dom-node-append": "error",
667
+ "unicorn/prefer-dom-node-dataset": "error",
668
+ "unicorn/prefer-dom-node-remove": "error",
669
+ "unicorn/prefer-dom-node-text-content": "error",
670
+ "unicorn/prefer-event-target": "off",
671
+ "unicorn/prefer-export-from": "off",
672
+ "unicorn/prefer-includes": "error",
673
+ "unicorn/prefer-json-parse-buffer": "error",
674
+ "unicorn/prefer-keyboard-event-key": "error",
675
+ "unicorn/prefer-logical-operator-over-ternary": "error",
676
+ "unicorn/prefer-math-trunc": "error",
677
+ "unicorn/prefer-modern-dom-apis": "error",
678
+ "unicorn/prefer-modern-math-apis": "error",
679
+ "unicorn/prefer-module": "off",
680
+ "unicorn/prefer-native-coercion-functions": "error",
681
+ "unicorn/prefer-negative-index": "error",
682
+ "unicorn/prefer-node-protocol": "error",
683
+ "unicorn/prefer-number-properties": "error",
684
+ "unicorn/prefer-object-from-entries": "error",
685
+ "unicorn/prefer-optional-catch-binding": "error",
686
+ "unicorn/prefer-prototype-methods": "off",
687
+ "unicorn/prefer-query-selector": "off",
688
+ "unicorn/prefer-reflect-apply": "error",
689
+ "unicorn/prefer-regexp-test": "error",
690
+ "unicorn/prefer-set-has": "error",
691
+ "unicorn/prefer-set-size": "error",
692
+ "unicorn/prefer-spread": "error",
693
+
694
+ "unicorn/prefer-string-replace-all": "error",
695
+ "unicorn/prefer-string-slice": "error",
696
+ "unicorn/prefer-string-starts-ends-with": "error",
697
+ "unicorn/prefer-string-trim-start-end": "error",
698
+ "unicorn/prefer-switch": "error",
699
+
700
+ // TODO: off until there is a solution to this: https://github.com/sindresorhus/eslint-plugin-unicorn/issues/1079
701
+ "unicorn/prefer-ternary": "off",
702
+ "unicorn/prefer-top-level-await": "off",
703
+ "unicorn/prefer-type-error": "error",
704
+ "unicorn/prevent-abbreviations": "off",
705
+ "unicorn/relative-url-style": "error",
706
+ "unicorn/require-array-join-separator": "error",
707
+ "unicorn/require-number-to-fixed-digits-argument": "error",
708
+ "unicorn/require-post-message-target-origin": "error",
709
+ "unicorn/string-content": "off",
710
+ "unicorn/switch-case-braces": "off",
711
+ "unicorn/template-indent": "off",
712
+ "unicorn/text-encoding-identifier-case": "error",
713
+ "unicorn/throw-new-error": "error",
714
+
715
+ // eslint-plugin-import
716
+ "import/export": "off",
717
+ "import/no-deprecated": "off",
718
+ "import/no-empty-named-blocks": "error",
719
+ "import/no-extraneous-dependencies": "off",
720
+ "import/no-mutable-exports": "error",
721
+ "import/no-named-as-default": "error",
722
+ "import/no-named-as-default-member": "off",
723
+ "import/no-unused-modules": "off",
724
+ "import/no-amd": "off",
725
+ "import/no-commonjs": "off",
726
+ "import/no-import-module-exports": "off",
727
+ "import/no-nodejs-modules": "off",
728
+ "import/unambiguous": "off",
729
+ "import/default": "off",
730
+ "import/named": "off",
731
+ "import/namespace": "off",
732
+ "import/no-absolute-path": "error",
733
+ "import/no-cycle": [
734
+ "error",
735
+ {
736
+ ignoreExternal: true,
737
+ },
738
+ ],
739
+ "import/no-dynamic-require": "off",
740
+ "import/no-internal-modules": "off",
741
+ "import/no-relative-packages": "off",
742
+ "import/no-relative-parent-imports": "off",
743
+ "import/no-restricted-paths": "off",
744
+ "import/no-self-import": "error",
745
+ "import/no-unresolved": "off",
746
+ "import/no-useless-path-segments": [
747
+ "error",
748
+ {
749
+ noUselessIndex: true,
750
+ },
751
+ ],
752
+ "import/no-webpack-loader-syntax": "error",
753
+ "import/consistent-type-specifier-style": "off",
754
+ "import/dynamic-import-chunkname": "off",
755
+ "import/exports-last": "error",
756
+ "import/extensions": "off",
757
+ "import/first": "error",
758
+ "import/group-exports": "error",
759
+ "import/max-dependencies": "off",
760
+ "import/newline-after-import": "off",
761
+ "import/no-anonymous-default-export": "error",
762
+ "import/no-default-export": "off",
763
+ "import/no-duplicates": "error",
764
+ "import/no-named-default": "off",
765
+ "import/no-named-export": "off",
766
+ "import/no-namespace": "off",
767
+ "import/no-unassigned-import": "off",
768
+ "import/order": "off",
769
+ "import/prefer-default-export": "off",
770
+ };
771
+
772
+ const overrides = [
773
+ {
774
+ files: ["*.ts", "*.tsx"],
775
+ parser: "@typescript-eslint/parser",
776
+ parserOptions: {
777
+ ...parserOptions,
778
+ sourceType: "module",
779
+ project: path.join(".", "tsconfig.json"),
780
+ },
781
+ globals: {
782
+ ...globals,
783
+ NodeJS: true,
784
+ },
785
+ plugins: [...plugins, "@typescript-eslint", "deprecation"],
786
+ rules: {
787
+ // Typescript
788
+ "@typescript-eslint/adjacent-overload-signatures": "error",
789
+ "@typescript-eslint/array-type": "off",
790
+ "@typescript-eslint/await-thenable": "error",
791
+ "@typescript-eslint/ban-ts-comment": [
792
+ "error",
793
+ {
794
+ "ts-expect-error": true,
795
+ "ts-ignore": true,
796
+ "ts-nocheck": true,
797
+ "ts-check": false,
798
+ },
799
+ ],
800
+ "@typescript-eslint/ban-tslint-comment": "error",
801
+ "@typescript-eslint/ban-types": "error",
802
+ "@typescript-eslint/class-literal-property-style": "error",
803
+ "@typescript-eslint/consistent-indexed-object-style": "error",
804
+ "@typescript-eslint/consistent-type-assertions": "error",
805
+ "@typescript-eslint/consistent-type-definitions": ["error", "interface"],
806
+ "@typescript-eslint/consistent-type-imports": [
807
+ "error",
808
+ {
809
+ prefer: "no-type-imports",
810
+ disallowTypeAnnotations: false,
811
+ },
812
+ ],
813
+ "@typescript-eslint/explicit-function-return-type": [
814
+ "error",
815
+ {
816
+ allowExpressions: true,
817
+ allowTypedFunctionExpressions: true,
818
+ allowHigherOrderFunctions: true,
819
+ allowDirectConstAssertionInArrowFunctions: true,
820
+ allowConciseArrowFunctionExpressionsStartingWithVoid: false,
821
+ },
822
+ ],
823
+ "@typescript-eslint/explicit-member-accessibility": "error",
824
+ "@typescript-eslint/explicit-module-boundary-types": "off",
825
+ "@typescript-eslint/member-delimiter-style": "off",
826
+ "@typescript-eslint/member-ordering": "off",
827
+ "@typescript-eslint/method-signature-style": "error",
828
+ camelcase: "off",
829
+ "@typescript-eslint/naming-convention": [
830
+ "error",
831
+ {
832
+ selector: ["variableLike", "memberLike"],
833
+ format: ["strictCamelCase", "StrictPascalCase"],
834
+ filter: {
835
+ regex: "^__html$", match: false,
836
+ },
837
+ },
838
+ {
839
+ selector: ["parameter"],
840
+ modifiers: ["unused"],
841
+ format: ["strictCamelCase"],
842
+ leadingUnderscore: "require",
843
+ },
844
+ {
845
+ selector: ["typeLike"],
846
+ format: ["StrictPascalCase"],
847
+ },
848
+ {
849
+ selector: ["typeParameter"],
850
+ format: ["StrictPascalCase"],
851
+ prefix: ["T"],
852
+ },
853
+ {
854
+ selector: "variable",
855
+ modifiers: ["destructured"],
856
+ format: null,
857
+ },
858
+ ],
859
+ "@typescript-eslint/no-base-to-string": "error",
860
+ "@typescript-eslint/no-confusing-non-null-assertion": "error",
861
+ "@typescript-eslint/no-confusing-void-expression": "off",
862
+ "@typescript-eslint/no-duplicate-enum-values": "error",
863
+ "@typescript-eslint/no-duplicate-type-constituents": "error",
864
+ "@typescript-eslint/no-dynamic-delete": "error",
865
+ "@typescript-eslint/no-explicit-any": "off",
866
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
867
+ "@typescript-eslint/no-extraneous-class": "error",
868
+ "@typescript-eslint/no-floating-promises": [
869
+ "error",
870
+ {
871
+ ignoreVoid: false,
872
+ },
873
+ ],
874
+ "@typescript-eslint/no-for-in-array": "error",
875
+ "@typescript-eslint/no-import-type-side-effects": "off",
876
+ "@typescript-eslint/no-inferrable-types": "off",
877
+ "@typescript-eslint/no-invalid-void-type": "off",
878
+ "@typescript-eslint/no-meaningless-void-operator": "off",
879
+ "@typescript-eslint/no-misused-new": "error",
880
+ "@typescript-eslint/no-misused-promises": "error",
881
+ "@typescript-eslint/no-mixed-enums": "off",
882
+ "@typescript-eslint/no-namespace": "off",
883
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error",
884
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "error",
885
+ "@typescript-eslint/no-non-null-assertion": "off",
886
+ "@typescript-eslint/no-redundant-type-constituents": "error",
887
+ "@typescript-eslint/no-require-imports": "error",
888
+ "@typescript-eslint/no-this-alias": "off",
889
+ "@typescript-eslint/no-type-alias": "off",
890
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error",
891
+ "@typescript-eslint/no-unnecessary-condition": "error",
892
+ "@typescript-eslint/no-unnecessary-qualifier": "error",
893
+ "@typescript-eslint/no-unnecessary-type-arguments": "error",
894
+ "@typescript-eslint/no-unnecessary-type-assertion": "error",
895
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
896
+ "@typescript-eslint/no-unsafe-argument": "error",
897
+ "@typescript-eslint/no-unsafe-assignment": "error",
898
+ "@typescript-eslint/no-unsafe-call": "error",
899
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
900
+ "@typescript-eslint/no-unsafe-enum-comparison": "error",
901
+ "@typescript-eslint/no-unsafe-member-access": "error",
902
+ "@typescript-eslint/no-unsafe-return": "error",
903
+ "@typescript-eslint/no-useless-empty-export": "off",
904
+ "@typescript-eslint/no-var-requires": "error",
905
+ "@typescript-eslint/non-nullable-type-assertion-style": "off",
906
+ "@typescript-eslint/parameter-properties": "off",
907
+ "@typescript-eslint/prefer-as-const": "error",
908
+ "@typescript-eslint/prefer-enum-initializers": "off",
909
+ "@typescript-eslint/prefer-for-of": "error",
910
+ "@typescript-eslint/prefer-function-type": "off",
911
+ "@typescript-eslint/prefer-includes": "error",
912
+ "@typescript-eslint/prefer-literal-enum-member": "error",
913
+ "@typescript-eslint/prefer-namespace-keyword": "off",
914
+ "@typescript-eslint/prefer-nullish-coalescing": [
915
+ "error",
916
+ {
917
+ ignoreConditionalTests: true,
918
+ ignoreMixedLogicalExpressions: true,
919
+ },
920
+ ],
921
+ "@typescript-eslint/prefer-optional-chain": "error",
922
+ "@typescript-eslint/prefer-readonly": [
923
+ "error",
924
+ {
925
+ onlyInlineLambdas: true,
926
+ },
927
+ ],
928
+ "@typescript-eslint/prefer-readonly-parameter-types": "off",
929
+ "@typescript-eslint/prefer-reduce-type-parameter": "error",
930
+ "@typescript-eslint/prefer-regexp-exec": "error",
931
+ "@typescript-eslint/prefer-return-this-type": "error",
932
+ "@typescript-eslint/prefer-string-starts-ends-with": "error",
933
+ "@typescript-eslint/prefer-ts-expect-error": "error",
934
+ "@typescript-eslint/promise-function-async": "error",
935
+ "@typescript-eslint/require-array-sort-compare": "error",
936
+ "@typescript-eslint/restrict-plus-operands": "error",
937
+ "@typescript-eslint/restrict-template-expressions": "off",
938
+ "@typescript-eslint/strict-boolean-expressions": "off",
939
+ "@typescript-eslint/switch-exhaustiveness-check": "error",
940
+ "@typescript-eslint/triple-slash-reference": "error",
941
+ "@typescript-eslint/type-annotation-spacing": "off",
942
+ "@typescript-eslint/typedef": "off",
943
+ "@typescript-eslint/unbound-method": [
944
+ "error",
945
+ {
946
+ ignoreStatic: true,
947
+ },
948
+ ],
949
+ "@typescript-eslint/unified-signatures": "error",
950
+
951
+ // Extension rules
952
+ "block-spacing": "off",
953
+ "@typescript-eslint/block-spacing": "off",
954
+ "brace-style": "off",
955
+ "@typescript-eslint/brace-style": "off",
956
+ "class-methods-use-this": "off",
957
+ "@typescript-eslint/class-methods-use-this": "error",
958
+ "comma-dangle": "off",
959
+ "@typescript-eslint/comma-dangle": "off",
960
+ "comma-spacing": "off",
961
+ "@typescript-eslint/comma-spacing": "off",
962
+ "default-param-last": "off",
963
+ "@typescript-eslint/default-param-last": "off",
964
+ "dot-notation": "off",
965
+ "@typescript-eslint/dot-notation": "off",
966
+ "func-call-spacing": "off",
967
+ "@typescript-eslint/func-call-spacing": "off",
968
+ indent: "off",
969
+ "@typescript-eslint/indent": "off",
970
+ "init-declarations": "off",
971
+ "@typescript-eslint/init-declarations": "off",
972
+ "key-spacing": "off",
973
+ "@typescript-eslint/key-spacing": "off",
974
+ "keyword-spacing": "off",
975
+ "@typescript-eslint/keyword-spacing": "off",
976
+ "lines-between-class-members": "off",
977
+ "@typescript-eslint/lines-between-class-members": "off",
978
+ "no-array-constructor": "off",
979
+ "@typescript-eslint/no-array-constructor": "error",
980
+ "no-dupe-class-members": "off",
981
+ "@typescript-eslint/no-dupe-class-members": "off",
982
+ "no-empty-function": "off",
983
+ "@typescript-eslint/no-empty-function": "error",
984
+ "no-extra-parens": "off",
985
+ "@typescript-eslint/no-extra-parens": "off",
986
+ "no-extra-semi": "off",
987
+ "@typescript-eslint/no-extra-semi": "off",
988
+ "no-implied-eval": "off",
989
+ "@typescript-eslint/no-implied-eval": "error",
990
+ "no-invalid-this": "off",
991
+ "@typescript-eslint/no-invalid-this": "error",
992
+ "no-loop-func": "off",
993
+ "@typescript-eslint/no-loop-func": "error",
994
+ "no-loss-of-precision": "off",
995
+ "@typescript-eslint/no-loss-of-precision": "off",
996
+ "no-magic-numbers": "off",
997
+ "@typescript-eslint/no-magic-numbers": "off",
998
+ "no-redeclare": "off",
999
+ "@typescript-eslint/no-redeclare": "off",
1000
+ "no-restricted-imports": "off",
1001
+ "@typescript-eslint/no-restricted-imports": "off",
1002
+ "no-shadow": "off",
1003
+ "@typescript-eslint/no-shadow": "error",
1004
+ "no-throw-literal": "off",
1005
+ "@typescript-eslint/no-throw-literal": [
1006
+ "error",
1007
+ {
1008
+ allowThrowingAny: false,
1009
+ allowThrowingUnknown: false,
1010
+ },
1011
+ ],
1012
+ "no-unused-expressions": "off",
1013
+ "@typescript-eslint/no-unused-expressions": "error",
1014
+ "no-unused-vars": "off",
1015
+ "@typescript-eslint/no-unused-vars": "off",
1016
+ "no-use-before-define": "off",
1017
+ "@typescript-eslint/no-use-before-define": "off",
1018
+ "no-useless-constructor": "off",
1019
+ "@typescript-eslint/no-useless-constructor": "off",
1020
+ "object-curly-spacing": "off",
1021
+ "@typescript-eslint/object-curly-spacing": "off",
1022
+ "padding-line-between-statements": "off",
1023
+ "@typescript-eslint/padding-line-between-statements": [
1024
+ "error",
1025
+ // return
1026
+ {
1027
+ blankLine: "always", prev: "*", next: "return",
1028
+ },
1029
+ // const, let, var
1030
+ {
1031
+ blankLine: "always", prev: ["const", "let", "var"], next: "*",
1032
+ },
1033
+ {
1034
+ blankLine: "always", prev: "*", next: ["const", "let", "var"],
1035
+ },
1036
+ {
1037
+ blankLine: "any", prev: ["const", "let", "var"], next: ["const", "let", "var"],
1038
+ },
1039
+ // import
1040
+ {
1041
+ blankLine: "always", prev: "import", next: "*",
1042
+ },
1043
+ {
1044
+ blankLine: "never", prev: "import", next: "import",
1045
+ },
1046
+ // export
1047
+ {
1048
+ blankLine: "always", prev: "*", next: "export",
1049
+ },
1050
+ {
1051
+ blankLine: "any", prev: "export", next: "export",
1052
+ },
1053
+ // function
1054
+ {
1055
+ blankLine: "always", prev: "*", next: "function",
1056
+ },
1057
+ // interface
1058
+ {
1059
+ blankLine: "always", prev: "*", next: "interface",
1060
+ },
1061
+ {
1062
+ blankLine: "always", prev: "interface", next: "*",
1063
+ },
1064
+ // type
1065
+ {
1066
+ blankLine: "always", prev: "*", next: "type",
1067
+ },
1068
+ {
1069
+ blankLine: "any", prev: "type", next: "type",
1070
+ },
1071
+ ],
1072
+ quotes: "off",
1073
+ "@typescript-eslint/quotes": "off",
1074
+ "require-await": "off",
1075
+ "@typescript-eslint/require-await": "off",
1076
+ "@typescript-eslint/return-await": "off",
1077
+ semi: "off",
1078
+ "@typescript-eslint/semi": "off",
1079
+ "space-before-blocks": "off",
1080
+ "@typescript-eslint/space-before-blocks": "off",
1081
+ "space-before-function-paren": "off",
1082
+ "@typescript-eslint/space-before-function-paren": "off",
1083
+ "space-infix-ops": "off",
1084
+ "@typescript-eslint/space-infix-ops": "off",
1085
+
1086
+ // Deprecation
1087
+ "deprecation/deprecation": "warn",
1088
+
1089
+ // Typescript handles itself
1090
+ "consistent-return": "off",
1091
+ "constructor-super": "off",
1092
+ "getter-return": "off",
1093
+ "no-class-assign": "off",
1094
+ "no-const-assign": "off",
1095
+ "no-delete-var": "off",
1096
+ "no-dupe-args": "off",
1097
+ "no-dupe-keys": "off",
1098
+ "no-func-assign": "off",
1099
+ "no-import-assign": "off",
1100
+ "no-new-symbol": "off",
1101
+ "no-nonoctal-decimal-escape": "off",
1102
+ "no-obj-calls": "off",
1103
+ "no-octal-escape": "off",
1104
+ "no-setter-return": "off",
1105
+ "no-shadow-restricted-names": "off",
1106
+ "no-undef": "off",
1107
+ "no-undefined": "off",
1108
+ "no-unexpected-multiline": "off",
1109
+ "no-unsafe-negation": "off",
1110
+ "no-with": "off",
1111
+ "valid-typeof": "off",
1112
+
1113
+ // React
1114
+ // If you are working in a typed-codebase which encourages you to always use boolean conditions, this rule can be disabled.
1115
+ "react/jsx-no-leaked-render": "off",
1116
+ },
1117
+ },
1118
+ {
1119
+ files: ["*.spec.ts", "*.spec.tsx", "*.test.ts", "*.test.tsx", "*.spec.js", "*.spec.jsx", "*.test.js", "*.test.jsx"],
1120
+ plugins: ["jest", "testing-library"],
1121
+ rules: {
1122
+ // eslint-plugin-jest
1123
+ "jest/consistent-test-it": "error",
1124
+ "jest/expect-expect": [
1125
+ "error", {
1126
+ assertFunctionNames: ["expect*"],
1127
+ },
1128
+ ],
1129
+ "jest/max-expects": "off",
1130
+ "jest/max-nested-describe": "off",
1131
+ "jest/no-alias-methods": "error",
1132
+ "jest/no-commented-out-tests": "error",
1133
+ "jest/no-conditional-expect": "error",
1134
+ "jest/no-conditional-in-test": "error",
1135
+ "jest/no-deprecated-functions": "error",
1136
+ "jest/no-disabled-tests": "warn",
1137
+ "jest/no-done-callback": "error",
1138
+ "jest/no-duplicate-hooks": "error",
1139
+ "jest/no-export": "error",
1140
+ "jest/no-focused-tests": "warn",
1141
+ "jest/no-hooks": "off",
1142
+ "jest/no-identical-title": "error",
1143
+ "jest/no-interpolation-in-snapshots": "error",
1144
+ "jest/no-jasmine-globals": "error",
1145
+ "jest/no-large-snapshots": "off",
1146
+ "jest/no-mocks-import": "error",
1147
+ "jest/no-restricted-matchers": "off",
1148
+ "jest/no-standalone-expect": "error",
1149
+ "jest/no-test-prefixes": "error",
1150
+ "jest/no-test-return-statement": "error",
1151
+ "jest/prefer-called-with": "error",
1152
+ "jest/prefer-comparison-matcher": "error",
1153
+ "jest/prefer-each": "error",
1154
+ "jest/prefer-equality-matcher": "error",
1155
+ "jest/prefer-expect-assertions": "off",
1156
+ "jest/prefer-expect-resolves": "error",
1157
+ "jest/prefer-hooks-on-top": "error",
1158
+ "jest/prefer-lowercase-title": [
1159
+ "error", {
1160
+ ignore: ["describe"],
1161
+ },
1162
+ ],
1163
+ "jest/prefer-mock-promise-shorthand": "error",
1164
+ "jest/prefer-snapshot-hint": "error",
1165
+ "jest/prefer-spy-on": "error",
1166
+ "jest/prefer-strict-equal": "error",
1167
+ "jest/prefer-to-be": "error",
1168
+ "jest/prefer-to-contain": "error",
1169
+ "jest/prefer-to-have-length": "error",
1170
+ "jest/prefer-todo": "warn",
1171
+ "jest/require-hook": "error",
1172
+ "jest/require-to-throw-message": "error",
1173
+ "jest/require-top-level-describe": "error",
1174
+ "jest/valid-describe-callback": "error",
1175
+ "jest/valid-expect": "error",
1176
+ "jest/valid-expect-in-promise": "error",
1177
+ "jest/valid-title": "error",
1178
+ "@typescript-eslint/unbound-method": "off",
1179
+ "jest/unbound-method": "error",
1180
+
1181
+ // plugin-testing-library
1182
+ "testing-library/await-async-events": "error",
1183
+ "testing-library/await-async-queries": "error",
1184
+ "testing-library/await-async-utils": "error",
1185
+ "testing-library/consistent-data-testid": "off",
1186
+ "testing-library/no-await-sync-events": "off",
1187
+ "testing-library/no-await-sync-queries": "off",
1188
+ "testing-library/no-container": "error",
1189
+ "testing-library/no-debugging-utils": "error",
1190
+ "testing-library/no-dom-import": ["error", "react"],
1191
+ "testing-library/no-global-regexp-flag-in-query": "error",
1192
+ "testing-library/no-manual-cleanup": "error",
1193
+ "testing-library/no-node-access": "error",
1194
+ "testing-library/no-promise-in-fire-event": "off",
1195
+ "testing-library/no-render-in-lifecycle": "error",
1196
+ "testing-library/no-unnecessary-act": "error",
1197
+ "testing-library/no-wait-for-multiple-assertions": "error",
1198
+ "testing-library/no-wait-for-side-effects": "error",
1199
+ "testing-library/no-wait-for-snapshot": "error",
1200
+ "testing-library/prefer-explicit-assert": "error",
1201
+ "testing-library/prefer-find-by": "error",
1202
+ "testing-library/prefer-presence-queries": "error",
1203
+ "testing-library/prefer-query-by-disappearance": "error",
1204
+ "testing-library/prefer-query-matchers": "off",
1205
+ "testing-library/prefer-screen-queries": "error",
1206
+ "testing-library/prefer-user-event": "error",
1207
+ "testing-library/render-result-naming-convention": "off",
1208
+ },
1209
+ },
1210
+ {
1211
+ files: ["*.spec.ts", "*.spec.tsx", "*.test.ts", "*.test.tsx"],
1212
+ plugins: ["jest"],
1213
+ rules: {
1214
+ // eslint-plugin-jest
1215
+ "jest/no-untyped-mock-factory": "error",
1216
+ },
1217
+ },
1218
+ ];
1219
+
1220
+ module.exports = {
1221
+ extends: extendConfigs,
1222
+ parserOptions,
1223
+ env,
1224
+ globals,
1225
+ plugins,
1226
+ settings,
1227
+ rules,
1228
+ overrides,
1229
+
1230
+ reportUnusedDisableDirectives: true,
1231
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-config-heck",
3
- "version": "1.47.2",
3
+ "version": "1.49.0",
4
4
  "description": "Contains an ESLint configuration for ES2015+, TypeScript, and React.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -17,16 +17,16 @@
17
17
  "author": "atheck",
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
- "@typescript-eslint/eslint-plugin": "6.5.0",
21
- "@typescript-eslint/parser": "6.5.0",
22
- "eslint": "8.48.0",
20
+ "@typescript-eslint/eslint-plugin": "6.7.0",
21
+ "@typescript-eslint/parser": "6.7.0",
22
+ "eslint": "8.49.0",
23
23
  "eslint-import-resolver-typescript": "3.6.0",
24
- "eslint-plugin-deprecation": "1.5.0",
24
+ "eslint-plugin-deprecation": "2.0.0",
25
25
  "eslint-plugin-import": "2.28.1",
26
26
  "eslint-plugin-jest": "27.2.3",
27
27
  "eslint-plugin-react": "7.33.2",
28
28
  "eslint-plugin-react-hooks": "4.6.0",
29
- "eslint-plugin-react-native": "4.0.0",
29
+ "eslint-plugin-react-native": "4.1.0",
30
30
  "eslint-plugin-testing-library": "6.0.1",
31
31
  "eslint-plugin-typescript-heck": "1.3.1",
32
32
  "eslint-plugin-unicorn": "48.0.1",
@@ -36,7 +36,7 @@
36
36
  "@testing-library/react": "14.0.0",
37
37
  "@types/jest": "29.5.4",
38
38
  "@types/react": "18.2.21",
39
- "jest": "29.6.4",
39
+ "jest": "29.7.0",
40
40
  "react": "18.2.0",
41
41
  "semantic-release": "21.1.1"
42
42
  },
package/readme.md CHANGED
@@ -70,6 +70,16 @@ To disable some of the formatting rules (when using a formatter like prettier or
70
70
  }
71
71
  ~~~
72
72
 
73
+ ### Rules with usage of Biome
74
+
75
+ If you are using Biome you can use "nodeWithBiome" or "browserWithBiome":
76
+
77
+ ~~~json
78
+ {
79
+ "extends": ["heck/nodeWithBiome"]
80
+ }
81
+ ~~~
82
+
73
83
  ### Exclude rules included in Rome
74
84
 
75
85
  To disable some the rules that are already included in Rome you can use this configuration:
@@ -79,3 +89,5 @@ To disable some the rules that are already included in Rome you can use this con
79
89
  "extends": ["heck/node", "heck/excludeRome"]
80
90
  }
81
91
  ~~~
92
+
93
+ **Attention:** Since Rome is no longer maintained, this will not be the case with this ruleset. Use the Biome rulesets instead.