eslint-config-setup 0.3.3 → 0.4.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.
@@ -14,7 +14,6 @@ import packageJsonPlugin from "eslint-plugin-package-json"
14
14
  import perfectionistPlugin from "eslint-plugin-perfectionist"
15
15
  import playwrightPlugin from "eslint-plugin-playwright"
16
16
  import reactEffectPlugin from "eslint-plugin-react-you-might-not-need-an-effect"
17
- import reactHooksPlugin from "eslint-plugin-react-hooks"
18
17
  import reactRefreshPlugin from "eslint-plugin-react-refresh"
19
18
  import regexpPlugin from "eslint-plugin-regexp"
20
19
  import securityPlugin from "eslint-plugin-security"
@@ -27,13 +26,100 @@ import unicornPlugin from "eslint-plugin-unicorn"
27
26
  import unusedImportsPlugin from "eslint-plugin-unused-imports"
28
27
  import vitestPlugin from "@vitest/eslint-plugin"
29
28
 
29
+ // React compat plugin — merges @eslint-react sub-plugins into a single `react/` namespace
30
+ // and aliases rules to legacy eslint-plugin-react names for OxLint compatibility.
31
+ const reactCompatPlugin = (() => {
32
+ const core = eslintReactPlugin.rules
33
+ const select = (prefix) => Object.fromEntries(
34
+ Object.entries(core)
35
+ .filter(([name]) => name.startsWith(prefix))
36
+ .map(([name, rule]) => [name.slice(prefix.length), rule]),
37
+ )
38
+ const dom = select("dom-")
39
+ const jsx = select("jsx-")
40
+ const naming = select("naming-convention-")
41
+ const rsc = select("rsc-")
42
+ const webApi = select("web-api-")
43
+
44
+ // Legacy aliases: legacy name → [source, original name]
45
+ const aliases = {
46
+ "jsx-key": [core, "no-missing-key"],
47
+ "jsx-key-before-spread": [jsx, "no-key-after-spread"],
48
+ "jsx-no-constructed-context-values": [core, "no-unstable-context-value"],
49
+ "jsx-no-leaked-render": [core, "no-leaked-conditional-rendering"],
50
+ "jsx-no-useless-fragment": [jsx, "no-useless-fragment"],
51
+ "no-object-type-as-default-prop": [core, "no-unstable-default-props"],
52
+ "no-unstable-nested-components": [core, "no-nested-component-definitions"],
53
+ "display-name": [core, "no-missing-component-display-name"],
54
+ "forward-ref-uses-ref": [core, "no-forward-ref"],
55
+ "destructuring-assignment": [core, "prefer-destructuring-assignment"],
56
+ "no-did-mount-set-state": [core, "no-set-state-in-component-did-mount"],
57
+ "no-did-update-set-state": [core, "no-set-state-in-component-did-update"],
58
+ "no-will-update-set-state": [core, "no-set-state-in-component-will-update"],
59
+ "hook-use-state": [core, "use-state"],
60
+ "no-danger": [dom, "no-dangerously-set-innerhtml"],
61
+ "no-danger-with-children": [dom, "no-dangerously-set-innerhtml-with-children"],
62
+ "no-find-dom-node": [dom, "no-find-dom-node"],
63
+ "no-namespace": [jsx, "no-namespace"],
64
+ "no-render-return-value": [dom, "no-render-return-value"],
65
+ "jsx-no-script-url": [dom, "no-script-url"],
66
+ "jsx-no-target-blank": [dom, "no-unsafe-target-blank"],
67
+ "no-unknown-property": [dom, "no-unknown-property"],
68
+ "void-dom-elements-no-children": [dom, "no-void-elements-with-children"],
69
+ "button-has-type": [dom, "no-missing-button-type"],
70
+ "iframe-missing-sandbox": [dom, "no-missing-iframe-sandbox"],
71
+ "style-prop-object": [dom, "no-string-style-prop"],
72
+ }
73
+
74
+ // Identical-name aliases (core rules where legacy name = @eslint-react name)
75
+ const identicalCore = [
76
+ "no-access-state-in-setstate", "no-array-index-key",
77
+ "no-direct-mutation-state", "no-redundant-should-component-update",
78
+ "no-unused-class-component-members", "no-unused-state",
79
+ ]
80
+ for (const n of identicalCore) aliases[n] = [core, n]
81
+ aliases["no-children-prop"] = [jsx, "no-children-prop"]
82
+ aliases["jsx-no-comment-textnodes"] = [jsx, "no-comment-textnodes"]
83
+
84
+ // Build aliased originals set
85
+ const aliasedCore = new Set()
86
+ for (const [src, name] of Object.values(aliases)) {
87
+ if (src === core) aliasedCore.add(name)
88
+ else if (src === dom) aliasedCore.add("dom-" + name)
89
+ else if (src === jsx) aliasedCore.add("jsx-" + name)
90
+ else if (src === naming) aliasedCore.add("naming-convention-" + name)
91
+ else if (src === rsc) aliasedCore.add("rsc-" + name)
92
+ else if (src === webApi) aliasedCore.add("web-api-" + name)
93
+ }
94
+ const rules = {}
95
+
96
+ // Core rules (skip aliased originals)
97
+ for (const [n, r] of Object.entries(core)) { if (!aliasedCore.has(n)) rules[n] = r }
98
+
99
+ // Sub-plugin rules (skip aliased + prefer-namespace-import collision)
100
+ const subs = [[dom, new Set(['prefer-namespace-import'])], [jsx], [webApi], [naming], [rsc]]
101
+ for (const [src, skip] of subs) {
102
+ for (const [n, r] of Object.entries(src)) {
103
+ if (skip && skip.has(n)) continue
104
+ if (Object.values(aliases).some(([s, o]) => s === src && o === n)) continue
105
+ rules[n] = r
106
+ }
107
+ }
108
+
109
+ // Add legacy aliases
110
+ for (const [legacy, [src, orig]] of Object.entries(aliases)) rules[legacy] = src[orig]
111
+
112
+ return { meta: { name: "react-compat", version: "1.0.0" }, rules }
113
+ })()
114
+
30
115
  export default [
31
116
  // TypeScript parser setup
32
117
  ...tseslint.configs.strictTypeChecked.slice(0, 2),
33
118
 
34
- // Base rules — all effective rules for *.ts files
119
+ // Base rules — all effective rules for TS plus shared JS/TS rules
35
120
  {
36
121
  name: "eslint-config-setup/base",
122
+ ignores: ["**/*.{md,mdx}"],
37
123
  plugins: {
38
124
  "@cspell": cspellPlugin,
39
125
  "@stylistic": stylisticPlugin,
@@ -44,11 +130,8 @@ export default [
44
130
  "jsdoc": jsdocPlugin,
45
131
  "jsx-a11y": jsxA11yPlugin,
46
132
  "perfectionist": perfectionistPlugin,
47
- "react": eslintReactPlugin,
48
- "react-dom": eslintReactPlugin.configs.dom.plugins["@eslint-react/dom"],
49
- "react-hooks": reactHooksPlugin,
133
+ "react": reactCompatPlugin,
50
134
  "react-refresh": reactRefreshPlugin,
51
- "react-web-api": eslintReactPlugin.configs["web-api"].plugins["@eslint-react/web-api"],
52
135
  "react-you-might-not-need-an-effect": reactEffectPlugin,
53
136
  "regexp": regexpPlugin,
54
137
  "security": securityPlugin,
@@ -95,7 +178,7 @@ export default [
95
178
  "@typescript-eslint/ban-ts-comment": [
96
179
  "error",
97
180
  {
98
- "minimumDescriptionLength": 10
181
+ "ts-expect-error": "allow-with-description"
99
182
  }
100
183
  ],
101
184
  "@typescript-eslint/ban-tslint-comment": "error",
@@ -103,7 +186,10 @@ export default [
103
186
  "@typescript-eslint/consistent-generic-constructors": "error",
104
187
  "@typescript-eslint/consistent-indexed-object-style": "error",
105
188
  "@typescript-eslint/consistent-type-assertions": "error",
106
- "@typescript-eslint/consistent-type-definitions": "error",
189
+ "@typescript-eslint/consistent-type-definitions": [
190
+ "error",
191
+ "type"
192
+ ],
107
193
  "@typescript-eslint/consistent-type-exports": [
108
194
  "error",
109
195
  {
@@ -113,10 +199,14 @@ export default [
113
199
  "@typescript-eslint/consistent-type-imports": [
114
200
  "error",
115
201
  {
116
- "fixStyle": "inline-type-imports"
202
+ "fixStyle": "separate-type-imports"
117
203
  }
118
204
  ],
119
205
  "@typescript-eslint/dot-notation": "error",
206
+ "@typescript-eslint/method-signature-style": [
207
+ "error",
208
+ "property"
209
+ ],
120
210
  "@typescript-eslint/no-array-constructor": "error",
121
211
  "@typescript-eslint/no-array-delete": "error",
122
212
  "@typescript-eslint/no-base-to-string": "error",
@@ -128,10 +218,21 @@ export default [
128
218
  "@typescript-eslint/no-dynamic-delete": "error",
129
219
  "@typescript-eslint/no-empty-function": "error",
130
220
  "@typescript-eslint/no-empty-object-type": "error",
131
- "@typescript-eslint/no-explicit-any": "error",
221
+ "@typescript-eslint/no-explicit-any": [
222
+ "warn",
223
+ {
224
+ "fixToUnknown": true
225
+ }
226
+ ],
132
227
  "@typescript-eslint/no-extra-non-null-assertion": "error",
133
228
  "@typescript-eslint/no-extraneous-class": "error",
134
- "@typescript-eslint/no-floating-promises": "error",
229
+ "@typescript-eslint/no-floating-promises": [
230
+ "error",
231
+ {
232
+ "checkThenables": true,
233
+ "ignoreIIFE": true
234
+ }
235
+ ],
135
236
  "@typescript-eslint/no-for-in-array": "error",
136
237
  "@typescript-eslint/no-implied-eval": "error",
137
238
  "@typescript-eslint/no-import-type-side-effects": "error",
@@ -139,7 +240,12 @@ export default [
139
240
  "@typescript-eslint/no-invalid-void-type": "error",
140
241
  "@typescript-eslint/no-meaningless-void-operator": "error",
141
242
  "@typescript-eslint/no-misused-new": "error",
142
- "@typescript-eslint/no-misused-promises": "error",
243
+ "@typescript-eslint/no-misused-promises": [
244
+ "error",
245
+ {
246
+ "checksVoidReturn": false
247
+ }
248
+ ],
143
249
  "@typescript-eslint/no-misused-spread": "error",
144
250
  "@typescript-eslint/no-mixed-enums": "error",
145
251
  "@typescript-eslint/no-namespace": "error",
@@ -182,6 +288,7 @@ export default [
182
288
  "@typescript-eslint/no-unsafe-function-type": "error",
183
289
  "@typescript-eslint/no-unsafe-member-access": "error",
184
290
  "@typescript-eslint/no-unsafe-return": "error",
291
+ "@typescript-eslint/no-unsafe-type-assertion": "error",
185
292
  "@typescript-eslint/no-unsafe-unary-minus": "error",
186
293
  "@typescript-eslint/no-unused-expressions": "error",
187
294
  "@typescript-eslint/no-unused-vars": [
@@ -212,11 +319,19 @@ export default [
212
319
  "@typescript-eslint/prefer-nullish-coalescing": "error",
213
320
  "@typescript-eslint/prefer-optional-chain": "error",
214
321
  "@typescript-eslint/prefer-promise-reject-errors": "error",
322
+ "@typescript-eslint/prefer-readonly": "warn",
215
323
  "@typescript-eslint/prefer-reduce-type-parameter": "error",
216
324
  "@typescript-eslint/prefer-regexp-exec": "error",
217
325
  "@typescript-eslint/prefer-return-this-type": "error",
218
326
  "@typescript-eslint/prefer-string-starts-ends-with": "error",
327
+ "@typescript-eslint/promise-function-async": "error",
219
328
  "@typescript-eslint/related-getter-setter-pairs": "error",
329
+ "@typescript-eslint/require-array-sort-compare": [
330
+ "error",
331
+ {
332
+ "ignoreStringArrays": true
333
+ }
334
+ ],
220
335
  "@typescript-eslint/require-await": "error",
221
336
  "@typescript-eslint/restrict-plus-operands": [
222
337
  "error",
@@ -246,6 +361,13 @@ export default [
246
361
  }
247
362
  ],
248
363
  "@typescript-eslint/strict-void-return": "error",
364
+ "@typescript-eslint/switch-exhaustiveness-check": [
365
+ "error",
366
+ {
367
+ "allowDefaultCaseForExhaustiveSwitch": false,
368
+ "requireDefaultForNonUnion": true
369
+ }
370
+ ],
249
371
  "@typescript-eslint/triple-slash-reference": "error",
250
372
  "@typescript-eslint/unbound-method": "error",
251
373
  "@typescript-eslint/unified-signatures": "error",
@@ -289,17 +411,35 @@ export default [
289
411
  "maxDepth": 3
290
412
  }
291
413
  ],
292
- "import/no-duplicates": [
414
+ "import/no-duplicates": "error",
415
+ "import/no-empty-named-blocks": "error",
416
+ "import/no-extraneous-dependencies": [
293
417
  "error",
294
418
  {
295
- "prefer-inline": true
419
+ "includeTypes": true
296
420
  }
297
421
  ],
298
- "import/no-empty-named-blocks": "error",
299
422
  "import/no-mutable-exports": "error",
300
423
  "import/no-named-as-default": "error",
301
424
  "import/no-named-as-default-member": "error",
425
+ "import/no-named-default": "error",
302
426
  "import/no-self-import": "error",
427
+ "import/no-unassigned-import": [
428
+ "error",
429
+ {
430
+ "allow": [
431
+ "@babel/polyfill",
432
+ "**/register",
433
+ "**/register.*",
434
+ "**/register/**",
435
+ "**/register/**.*",
436
+ "**/*.css",
437
+ "**/*.scss",
438
+ "**/*.sass",
439
+ "**/*.less"
440
+ ]
441
+ }
442
+ ],
303
443
  "import/no-useless-path-segments": "error",
304
444
  "jsdoc/check-access": "error",
305
445
  "jsdoc/check-alignment": "error",
@@ -416,6 +556,7 @@ export default [
416
556
  "no-extra-boolean-cast": "error",
417
557
  "no-fallthrough": "error",
418
558
  "no-global-assign": "error",
559
+ "no-implicit-globals": "error",
419
560
  "no-irregular-whitespace": "error",
420
561
  "no-iterator": "error",
421
562
  "no-labels": "error",
@@ -434,10 +575,19 @@ export default [
434
575
  "no-proto": "error",
435
576
  "no-prototype-builtins": "error",
436
577
  "no-regex-spaces": "error",
578
+ "no-return-assign": [
579
+ "error",
580
+ "always"
581
+ ],
437
582
  "no-script-url": "error",
438
583
  "no-self-assign": "error",
439
584
  "no-self-compare": "error",
440
- "no-sequences": "error",
585
+ "no-sequences": [
586
+ "error",
587
+ {
588
+ "allowInParentheses": false
589
+ }
590
+ ],
441
591
  "no-shadow-restricted-names": "error",
442
592
  "no-sparse-arrays": "error",
443
593
  "no-template-curly-in-string": "error",
@@ -451,12 +601,25 @@ export default [
451
601
  "no-useless-assignment": "error",
452
602
  "no-useless-call": "error",
453
603
  "no-useless-catch": "error",
454
- "no-useless-computed-key": "error",
604
+ "no-useless-computed-key": [
605
+ "error",
606
+ {
607
+ "enforceForClassMembers": true
608
+ }
609
+ ],
455
610
  "no-useless-concat": "error",
456
611
  "no-useless-escape": "error",
457
612
  "no-useless-rename": "error",
458
613
  "no-useless-return": "error",
459
614
  "no-var": "error",
615
+ "object-shorthand": [
616
+ "error",
617
+ "always",
618
+ {
619
+ "avoidExplicitReturnArrows": true,
620
+ "avoidQuotes": true
621
+ }
622
+ ],
460
623
  "perfectionist/sort-exports": "error",
461
624
  "perfectionist/sort-imports": [
462
625
  "error",
@@ -469,34 +632,21 @@ export default [
469
632
  "perfectionist/sort-named-imports": "error",
470
633
  "perfectionist/sort-union-types": "error",
471
634
  "prefer-const": "error",
635
+ "prefer-numeric-literals": "error",
472
636
  "prefer-object-has-own": "error",
473
637
  "prefer-object-spread": "error",
474
638
  "prefer-regex-literals": "error",
475
639
  "prefer-rest-params": "error",
476
640
  "prefer-spread": "error",
477
- "prefer-template": "error",
641
+ "prefer-template": "warn",
478
642
  "preserve-caught-error": "error",
479
643
  "radix": "error",
480
- "react-dom/no-dangerously-set-innerhtml": "warn",
481
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
482
- "react-dom/no-missing-button-type": "error",
483
- "react-dom/no-missing-iframe-sandbox": "error",
484
- "react-dom/no-string-style-prop": "error",
485
- "react-dom/no-unknown-property": "error",
486
- "react-dom/no-unsafe-target-blank": "error",
487
- "react-dom/no-void-elements-with-children": "error",
488
- "react-hooks/exhaustive-deps": "error",
489
- "react-hooks/rules-of-hooks": "error",
490
644
  "react-refresh/only-export-components": [
491
645
  "warn",
492
646
  {
493
647
  "allowConstantExport": true
494
648
  }
495
649
  ],
496
- "react-web-api/no-leaked-event-listener": "error",
497
- "react-web-api/no-leaked-interval": "error",
498
- "react-web-api/no-leaked-resize-observer": "error",
499
- "react-web-api/no-leaked-timeout": "error",
500
650
  "react-you-might-not-need-an-effect/no-adjust-state-on-prop-change": "warn",
501
651
  "react-you-might-not-need-an-effect/no-chain-state-updates": "error",
502
652
  "react-you-might-not-need-an-effect/no-derived-state": "error",
@@ -506,23 +656,87 @@ export default [
506
656
  "react-you-might-not-need-an-effect/no-pass-data-to-parent": "error",
507
657
  "react-you-might-not-need-an-effect/no-pass-live-state-to-parent": "error",
508
658
  "react-you-might-not-need-an-effect/no-reset-all-state-on-prop-change": "error",
509
- "react/jsx-no-comment-textnodes": "error",
510
- "react/jsx-shorthand-boolean": "error",
659
+ "react/button-has-type": "warn",
660
+ "react/component-hook-factories": "error",
661
+ "react/context-name": "warn",
662
+ "react/destructuring-assignment": "warn",
663
+ "react/error-boundaries": "error",
664
+ "react/exhaustive-deps": "warn",
665
+ "react/forward-ref-uses-ref": "warn",
666
+ "react/function-definition": "error",
667
+ "react/hook-use-state": "warn",
668
+ "react/id-name": "warn",
669
+ "react/iframe-missing-sandbox": "warn",
670
+ "react/jsx-key": "error",
671
+ "react/jsx-key-before-spread": "error",
672
+ "react/jsx-no-children-prop-with-children": "error",
673
+ "react/jsx-no-comment-textnodes": "warn",
674
+ "react/jsx-no-constructed-context-values": "warn",
675
+ "react/jsx-no-leaked-render": "error",
676
+ "react/jsx-no-leaked-semicolon": "warn",
677
+ "react/jsx-no-script-url": "warn",
678
+ "react/jsx-no-target-blank": "warn",
679
+ "react/jsx-no-useless-fragment": "warn",
511
680
  "react/no-access-state-in-setstate": "error",
512
- "react/no-array-index-key": "error",
681
+ "react/no-array-index-key": "warn",
682
+ "react/no-children-count": "warn",
683
+ "react/no-children-for-each": "warn",
684
+ "react/no-children-map": "warn",
685
+ "react/no-children-only": "warn",
513
686
  "react/no-children-prop": "error",
514
- "react/no-context-provider": "error",
687
+ "react/no-children-to-array": "warn",
688
+ "react/no-class-component": "error",
689
+ "react/no-clone-element": "warn",
690
+ "react/no-component-will-mount": "error",
691
+ "react/no-component-will-receive-props": "error",
692
+ "react/no-component-will-update": "error",
693
+ "react/no-context-provider": "warn",
694
+ "react/no-create-ref": "error",
695
+ "react/no-danger": "warn",
696
+ "react/no-danger-with-children": "error",
697
+ "react/no-did-mount-set-state": "warn",
698
+ "react/no-did-update-set-state": "warn",
515
699
  "react/no-direct-mutation-state": "error",
516
700
  "react/no-duplicate-key": "error",
517
- "react/no-forward-ref": "error",
518
- "react/no-leaked-conditional-rendering": "error",
519
- "react/no-missing-key": "error",
520
- "react/no-nested-component-definitions": "error",
521
- "react/no-unstable-context-value": "error",
522
- "react/no-unstable-default-props": "error",
523
- "react/no-unused-state": "error",
524
- "react/no-use-context": "error",
525
- "react/no-useless-fragment": "error",
701
+ "react/no-find-dom-node": "error",
702
+ "react/no-flush-sync": "error",
703
+ "react/no-hydrate": "error",
704
+ "react/no-implicit-key": "error",
705
+ "react/no-leaked-event-listener": "warn",
706
+ "react/no-leaked-interval": "warn",
707
+ "react/no-leaked-resize-observer": "warn",
708
+ "react/no-leaked-timeout": "warn",
709
+ "react/no-misused-capture-owner-stack": "error",
710
+ "react/no-namespace": "error",
711
+ "react/no-nested-lazy-component-declarations": "error",
712
+ "react/no-object-type-as-default-prop": "warn",
713
+ "react/no-redundant-should-component-update": "error",
714
+ "react/no-render": "error",
715
+ "react/no-render-return-value": "error",
716
+ "react/no-unknown-property": "error",
717
+ "react/no-unnecessary-use-callback": "warn",
718
+ "react/no-unnecessary-use-memo": "warn",
719
+ "react/no-unnecessary-use-prefix": "warn",
720
+ "react/no-unsafe-component-will-mount": "warn",
721
+ "react/no-unsafe-component-will-receive-props": "warn",
722
+ "react/no-unsafe-component-will-update": "warn",
723
+ "react/no-unsafe-iframe-sandbox": "warn",
724
+ "react/no-unstable-nested-components": "error",
725
+ "react/no-unused-class-component-members": "warn",
726
+ "react/no-unused-props": "warn",
727
+ "react/no-unused-state": "warn",
728
+ "react/no-use-context": "warn",
729
+ "react/no-use-form-state": "error",
730
+ "react/no-will-update-set-state": "warn",
731
+ "react/purity": "warn",
732
+ "react/ref-name": "warn",
733
+ "react/rules-of-hooks": "error",
734
+ "react/set-state-in-effect": "warn",
735
+ "react/set-state-in-render": "error",
736
+ "react/style-prop-object": "error",
737
+ "react/unsupported-syntax": "error",
738
+ "react/use-memo": "error",
739
+ "react/void-dom-elements-no-children": "error",
526
740
  "regexp/confusing-quantifier": "warn",
527
741
  "regexp/control-character-escape": "error",
528
742
  "regexp/match-any": "error",
@@ -637,15 +851,28 @@ export default [
637
851
  "unicorn/consistent-date-clone": "error",
638
852
  "unicorn/consistent-empty-array-spread": "error",
639
853
  "unicorn/consistent-existence-index-check": "error",
854
+ "unicorn/consistent-function-scoping": "warn",
640
855
  "unicorn/error-message": "error",
856
+ "unicorn/filename-case": [
857
+ "error",
858
+ {
859
+ "cases": {
860
+ "camelCase": true,
861
+ "pascalCase": true,
862
+ "kebabCase": true
863
+ }
864
+ }
865
+ ],
641
866
  "unicorn/new-for-builtins": "error",
642
867
  "unicorn/no-abusive-eslint-disable": "error",
643
868
  "unicorn/no-accessor-recursion": "error",
644
869
  "unicorn/no-anonymous-default-export": "error",
645
870
  "unicorn/no-array-callback-reference": "error",
646
871
  "unicorn/no-array-method-this-argument": "error",
872
+ "unicorn/no-array-reduce": "warn",
647
873
  "unicorn/no-await-expression-member": "error",
648
874
  "unicorn/no-await-in-promise-methods": "error",
875
+ "unicorn/no-for-loop": "warn",
649
876
  "unicorn/no-instanceof-builtins": "error",
650
877
  "unicorn/no-invalid-fetch-options": "error",
651
878
  "unicorn/no-invalid-remove-event-listener": "error",
@@ -663,7 +890,12 @@ export default [
663
890
  "unicorn/no-useless-length-check": "error",
664
891
  "unicorn/no-useless-promise-resolve-reject": "error",
665
892
  "unicorn/no-useless-spread": "error",
666
- "unicorn/no-useless-undefined": "error",
893
+ "unicorn/no-useless-undefined": [
894
+ "warn",
895
+ {
896
+ "checkArguments": false
897
+ }
898
+ ],
667
899
  "unicorn/no-zero-fractions": "error",
668
900
  "unicorn/numeric-separators-style": "error",
669
901
  "unicorn/prefer-array-find": "error",
@@ -673,6 +905,7 @@ export default [
673
905
  "unicorn/prefer-array-some": "error",
674
906
  "unicorn/prefer-at": "error",
675
907
  "unicorn/prefer-date-now": "error",
908
+ "unicorn/prefer-dom-node-dataset": "error",
676
909
  "unicorn/prefer-export-from": [
677
910
  "error",
678
911
  {
@@ -704,8 +937,19 @@ export default [
704
937
  "unicorn/text-encoding-identifier-case": "error",
705
938
  "unicorn/throw-new-error": "error",
706
939
  "unused-imports/no-unused-imports": "error",
707
- "use-isnan": "error",
708
- "valid-typeof": "error",
940
+ "use-isnan": [
941
+ "error",
942
+ {
943
+ "enforceForIndexOf": true,
944
+ "enforceForSwitchCase": true
945
+ }
946
+ ],
947
+ "valid-typeof": [
948
+ "error",
949
+ {
950
+ "requireStringLiterals": true
951
+ }
952
+ ],
709
953
  "yoda": "error"
710
954
  },
711
955
  },
@@ -715,46 +959,91 @@ export default [
715
959
  name: "eslint-config-setup/js-compat",
716
960
  files: ["**/*.{js,mjs,cjs}"],
717
961
  rules: {
962
+ "@typescript-eslint/adjacent-overload-signatures": "off",
963
+ "@typescript-eslint/array-type": "off",
718
964
  "@typescript-eslint/await-thenable": "off",
965
+ "@typescript-eslint/ban-ts-comment": "off",
966
+ "@typescript-eslint/ban-tslint-comment": "off",
967
+ "@typescript-eslint/class-literal-property-style": "off",
968
+ "@typescript-eslint/consistent-generic-constructors": "off",
969
+ "@typescript-eslint/consistent-indexed-object-style": "off",
719
970
  "@typescript-eslint/consistent-return": "off",
971
+ "@typescript-eslint/consistent-type-assertions": "off",
972
+ "@typescript-eslint/consistent-type-definitions": "off",
720
973
  "@typescript-eslint/consistent-type-exports": "off",
974
+ "@typescript-eslint/consistent-type-imports": "off",
721
975
  "@typescript-eslint/dot-notation": "off",
976
+ "@typescript-eslint/method-signature-style": "off",
722
977
  "@typescript-eslint/naming-convention": "off",
978
+ "@typescript-eslint/no-array-constructor": "off",
723
979
  "@typescript-eslint/no-array-delete": "off",
724
980
  "@typescript-eslint/no-base-to-string": "off",
981
+ "@typescript-eslint/no-confusing-non-null-assertion": "off",
725
982
  "@typescript-eslint/no-confusing-void-expression": "off",
726
983
  "@typescript-eslint/no-deprecated": "off",
984
+ "@typescript-eslint/no-duplicate-enum-values": "off",
727
985
  "@typescript-eslint/no-duplicate-type-constituents": "off",
986
+ "@typescript-eslint/no-dynamic-delete": "off",
987
+ "@typescript-eslint/no-empty-function": "off",
988
+ "@typescript-eslint/no-empty-object-type": "off",
989
+ "@typescript-eslint/no-explicit-any": "off",
990
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
991
+ "@typescript-eslint/no-extraneous-class": "off",
728
992
  "@typescript-eslint/no-floating-promises": "off",
729
993
  "@typescript-eslint/no-for-in-array": "off",
730
994
  "@typescript-eslint/no-implied-eval": "off",
995
+ "@typescript-eslint/no-import-type-side-effects": "off",
996
+ "@typescript-eslint/no-inferrable-types": "off",
997
+ "@typescript-eslint/no-invalid-void-type": "off",
731
998
  "@typescript-eslint/no-meaningless-void-operator": "off",
999
+ "@typescript-eslint/no-misused-new": "off",
732
1000
  "@typescript-eslint/no-misused-promises": "off",
733
1001
  "@typescript-eslint/no-misused-spread": "off",
734
1002
  "@typescript-eslint/no-mixed-enums": "off",
1003
+ "@typescript-eslint/no-namespace": "off",
1004
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "off",
1005
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
1006
+ "@typescript-eslint/no-non-null-assertion": "off",
735
1007
  "@typescript-eslint/no-redundant-type-constituents": "off",
1008
+ "@typescript-eslint/no-require-imports": "off",
1009
+ "@typescript-eslint/no-shadow": "off",
1010
+ "@typescript-eslint/no-this-alias": "off",
736
1011
  "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
737
1012
  "@typescript-eslint/no-unnecessary-condition": "off",
1013
+ "@typescript-eslint/no-unnecessary-parameter-property-assignment": "off",
738
1014
  "@typescript-eslint/no-unnecessary-qualifier": "off",
739
1015
  "@typescript-eslint/no-unnecessary-template-expression": "off",
740
1016
  "@typescript-eslint/no-unnecessary-type-arguments": "off",
741
1017
  "@typescript-eslint/no-unnecessary-type-assertion": "off",
1018
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
742
1019
  "@typescript-eslint/no-unnecessary-type-conversion": "off",
743
1020
  "@typescript-eslint/no-unnecessary-type-parameters": "off",
744
1021
  "@typescript-eslint/no-unsafe-argument": "off",
745
1022
  "@typescript-eslint/no-unsafe-assignment": "off",
746
1023
  "@typescript-eslint/no-unsafe-call": "off",
1024
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
747
1025
  "@typescript-eslint/no-unsafe-enum-comparison": "off",
1026
+ "@typescript-eslint/no-unsafe-function-type": "off",
748
1027
  "@typescript-eslint/no-unsafe-member-access": "off",
749
1028
  "@typescript-eslint/no-unsafe-return": "off",
750
1029
  "@typescript-eslint/no-unsafe-type-assertion": "off",
751
1030
  "@typescript-eslint/no-unsafe-unary-minus": "off",
1031
+ "@typescript-eslint/no-unused-expressions": "off",
1032
+ "@typescript-eslint/no-unused-vars": "off",
1033
+ "@typescript-eslint/no-useless-constructor": "off",
752
1034
  "@typescript-eslint/no-useless-default-assignment": "off",
1035
+ "@typescript-eslint/no-useless-empty-export": "off",
1036
+ "@typescript-eslint/no-wrapper-object-types": "off",
753
1037
  "@typescript-eslint/non-nullable-type-assertion-style": "off",
754
1038
  "@typescript-eslint/only-throw-error": "off",
1039
+ "@typescript-eslint/prefer-as-const": "off",
755
1040
  "@typescript-eslint/prefer-destructuring": "off",
756
1041
  "@typescript-eslint/prefer-find": "off",
1042
+ "@typescript-eslint/prefer-for-of": "off",
1043
+ "@typescript-eslint/prefer-function-type": "off",
757
1044
  "@typescript-eslint/prefer-includes": "off",
1045
+ "@typescript-eslint/prefer-literal-enum-member": "off",
1046
+ "@typescript-eslint/prefer-namespace-keyword": "off",
758
1047
  "@typescript-eslint/prefer-nullish-coalescing": "off",
759
1048
  "@typescript-eslint/prefer-optional-chain": "off",
760
1049
  "@typescript-eslint/prefer-promise-reject-errors": "off",
@@ -774,33 +1063,47 @@ export default [
774
1063
  "@typescript-eslint/strict-boolean-expressions": "off",
775
1064
  "@typescript-eslint/strict-void-return": "off",
776
1065
  "@typescript-eslint/switch-exhaustiveness-check": "off",
1066
+ "@typescript-eslint/triple-slash-reference": "off",
777
1067
  "@typescript-eslint/unbound-method": "off",
1068
+ "@typescript-eslint/unified-signatures": "off",
778
1069
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
779
1070
  "constructor-super": "error",
1071
+ "dot-notation": "off",
780
1072
  "getter-return": "error",
1073
+ "no-array-constructor": "off",
781
1074
  "no-class-assign": "error",
782
1075
  "no-const-assign": "error",
783
1076
  "no-dupe-args": "error",
784
1077
  "no-dupe-class-members": "error",
785
1078
  "no-dupe-keys": "error",
1079
+ "no-empty-function": "off",
786
1080
  "no-func-assign": "error",
1081
+ "no-implied-eval": "off",
787
1082
  "no-import-assign": "error",
788
1083
  "no-new-native-nonconstructor": "error",
789
1084
  "no-new-symbol": "off",
790
1085
  "no-obj-calls": "error",
791
1086
  "no-redeclare": "error",
1087
+ "no-return-await": "off",
792
1088
  "no-setter-return": "error",
1089
+ "no-shadow": "off",
793
1090
  "no-this-before-super": "error",
1091
+ "no-throw-literal": "off",
794
1092
  "no-undef": "error",
795
1093
  "no-unreachable": "error",
796
1094
  "no-unsafe-negation": "error",
1095
+ "no-unused-expressions": "off",
1096
+ "no-unused-vars": "error",
1097
+ "no-useless-constructor": "off",
797
1098
  "no-with": "error",
798
1099
  "prefer-const": [
799
1100
  "error",
800
1101
  {
801
1102
  "destructuring": "all"
802
1103
  }
803
- ]
1104
+ ],
1105
+ "prefer-promise-reject-errors": "off",
1106
+ "require-await": "off"
804
1107
  },
805
1108
  },
806
1109
 
@@ -1038,7 +1341,131 @@ export default [
1038
1341
  // Markdown/MDX code block linting
1039
1342
  {
1040
1343
  ...mdxPlugin.flatCodeBlocks,
1344
+ languageOptions: {
1345
+ ...mdxPlugin.flatCodeBlocks.languageOptions,
1346
+ parserOptions: {
1347
+ ...mdxPlugin.flatCodeBlocks.languageOptions?.parserOptions,
1348
+ projectService: false,
1349
+ },
1350
+ },
1041
1351
  rules: {
1352
+ ...{
1353
+ "@typescript-eslint/adjacent-overload-signatures": "off",
1354
+ "@typescript-eslint/array-type": "off",
1355
+ "@typescript-eslint/await-thenable": "off",
1356
+ "@typescript-eslint/ban-ts-comment": "off",
1357
+ "@typescript-eslint/ban-tslint-comment": "off",
1358
+ "@typescript-eslint/class-literal-property-style": "off",
1359
+ "@typescript-eslint/consistent-generic-constructors": "off",
1360
+ "@typescript-eslint/consistent-indexed-object-style": "off",
1361
+ "@typescript-eslint/consistent-type-assertions": "off",
1362
+ "@typescript-eslint/consistent-type-definitions": "off",
1363
+ "@typescript-eslint/consistent-type-exports": "off",
1364
+ "@typescript-eslint/consistent-type-imports": "off",
1365
+ "@typescript-eslint/dot-notation": "off",
1366
+ "@typescript-eslint/method-signature-style": "off",
1367
+ "@typescript-eslint/no-array-constructor": "off",
1368
+ "@typescript-eslint/no-array-delete": "off",
1369
+ "@typescript-eslint/no-base-to-string": "off",
1370
+ "@typescript-eslint/no-confusing-non-null-assertion": "off",
1371
+ "@typescript-eslint/no-confusing-void-expression": "off",
1372
+ "@typescript-eslint/no-deprecated": "off",
1373
+ "@typescript-eslint/no-duplicate-enum-values": "off",
1374
+ "@typescript-eslint/no-duplicate-type-constituents": "off",
1375
+ "@typescript-eslint/no-dynamic-delete": "off",
1376
+ "@typescript-eslint/no-empty-function": "off",
1377
+ "@typescript-eslint/no-empty-object-type": "off",
1378
+ "@typescript-eslint/no-explicit-any": "off",
1379
+ "@typescript-eslint/no-extra-non-null-assertion": "off",
1380
+ "@typescript-eslint/no-extraneous-class": "off",
1381
+ "@typescript-eslint/no-floating-promises": "off",
1382
+ "@typescript-eslint/no-for-in-array": "off",
1383
+ "@typescript-eslint/no-implied-eval": "off",
1384
+ "@typescript-eslint/no-import-type-side-effects": "off",
1385
+ "@typescript-eslint/no-inferrable-types": "off",
1386
+ "@typescript-eslint/no-invalid-void-type": "off",
1387
+ "@typescript-eslint/no-meaningless-void-operator": "off",
1388
+ "@typescript-eslint/no-misused-new": "off",
1389
+ "@typescript-eslint/no-misused-spread": "off",
1390
+ "@typescript-eslint/no-mixed-enums": "off",
1391
+ "@typescript-eslint/no-namespace": "off",
1392
+ "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "off",
1393
+ "@typescript-eslint/no-non-null-asserted-optional-chain": "off",
1394
+ "@typescript-eslint/no-non-null-assertion": "off",
1395
+ "@typescript-eslint/no-redundant-type-constituents": "off",
1396
+ "@typescript-eslint/no-require-imports": "off",
1397
+ "@typescript-eslint/no-shadow": "off",
1398
+ "@typescript-eslint/no-this-alias": "off",
1399
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
1400
+ "@typescript-eslint/no-unnecessary-condition": "off",
1401
+ "@typescript-eslint/no-unnecessary-parameter-property-assignment": "off",
1402
+ "@typescript-eslint/no-unnecessary-qualifier": "off",
1403
+ "@typescript-eslint/no-unnecessary-template-expression": "off",
1404
+ "@typescript-eslint/no-unnecessary-type-arguments": "off",
1405
+ "@typescript-eslint/no-unnecessary-type-assertion": "off",
1406
+ "@typescript-eslint/no-unnecessary-type-constraint": "off",
1407
+ "@typescript-eslint/no-unnecessary-type-conversion": "off",
1408
+ "@typescript-eslint/no-unnecessary-type-parameters": "off",
1409
+ "@typescript-eslint/no-unsafe-argument": "off",
1410
+ "@typescript-eslint/no-unsafe-assignment": "off",
1411
+ "@typescript-eslint/no-unsafe-call": "off",
1412
+ "@typescript-eslint/no-unsafe-declaration-merging": "off",
1413
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
1414
+ "@typescript-eslint/no-unsafe-function-type": "off",
1415
+ "@typescript-eslint/no-unsafe-member-access": "off",
1416
+ "@typescript-eslint/no-unsafe-return": "off",
1417
+ "@typescript-eslint/no-unsafe-type-assertion": "off",
1418
+ "@typescript-eslint/no-unsafe-unary-minus": "off",
1419
+ "@typescript-eslint/no-unused-expressions": "off",
1420
+ "@typescript-eslint/no-unused-vars": "off",
1421
+ "@typescript-eslint/no-useless-constructor": "off",
1422
+ "@typescript-eslint/no-useless-default-assignment": "off",
1423
+ "@typescript-eslint/no-useless-empty-export": "off",
1424
+ "@typescript-eslint/no-wrapper-object-types": "off",
1425
+ "@typescript-eslint/non-nullable-type-assertion-style": "off",
1426
+ "@typescript-eslint/only-throw-error": "off",
1427
+ "@typescript-eslint/prefer-as-const": "off",
1428
+ "@typescript-eslint/prefer-find": "off",
1429
+ "@typescript-eslint/prefer-for-of": "off",
1430
+ "@typescript-eslint/prefer-function-type": "off",
1431
+ "@typescript-eslint/prefer-includes": "off",
1432
+ "@typescript-eslint/prefer-literal-enum-member": "off",
1433
+ "@typescript-eslint/prefer-namespace-keyword": "off",
1434
+ "@typescript-eslint/prefer-nullish-coalescing": "off",
1435
+ "@typescript-eslint/prefer-optional-chain": "off",
1436
+ "@typescript-eslint/prefer-promise-reject-errors": "off",
1437
+ "@typescript-eslint/prefer-readonly": "off",
1438
+ "@typescript-eslint/prefer-reduce-type-parameter": "off",
1439
+ "@typescript-eslint/prefer-regexp-exec": "off",
1440
+ "@typescript-eslint/prefer-return-this-type": "off",
1441
+ "@typescript-eslint/prefer-string-starts-ends-with": "off",
1442
+ "@typescript-eslint/promise-function-async": "off",
1443
+ "@typescript-eslint/related-getter-setter-pairs": "off",
1444
+ "@typescript-eslint/require-array-sort-compare": "off",
1445
+ "@typescript-eslint/require-await": "off",
1446
+ "@typescript-eslint/restrict-plus-operands": "off",
1447
+ "@typescript-eslint/restrict-template-expressions": "off",
1448
+ "@typescript-eslint/return-await": "off",
1449
+ "@typescript-eslint/strict-boolean-expressions": "off",
1450
+ "@typescript-eslint/strict-void-return": "off",
1451
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
1452
+ "@typescript-eslint/triple-slash-reference": "off",
1453
+ "@typescript-eslint/unbound-method": "off",
1454
+ "@typescript-eslint/unified-signatures": "off",
1455
+ "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
1456
+ "dot-notation": "off",
1457
+ "no-array-constructor": "off",
1458
+ "no-empty-function": "off",
1459
+ "no-implied-eval": "off",
1460
+ "no-return-await": "off",
1461
+ "no-shadow": "off",
1462
+ "no-throw-literal": "off",
1463
+ "no-useless-constructor": "off",
1464
+ "prefer-promise-reject-errors": "off",
1465
+ "require-await": "off",
1466
+ "strict": "off",
1467
+ "unicode-bom": "off"
1468
+ },
1042
1469
  ...mdxPlugin.flatCodeBlocks.rules,
1043
1470
  "eol-last": "off",
1044
1471
  "no-undef": "off",