eslint-config-setup 0.3.3 → 0.5.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.
@@ -26,13 +26,99 @@ import unicornPlugin from "eslint-plugin-unicorn"
26
26
  import unusedImportsPlugin from "eslint-plugin-unused-imports"
27
27
  import vitestPlugin from "@vitest/eslint-plugin"
28
28
 
29
+ // React compat plugin — maps @eslint-react rule families into the `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
+ "no-did-mount-set-state": [core, "no-set-state-in-component-did-mount"],
56
+ "no-did-update-set-state": [core, "no-set-state-in-component-did-update"],
57
+ "no-will-update-set-state": [core, "no-set-state-in-component-will-update"],
58
+ "hook-use-state": [core, "use-state"],
59
+ "no-danger": [dom, "no-dangerously-set-innerhtml"],
60
+ "no-danger-with-children": [dom, "no-dangerously-set-innerhtml-with-children"],
61
+ "no-find-dom-node": [dom, "no-find-dom-node"],
62
+ "no-namespace": [jsx, "no-namespace"],
63
+ "no-render-return-value": [dom, "no-render-return-value"],
64
+ "jsx-no-script-url": [dom, "no-script-url"],
65
+ "jsx-no-target-blank": [dom, "no-unsafe-target-blank"],
66
+ "no-unknown-property": [dom, "no-unknown-property"],
67
+ "void-dom-elements-no-children": [dom, "no-void-elements-with-children"],
68
+ "button-has-type": [dom, "no-missing-button-type"],
69
+ "iframe-missing-sandbox": [dom, "no-missing-iframe-sandbox"],
70
+ "style-prop-object": [dom, "no-string-style-prop"],
71
+ }
72
+
73
+ // Identical-name aliases (core rules where legacy name = @eslint-react name)
74
+ const identicalCore = [
75
+ "no-access-state-in-setstate", "no-array-index-key",
76
+ "no-direct-mutation-state",
77
+ "no-unused-class-component-members", "no-unused-state",
78
+ ]
79
+ for (const n of identicalCore) aliases[n] = [core, n]
80
+ aliases["no-children-prop"] = [jsx, "no-children-prop"]
81
+ aliases["jsx-no-comment-textnodes"] = [jsx, "no-comment-textnodes"]
82
+
83
+ // Build aliased originals set
84
+ const aliasedCore = new Set()
85
+ for (const [src, name] of Object.values(aliases)) {
86
+ if (src === core) aliasedCore.add(name)
87
+ else if (src === dom) aliasedCore.add("dom-" + name)
88
+ else if (src === jsx) aliasedCore.add("jsx-" + name)
89
+ else if (src === naming) aliasedCore.add("naming-convention-" + name)
90
+ else if (src === rsc) aliasedCore.add("rsc-" + name)
91
+ else if (src === webApi) aliasedCore.add("web-api-" + name)
92
+ }
93
+ const rules = {}
94
+
95
+ // Core rules (skip aliased originals)
96
+ for (const [n, r] of Object.entries(core)) { if (!aliasedCore.has(n)) rules[n] = r }
97
+
98
+ // Sub-plugin rules (skip aliased + prefer-namespace-import collision)
99
+ const subs = [[dom, new Set(['prefer-namespace-import'])], [jsx], [webApi], [naming], [rsc]]
100
+ for (const [src, skip] of subs) {
101
+ for (const [n, r] of Object.entries(src)) {
102
+ if (skip && skip.has(n)) continue
103
+ if (Object.values(aliases).some(([s, o]) => s === src && o === n)) continue
104
+ rules[n] = r
105
+ }
106
+ }
107
+
108
+ // Add legacy aliases
109
+ for (const [legacy, [src, orig]] of Object.entries(aliases)) rules[legacy] = src[orig]
110
+
111
+ return { meta: { name: "react-compat", version: "1.0.0" }, rules }
112
+ })()
113
+
29
114
  export default [
30
115
  // TypeScript parser setup
31
116
  ...tseslint.configs.strictTypeChecked.slice(0, 2),
32
117
 
33
- // Base rules — all effective rules for *.ts files
118
+ // Base rules — all effective rules for TS plus shared JS/TS rules
34
119
  {
35
120
  name: "eslint-config-setup/base",
121
+ ignores: ["**/*.{md,mdx}"],
36
122
  plugins: {
37
123
  "@cspell": cspellPlugin,
38
124
  "@stylistic": stylisticPlugin,
@@ -42,10 +128,8 @@ export default [
42
128
  "jsdoc": jsdocPlugin,
43
129
  "node": nodePlugin,
44
130
  "perfectionist": perfectionistPlugin,
45
- "react": eslintReactPlugin,
46
- "react-dom": eslintReactPlugin.configs.dom.plugins["@eslint-react/dom"],
131
+ "react": reactCompatPlugin,
47
132
  "react-hooks": reactHooksPlugin,
48
- "react-web-api": eslintReactPlugin.configs["web-api"].plugins["@eslint-react/web-api"],
49
133
  "react-you-might-not-need-an-effect": reactEffectPlugin,
50
134
  "regexp": regexpPlugin,
51
135
  "security": securityPlugin,
@@ -95,11 +179,22 @@ export default [
95
179
  "@typescript-eslint/no-confusing-void-expression": "error",
96
180
  "@typescript-eslint/no-deprecated": "warn",
97
181
  "@typescript-eslint/no-duplicate-type-constituents": "error",
98
- "@typescript-eslint/no-floating-promises": "error",
182
+ "@typescript-eslint/no-floating-promises": [
183
+ "error",
184
+ {
185
+ "checkThenables": true,
186
+ "ignoreIIFE": true
187
+ }
188
+ ],
99
189
  "@typescript-eslint/no-for-in-array": "error",
100
190
  "@typescript-eslint/no-implied-eval": "error",
101
191
  "@typescript-eslint/no-meaningless-void-operator": "error",
102
- "@typescript-eslint/no-misused-promises": "error",
192
+ "@typescript-eslint/no-misused-promises": [
193
+ "error",
194
+ {
195
+ "checksVoidReturn": false
196
+ }
197
+ ],
103
198
  "@typescript-eslint/no-misused-spread": "error",
104
199
  "@typescript-eslint/no-mixed-enums": "error",
105
200
  "@typescript-eslint/no-redundant-type-constituents": "error",
@@ -117,6 +212,7 @@ export default [
117
212
  "@typescript-eslint/no-unsafe-enum-comparison": "error",
118
213
  "@typescript-eslint/no-unsafe-member-access": "error",
119
214
  "@typescript-eslint/no-unsafe-return": "error",
215
+ "@typescript-eslint/no-unsafe-type-assertion": "error",
120
216
  "@typescript-eslint/no-unsafe-unary-minus": "error",
121
217
  "@typescript-eslint/no-useless-default-assignment": "error",
122
218
  "@typescript-eslint/non-nullable-type-assertion-style": "error",
@@ -126,11 +222,19 @@ export default [
126
222
  "@typescript-eslint/prefer-nullish-coalescing": "error",
127
223
  "@typescript-eslint/prefer-optional-chain": "error",
128
224
  "@typescript-eslint/prefer-promise-reject-errors": "error",
225
+ "@typescript-eslint/prefer-readonly": "warn",
129
226
  "@typescript-eslint/prefer-reduce-type-parameter": "error",
130
227
  "@typescript-eslint/prefer-regexp-exec": "error",
131
228
  "@typescript-eslint/prefer-return-this-type": "error",
132
229
  "@typescript-eslint/prefer-string-starts-ends-with": "error",
230
+ "@typescript-eslint/promise-function-async": "error",
133
231
  "@typescript-eslint/related-getter-setter-pairs": "error",
232
+ "@typescript-eslint/require-array-sort-compare": [
233
+ "error",
234
+ {
235
+ "ignoreStringArrays": true
236
+ }
237
+ ],
134
238
  "@typescript-eslint/require-await": "error",
135
239
  "@typescript-eslint/restrict-plus-operands": [
136
240
  "error",
@@ -160,6 +264,13 @@ export default [
160
264
  }
161
265
  ],
162
266
  "@typescript-eslint/strict-void-return": "error",
267
+ "@typescript-eslint/switch-exhaustiveness-check": [
268
+ "error",
269
+ {
270
+ "allowDefaultCaseForExhaustiveSwitch": false,
271
+ "requireDefaultForNonUnion": true
272
+ }
273
+ ],
163
274
  "@typescript-eslint/unbound-method": "error",
164
275
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "error",
165
276
  "accessor-pairs": [
@@ -190,7 +301,12 @@ export default [
190
301
  "getBeforeSet"
191
302
  ],
192
303
  "guard-for-in": "error",
193
- "import/newline-after-import": "error",
304
+ "import/no-extraneous-dependencies": [
305
+ "error",
306
+ {
307
+ "includeTypes": true
308
+ }
309
+ ],
194
310
  "import/no-useless-path-segments": "error",
195
311
  "jsdoc/check-alignment": "error",
196
312
  "jsdoc/check-param-names": "error",
@@ -205,9 +321,7 @@ export default [
205
321
  "jsdoc/reject-function-type": "error",
206
322
  "jsdoc/require-next-type": "error",
207
323
  "jsdoc/require-returns-check": "error",
208
- "jsdoc/require-throws-type": "error",
209
324
  "jsdoc/require-yields-check": "error",
210
- "jsdoc/require-yields-type": "error",
211
325
  "jsdoc/ts-no-empty-object-type": "error",
212
326
  "jsdoc/valid-types": "error",
213
327
  "max-depth": [
@@ -249,6 +363,7 @@ export default [
249
363
  "no-extend-native": "error",
250
364
  "no-extra-bind": "error",
251
365
  "no-fallthrough": "error",
366
+ "no-implicit-globals": "error",
252
367
  "no-labels": "error",
253
368
  "no-lone-blocks": "error",
254
369
  "no-multi-str": "error",
@@ -262,18 +377,33 @@ export default [
262
377
  "no-proto": "error",
263
378
  "no-prototype-builtins": "error",
264
379
  "no-regex-spaces": "error",
380
+ "no-return-assign": [
381
+ "error",
382
+ "always"
383
+ ],
265
384
  "no-script-url": "error",
266
385
  "no-self-compare": "error",
267
- "no-sequences": "error",
386
+ "no-sequences": [
387
+ "error",
388
+ {
389
+ "allowInParentheses": false
390
+ }
391
+ ],
268
392
  "no-template-curly-in-string": "error",
269
393
  "no-unmodified-loop-condition": "error",
270
394
  "no-unreachable-loop": "error",
271
395
  "no-useless-assignment": "error",
272
396
  "no-useless-call": "error",
273
- "no-useless-computed-key": "error",
397
+ "no-useless-computed-key": [
398
+ "error",
399
+ {
400
+ "enforceForClassMembers": true
401
+ }
402
+ ],
274
403
  "no-useless-concat": "error",
275
404
  "no-useless-return": "error",
276
405
  "no-var": "error",
406
+ "node/handle-callback-err": "error",
277
407
  "node/hashbang": "error",
278
408
  "node/no-deprecated-api": "error",
279
409
  "node/no-exports-assign": "error",
@@ -301,6 +431,15 @@ export default [
301
431
  ],
302
432
  "node/prefer-promises/dns": "error",
303
433
  "node/prefer-promises/fs": "error",
434
+ "node/process-exit-as-throw": "error",
435
+ "object-shorthand": [
436
+ "error",
437
+ "always",
438
+ {
439
+ "avoidExplicitReturnArrows": true,
440
+ "avoidQuotes": true
441
+ }
442
+ ],
304
443
  "perfectionist/sort-exports": "error",
305
444
  "perfectionist/sort-imports": [
306
445
  "error",
@@ -313,49 +452,82 @@ export default [
313
452
  "perfectionist/sort-named-imports": "error",
314
453
  "perfectionist/sort-union-types": "error",
315
454
  "prefer-const": "error",
455
+ "prefer-numeric-literals": "error",
316
456
  "prefer-object-has-own": "error",
317
457
  "prefer-object-spread": "error",
318
458
  "prefer-regex-literals": "error",
319
459
  "prefer-rest-params": "error",
320
460
  "prefer-spread": "error",
321
- "prefer-template": "error",
461
+ "prefer-template": "warn",
322
462
  "preserve-caught-error": "error",
323
463
  "radix": "error",
324
- "react-dom/no-dangerously-set-innerhtml": "warn",
325
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
326
- "react-dom/no-missing-button-type": "error",
327
- "react-dom/no-missing-iframe-sandbox": "error",
328
- "react-dom/no-string-style-prop": "error",
329
- "react-dom/no-unknown-property": "error",
330
- "react-dom/no-unsafe-target-blank": "error",
331
- "react-dom/no-void-elements-with-children": "error",
332
- "react-hooks/rules-of-hooks": "error",
333
- "react-web-api/no-leaked-event-listener": "error",
334
- "react-web-api/no-leaked-interval": "error",
335
- "react-web-api/no-leaked-resize-observer": "error",
336
- "react-web-api/no-leaked-timeout": "error",
464
+ "react-hooks/config": "error",
465
+ "react-hooks/error-boundaries": "error",
466
+ "react-hooks/gating": "error",
467
+ "react-hooks/globals": "error",
468
+ "react-hooks/immutability": "error",
469
+ "react-hooks/incompatible-library": "warn",
470
+ "react-hooks/preserve-manual-memoization": "error",
471
+ "react-hooks/purity": "error",
472
+ "react-hooks/refs": "error",
473
+ "react-hooks/set-state-in-effect": "error",
474
+ "react-hooks/set-state-in-render": "error",
475
+ "react-hooks/static-components": "error",
476
+ "react-hooks/unsupported-syntax": "warn",
477
+ "react-hooks/use-memo": "error",
478
+ "react-hooks/void-use-memo": "error",
337
479
  "react-you-might-not-need-an-effect/no-adjust-state-on-prop-change": "warn",
338
480
  "react-you-might-not-need-an-effect/no-chain-state-updates": "error",
339
481
  "react-you-might-not-need-an-effect/no-derived-state": "error",
340
- "react-you-might-not-need-an-effect/no-empty-effect": "error",
341
482
  "react-you-might-not-need-an-effect/no-event-handler": "error",
483
+ "react-you-might-not-need-an-effect/no-external-store-subscription": "error",
342
484
  "react-you-might-not-need-an-effect/no-initialize-state": "error",
343
485
  "react-you-might-not-need-an-effect/no-pass-data-to-parent": "error",
344
486
  "react-you-might-not-need-an-effect/no-pass-live-state-to-parent": "error",
345
487
  "react-you-might-not-need-an-effect/no-reset-all-state-on-prop-change": "error",
346
- "react/jsx-shorthand-boolean": "error",
488
+ "react/context-name": "warn",
489
+ "react/function-definition": "error",
490
+ "react/id-name": "warn",
491
+ "react/jsx-key-before-spread": "error",
492
+ "react/jsx-no-children-prop-with-children": "error",
493
+ "react/jsx-no-leaked-dollar": "warn",
494
+ "react/jsx-no-leaked-render": "error",
495
+ "react/jsx-no-leaked-semicolon": "warn",
347
496
  "react/no-access-state-in-setstate": "error",
348
- "react/no-context-provider": "error",
497
+ "react/no-children-count": "warn",
498
+ "react/no-children-for-each": "warn",
499
+ "react/no-children-map": "warn",
500
+ "react/no-children-only": "warn",
501
+ "react/no-children-to-array": "warn",
502
+ "react/no-class-component": "error",
503
+ "react/no-component-will-mount": "error",
504
+ "react/no-component-will-receive-props": "error",
505
+ "react/no-component-will-update": "error",
506
+ "react/no-context-provider": "warn",
507
+ "react/no-create-ref": "error",
349
508
  "react/no-duplicate-key": "error",
350
- "react/no-forward-ref": "error",
351
- "react/no-leaked-conditional-rendering": "error",
352
- "react/no-missing-key": "error",
353
- "react/no-nested-component-definitions": "error",
354
- "react/no-unstable-context-value": "error",
355
- "react/no-unstable-default-props": "error",
356
- "react/no-unused-state": "error",
357
- "react/no-use-context": "error",
358
- "react/no-useless-fragment": "error",
509
+ "react/no-flush-sync": "error",
510
+ "react/no-hydrate": "error",
511
+ "react/no-implicit-key": "error",
512
+ "react/no-leaked-event-listener": "warn",
513
+ "react/no-leaked-fetch": "warn",
514
+ "react/no-leaked-intersection-observer": "warn",
515
+ "react/no-leaked-interval": "warn",
516
+ "react/no-leaked-resize-observer": "warn",
517
+ "react/no-leaked-timeout": "warn",
518
+ "react/no-misused-capture-owner-stack": "error",
519
+ "react/no-nested-lazy-component-declarations": "error",
520
+ "react/no-render": "error",
521
+ "react/no-unnecessary-use-prefix": "warn",
522
+ "react/no-unsafe-component-will-mount": "warn",
523
+ "react/no-unsafe-component-will-receive-props": "warn",
524
+ "react/no-unsafe-component-will-update": "warn",
525
+ "react/no-unsafe-iframe-sandbox": "warn",
526
+ "react/no-unused-class-component-members": "warn",
527
+ "react/no-unused-props": "warn",
528
+ "react/no-use-context": "warn",
529
+ "react/no-use-form-state": "error",
530
+ "react/ref-name": "warn",
359
531
  "regexp/confusing-quantifier": "warn",
360
532
  "regexp/control-character-escape": "error",
361
533
  "regexp/match-any": "error",
@@ -460,13 +632,7 @@ export default [
460
632
  "sonarjs/prefer-single-boolean-return": "error",
461
633
  "sonarjs/reduce-initial-value": "error",
462
634
  "symbol-description": "error",
463
- "unicorn/prefer-export-from": [
464
- "error",
465
- {
466
- "ignoreUsedVariables": true
467
- }
468
- ],
469
- "unicorn/prefer-import-meta-properties": "error",
635
+ "unicorn/no-for-loop": "warn",
470
636
  "unused-imports/no-unused-imports": "error",
471
637
  "yoda": "error"
472
638
  },
@@ -538,18 +704,26 @@ export default [
538
704
  "@typescript-eslint/switch-exhaustiveness-check": "off",
539
705
  "@typescript-eslint/unbound-method": "off",
540
706
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
541
- "getter-return": "error",
707
+ "dot-notation": "off",
708
+ "no-array-constructor": "off",
542
709
  "no-dupe-args": "error",
710
+ "no-empty-function": "off",
711
+ "no-implied-eval": "off",
543
712
  "no-new-symbol": "off",
544
713
  "no-redeclare": "error",
714
+ "no-return-await": "off",
715
+ "no-shadow": "off",
716
+ "no-throw-literal": "off",
545
717
  "no-undef": "error",
546
- "no-unreachable": "error",
718
+ "no-useless-constructor": "off",
547
719
  "prefer-const": [
548
720
  "error",
549
721
  {
550
722
  "destructuring": "all"
551
723
  }
552
- ]
724
+ ],
725
+ "prefer-promise-reject-errors": "off",
726
+ "require-await": "off"
553
727
  },
554
728
  },
555
729
 
@@ -591,8 +765,7 @@ export default [
591
765
  "vitest/prefer-spy-on": "error",
592
766
  "vitest/prefer-strict-equal": "error",
593
767
  "vitest/prefer-to-be": "error",
594
- "vitest/prefer-to-have-length": "error",
595
- "vitest/valid-title": "error"
768
+ "vitest/prefer-to-have-length": "error"
596
769
  },
597
770
  },
598
771
 
@@ -763,7 +936,84 @@ export default [
763
936
  // Markdown/MDX code block linting
764
937
  {
765
938
  ...mdxPlugin.flatCodeBlocks,
939
+ languageOptions: {
940
+ ...mdxPlugin.flatCodeBlocks.languageOptions,
941
+ parserOptions: {
942
+ ...mdxPlugin.flatCodeBlocks.languageOptions?.parserOptions,
943
+ projectService: false,
944
+ },
945
+ },
766
946
  rules: {
947
+ ...{
948
+ "@typescript-eslint/await-thenable": "off",
949
+ "@typescript-eslint/consistent-type-exports": "off",
950
+ "@typescript-eslint/dot-notation": "off",
951
+ "@typescript-eslint/no-array-delete": "off",
952
+ "@typescript-eslint/no-base-to-string": "off",
953
+ "@typescript-eslint/no-confusing-void-expression": "off",
954
+ "@typescript-eslint/no-deprecated": "off",
955
+ "@typescript-eslint/no-duplicate-type-constituents": "off",
956
+ "@typescript-eslint/no-floating-promises": "off",
957
+ "@typescript-eslint/no-for-in-array": "off",
958
+ "@typescript-eslint/no-implied-eval": "off",
959
+ "@typescript-eslint/no-meaningless-void-operator": "off",
960
+ "@typescript-eslint/no-misused-spread": "off",
961
+ "@typescript-eslint/no-mixed-enums": "off",
962
+ "@typescript-eslint/no-redundant-type-constituents": "off",
963
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
964
+ "@typescript-eslint/no-unnecessary-condition": "off",
965
+ "@typescript-eslint/no-unnecessary-qualifier": "off",
966
+ "@typescript-eslint/no-unnecessary-template-expression": "off",
967
+ "@typescript-eslint/no-unnecessary-type-arguments": "off",
968
+ "@typescript-eslint/no-unnecessary-type-assertion": "off",
969
+ "@typescript-eslint/no-unnecessary-type-conversion": "off",
970
+ "@typescript-eslint/no-unnecessary-type-parameters": "off",
971
+ "@typescript-eslint/no-unsafe-argument": "off",
972
+ "@typescript-eslint/no-unsafe-assignment": "off",
973
+ "@typescript-eslint/no-unsafe-call": "off",
974
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
975
+ "@typescript-eslint/no-unsafe-member-access": "off",
976
+ "@typescript-eslint/no-unsafe-return": "off",
977
+ "@typescript-eslint/no-unsafe-type-assertion": "off",
978
+ "@typescript-eslint/no-unsafe-unary-minus": "off",
979
+ "@typescript-eslint/no-useless-default-assignment": "off",
980
+ "@typescript-eslint/non-nullable-type-assertion-style": "off",
981
+ "@typescript-eslint/only-throw-error": "off",
982
+ "@typescript-eslint/prefer-find": "off",
983
+ "@typescript-eslint/prefer-includes": "off",
984
+ "@typescript-eslint/prefer-nullish-coalescing": "off",
985
+ "@typescript-eslint/prefer-optional-chain": "off",
986
+ "@typescript-eslint/prefer-promise-reject-errors": "off",
987
+ "@typescript-eslint/prefer-readonly": "off",
988
+ "@typescript-eslint/prefer-reduce-type-parameter": "off",
989
+ "@typescript-eslint/prefer-regexp-exec": "off",
990
+ "@typescript-eslint/prefer-return-this-type": "off",
991
+ "@typescript-eslint/prefer-string-starts-ends-with": "off",
992
+ "@typescript-eslint/promise-function-async": "off",
993
+ "@typescript-eslint/related-getter-setter-pairs": "off",
994
+ "@typescript-eslint/require-array-sort-compare": "off",
995
+ "@typescript-eslint/require-await": "off",
996
+ "@typescript-eslint/restrict-plus-operands": "off",
997
+ "@typescript-eslint/restrict-template-expressions": "off",
998
+ "@typescript-eslint/return-await": "off",
999
+ "@typescript-eslint/strict-boolean-expressions": "off",
1000
+ "@typescript-eslint/strict-void-return": "off",
1001
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
1002
+ "@typescript-eslint/unbound-method": "off",
1003
+ "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
1004
+ "dot-notation": "off",
1005
+ "no-array-constructor": "off",
1006
+ "no-empty-function": "off",
1007
+ "no-implied-eval": "off",
1008
+ "no-return-await": "off",
1009
+ "no-shadow": "off",
1010
+ "no-throw-literal": "off",
1011
+ "no-useless-constructor": "off",
1012
+ "prefer-promise-reject-errors": "off",
1013
+ "require-await": "off",
1014
+ "strict": "off",
1015
+ "unicode-bom": "off"
1016
+ },
767
1017
  ...mdxPlugin.flatCodeBlocks.rules,
768
1018
  "eol-last": "off",
769
1019
  "no-undef": "off",
@@ -776,13 +1026,14 @@ export default [
776
1026
  },
777
1027
 
778
1028
  // OxLint integration — disables rules already covered by OxLint
779
- ...[oxlintPlugin.configs["flat/recommended"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint", ...c })),
780
- ...[oxlintPlugin.configs["flat/react"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-react", ...c })),
781
- ...[oxlintPlugin.configs["flat/jsx-a11y"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-jsx-a11y", ...c })),
782
- ...[oxlintPlugin.configs["flat/node"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-node", ...c })),
783
- ...[oxlintPlugin.configs["flat/typescript"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-typescript", ...c })),
784
- ...[oxlintPlugin.configs["flat/unicorn"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-unicorn", ...c })),
785
- ...[oxlintPlugin.configs["flat/import"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-import", ...c })),
786
- ...[oxlintPlugin.configs["flat/jsdoc"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-jsdoc", ...c })),
1029
+ ...[oxlintPlugin.configs["flat/recommended"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint" + (array.length > 1 ? "-" + (index + 1) : "") })),
1030
+ ...[oxlintPlugin.configs["flat/react"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-react" + (array.length > 1 ? "-" + (index + 1) : "") })),
1031
+ ...[oxlintPlugin.configs["flat/jsx-a11y"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-jsx-a11y" + (array.length > 1 ? "-" + (index + 1) : "") })),
1032
+ ...[oxlintPlugin.configs["flat/react-hooks"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-react-hooks" + (array.length > 1 ? "-" + (index + 1) : "") })),
1033
+ ...[oxlintPlugin.configs["flat/node"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-node" + (array.length > 1 ? "-" + (index + 1) : "") })),
1034
+ ...[oxlintPlugin.configs["flat/typescript"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-typescript" + (array.length > 1 ? "-" + (index + 1) : "") })),
1035
+ ...[oxlintPlugin.configs["flat/unicorn"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-unicorn" + (array.length > 1 ? "-" + (index + 1) : "") })),
1036
+ ...[oxlintPlugin.configs["flat/import"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-import" + (array.length > 1 ? "-" + (index + 1) : "") })),
1037
+ ...[oxlintPlugin.configs["flat/jsdoc"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-jsdoc" + (array.length > 1 ? "-" + (index + 1) : "") })),
787
1038
 
788
1039
  ]