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
  "import": importXPlugin,
43
129
  "jsdoc": jsdocPlugin,
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,
@@ -94,11 +178,22 @@ export default [
94
178
  "@typescript-eslint/no-confusing-void-expression": "error",
95
179
  "@typescript-eslint/no-deprecated": "warn",
96
180
  "@typescript-eslint/no-duplicate-type-constituents": "error",
97
- "@typescript-eslint/no-floating-promises": "error",
181
+ "@typescript-eslint/no-floating-promises": [
182
+ "error",
183
+ {
184
+ "checkThenables": true,
185
+ "ignoreIIFE": true
186
+ }
187
+ ],
98
188
  "@typescript-eslint/no-for-in-array": "error",
99
189
  "@typescript-eslint/no-implied-eval": "error",
100
190
  "@typescript-eslint/no-meaningless-void-operator": "error",
101
- "@typescript-eslint/no-misused-promises": "error",
191
+ "@typescript-eslint/no-misused-promises": [
192
+ "error",
193
+ {
194
+ "checksVoidReturn": false
195
+ }
196
+ ],
102
197
  "@typescript-eslint/no-misused-spread": "error",
103
198
  "@typescript-eslint/no-mixed-enums": "error",
104
199
  "@typescript-eslint/no-redundant-type-constituents": "error",
@@ -116,6 +211,7 @@ export default [
116
211
  "@typescript-eslint/no-unsafe-enum-comparison": "error",
117
212
  "@typescript-eslint/no-unsafe-member-access": "error",
118
213
  "@typescript-eslint/no-unsafe-return": "error",
214
+ "@typescript-eslint/no-unsafe-type-assertion": "error",
119
215
  "@typescript-eslint/no-unsafe-unary-minus": "error",
120
216
  "@typescript-eslint/no-useless-default-assignment": "error",
121
217
  "@typescript-eslint/non-nullable-type-assertion-style": "error",
@@ -125,11 +221,19 @@ export default [
125
221
  "@typescript-eslint/prefer-nullish-coalescing": "error",
126
222
  "@typescript-eslint/prefer-optional-chain": "error",
127
223
  "@typescript-eslint/prefer-promise-reject-errors": "error",
224
+ "@typescript-eslint/prefer-readonly": "warn",
128
225
  "@typescript-eslint/prefer-reduce-type-parameter": "error",
129
226
  "@typescript-eslint/prefer-regexp-exec": "error",
130
227
  "@typescript-eslint/prefer-return-this-type": "error",
131
228
  "@typescript-eslint/prefer-string-starts-ends-with": "error",
229
+ "@typescript-eslint/promise-function-async": "error",
132
230
  "@typescript-eslint/related-getter-setter-pairs": "error",
231
+ "@typescript-eslint/require-array-sort-compare": [
232
+ "error",
233
+ {
234
+ "ignoreStringArrays": true
235
+ }
236
+ ],
133
237
  "@typescript-eslint/require-await": "error",
134
238
  "@typescript-eslint/restrict-plus-operands": [
135
239
  "error",
@@ -159,6 +263,13 @@ export default [
159
263
  }
160
264
  ],
161
265
  "@typescript-eslint/strict-void-return": "error",
266
+ "@typescript-eslint/switch-exhaustiveness-check": [
267
+ "error",
268
+ {
269
+ "allowDefaultCaseForExhaustiveSwitch": false,
270
+ "requireDefaultForNonUnion": true
271
+ }
272
+ ],
162
273
  "@typescript-eslint/unbound-method": "error",
163
274
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "error",
164
275
  "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,40 @@ 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
+ "object-shorthand": [
407
+ "error",
408
+ "always",
409
+ {
410
+ "avoidExplicitReturnArrows": true,
411
+ "avoidQuotes": true
412
+ }
413
+ ],
277
414
  "perfectionist/sort-exports": "error",
278
415
  "perfectionist/sort-imports": [
279
416
  "error",
@@ -286,49 +423,82 @@ export default [
286
423
  "perfectionist/sort-named-imports": "error",
287
424
  "perfectionist/sort-union-types": "error",
288
425
  "prefer-const": "error",
426
+ "prefer-numeric-literals": "error",
289
427
  "prefer-object-has-own": "error",
290
428
  "prefer-object-spread": "error",
291
429
  "prefer-regex-literals": "error",
292
430
  "prefer-rest-params": "error",
293
431
  "prefer-spread": "error",
294
- "prefer-template": "error",
432
+ "prefer-template": "warn",
295
433
  "preserve-caught-error": "error",
296
434
  "radix": "error",
297
- "react-dom/no-dangerously-set-innerhtml": "warn",
298
- "react-dom/no-dangerously-set-innerhtml-with-children": "error",
299
- "react-dom/no-missing-button-type": "error",
300
- "react-dom/no-missing-iframe-sandbox": "error",
301
- "react-dom/no-string-style-prop": "error",
302
- "react-dom/no-unknown-property": "error",
303
- "react-dom/no-unsafe-target-blank": "error",
304
- "react-dom/no-void-elements-with-children": "error",
305
- "react-hooks/rules-of-hooks": "error",
306
- "react-web-api/no-leaked-event-listener": "error",
307
- "react-web-api/no-leaked-interval": "error",
308
- "react-web-api/no-leaked-resize-observer": "error",
309
- "react-web-api/no-leaked-timeout": "error",
435
+ "react-hooks/config": "error",
436
+ "react-hooks/error-boundaries": "error",
437
+ "react-hooks/gating": "error",
438
+ "react-hooks/globals": "error",
439
+ "react-hooks/immutability": "error",
440
+ "react-hooks/incompatible-library": "warn",
441
+ "react-hooks/preserve-manual-memoization": "error",
442
+ "react-hooks/purity": "error",
443
+ "react-hooks/refs": "error",
444
+ "react-hooks/set-state-in-effect": "error",
445
+ "react-hooks/set-state-in-render": "error",
446
+ "react-hooks/static-components": "error",
447
+ "react-hooks/unsupported-syntax": "warn",
448
+ "react-hooks/use-memo": "error",
449
+ "react-hooks/void-use-memo": "error",
310
450
  "react-you-might-not-need-an-effect/no-adjust-state-on-prop-change": "warn",
311
451
  "react-you-might-not-need-an-effect/no-chain-state-updates": "error",
312
452
  "react-you-might-not-need-an-effect/no-derived-state": "error",
313
- "react-you-might-not-need-an-effect/no-empty-effect": "error",
314
453
  "react-you-might-not-need-an-effect/no-event-handler": "error",
454
+ "react-you-might-not-need-an-effect/no-external-store-subscription": "error",
315
455
  "react-you-might-not-need-an-effect/no-initialize-state": "error",
316
456
  "react-you-might-not-need-an-effect/no-pass-data-to-parent": "error",
317
457
  "react-you-might-not-need-an-effect/no-pass-live-state-to-parent": "error",
318
458
  "react-you-might-not-need-an-effect/no-reset-all-state-on-prop-change": "error",
319
- "react/jsx-shorthand-boolean": "error",
459
+ "react/context-name": "warn",
460
+ "react/function-definition": "error",
461
+ "react/id-name": "warn",
462
+ "react/jsx-key-before-spread": "error",
463
+ "react/jsx-no-children-prop-with-children": "error",
464
+ "react/jsx-no-leaked-dollar": "warn",
465
+ "react/jsx-no-leaked-render": "error",
466
+ "react/jsx-no-leaked-semicolon": "warn",
320
467
  "react/no-access-state-in-setstate": "error",
321
- "react/no-context-provider": "error",
468
+ "react/no-children-count": "warn",
469
+ "react/no-children-for-each": "warn",
470
+ "react/no-children-map": "warn",
471
+ "react/no-children-only": "warn",
472
+ "react/no-children-to-array": "warn",
473
+ "react/no-class-component": "error",
474
+ "react/no-component-will-mount": "error",
475
+ "react/no-component-will-receive-props": "error",
476
+ "react/no-component-will-update": "error",
477
+ "react/no-context-provider": "warn",
478
+ "react/no-create-ref": "error",
322
479
  "react/no-duplicate-key": "error",
323
- "react/no-forward-ref": "error",
324
- "react/no-leaked-conditional-rendering": "error",
325
- "react/no-missing-key": "error",
326
- "react/no-nested-component-definitions": "error",
327
- "react/no-unstable-context-value": "error",
328
- "react/no-unstable-default-props": "error",
329
- "react/no-unused-state": "error",
330
- "react/no-use-context": "error",
331
- "react/no-useless-fragment": "error",
480
+ "react/no-flush-sync": "error",
481
+ "react/no-hydrate": "error",
482
+ "react/no-implicit-key": "error",
483
+ "react/no-leaked-event-listener": "warn",
484
+ "react/no-leaked-fetch": "warn",
485
+ "react/no-leaked-intersection-observer": "warn",
486
+ "react/no-leaked-interval": "warn",
487
+ "react/no-leaked-resize-observer": "warn",
488
+ "react/no-leaked-timeout": "warn",
489
+ "react/no-misused-capture-owner-stack": "error",
490
+ "react/no-nested-lazy-component-declarations": "error",
491
+ "react/no-render": "error",
492
+ "react/no-unnecessary-use-prefix": "warn",
493
+ "react/no-unsafe-component-will-mount": "warn",
494
+ "react/no-unsafe-component-will-receive-props": "warn",
495
+ "react/no-unsafe-component-will-update": "warn",
496
+ "react/no-unsafe-iframe-sandbox": "warn",
497
+ "react/no-unused-class-component-members": "warn",
498
+ "react/no-unused-props": "warn",
499
+ "react/no-use-context": "warn",
500
+ "react/no-use-form-state": "error",
501
+ "react/ref-name": "warn",
332
502
  "regexp/confusing-quantifier": "warn",
333
503
  "regexp/control-character-escape": "error",
334
504
  "regexp/match-any": "error",
@@ -433,13 +603,7 @@ export default [
433
603
  "sonarjs/prefer-single-boolean-return": "error",
434
604
  "sonarjs/reduce-initial-value": "error",
435
605
  "symbol-description": "error",
436
- "unicorn/prefer-export-from": [
437
- "error",
438
- {
439
- "ignoreUsedVariables": true
440
- }
441
- ],
442
- "unicorn/prefer-import-meta-properties": "error",
606
+ "unicorn/no-for-loop": "warn",
443
607
  "unused-imports/no-unused-imports": "error",
444
608
  "yoda": "error"
445
609
  },
@@ -511,18 +675,26 @@ export default [
511
675
  "@typescript-eslint/switch-exhaustiveness-check": "off",
512
676
  "@typescript-eslint/unbound-method": "off",
513
677
  "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
514
- "getter-return": "error",
678
+ "dot-notation": "off",
679
+ "no-array-constructor": "off",
515
680
  "no-dupe-args": "error",
681
+ "no-empty-function": "off",
682
+ "no-implied-eval": "off",
516
683
  "no-new-symbol": "off",
517
684
  "no-redeclare": "error",
685
+ "no-return-await": "off",
686
+ "no-shadow": "off",
687
+ "no-throw-literal": "off",
518
688
  "no-undef": "error",
519
- "no-unreachable": "error",
689
+ "no-useless-constructor": "off",
520
690
  "prefer-const": [
521
691
  "error",
522
692
  {
523
693
  "destructuring": "all"
524
694
  }
525
- ]
695
+ ],
696
+ "prefer-promise-reject-errors": "off",
697
+ "require-await": "off"
526
698
  },
527
699
  },
528
700
 
@@ -564,8 +736,7 @@ export default [
564
736
  "vitest/prefer-spy-on": "error",
565
737
  "vitest/prefer-strict-equal": "error",
566
738
  "vitest/prefer-to-be": "error",
567
- "vitest/prefer-to-have-length": "error",
568
- "vitest/valid-title": "error"
739
+ "vitest/prefer-to-have-length": "error"
569
740
  },
570
741
  },
571
742
 
@@ -736,7 +907,84 @@ export default [
736
907
  // Markdown/MDX code block linting
737
908
  {
738
909
  ...mdxPlugin.flatCodeBlocks,
910
+ languageOptions: {
911
+ ...mdxPlugin.flatCodeBlocks.languageOptions,
912
+ parserOptions: {
913
+ ...mdxPlugin.flatCodeBlocks.languageOptions?.parserOptions,
914
+ projectService: false,
915
+ },
916
+ },
739
917
  rules: {
918
+ ...{
919
+ "@typescript-eslint/await-thenable": "off",
920
+ "@typescript-eslint/consistent-type-exports": "off",
921
+ "@typescript-eslint/dot-notation": "off",
922
+ "@typescript-eslint/no-array-delete": "off",
923
+ "@typescript-eslint/no-base-to-string": "off",
924
+ "@typescript-eslint/no-confusing-void-expression": "off",
925
+ "@typescript-eslint/no-deprecated": "off",
926
+ "@typescript-eslint/no-duplicate-type-constituents": "off",
927
+ "@typescript-eslint/no-floating-promises": "off",
928
+ "@typescript-eslint/no-for-in-array": "off",
929
+ "@typescript-eslint/no-implied-eval": "off",
930
+ "@typescript-eslint/no-meaningless-void-operator": "off",
931
+ "@typescript-eslint/no-misused-spread": "off",
932
+ "@typescript-eslint/no-mixed-enums": "off",
933
+ "@typescript-eslint/no-redundant-type-constituents": "off",
934
+ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off",
935
+ "@typescript-eslint/no-unnecessary-condition": "off",
936
+ "@typescript-eslint/no-unnecessary-qualifier": "off",
937
+ "@typescript-eslint/no-unnecessary-template-expression": "off",
938
+ "@typescript-eslint/no-unnecessary-type-arguments": "off",
939
+ "@typescript-eslint/no-unnecessary-type-assertion": "off",
940
+ "@typescript-eslint/no-unnecessary-type-conversion": "off",
941
+ "@typescript-eslint/no-unnecessary-type-parameters": "off",
942
+ "@typescript-eslint/no-unsafe-argument": "off",
943
+ "@typescript-eslint/no-unsafe-assignment": "off",
944
+ "@typescript-eslint/no-unsafe-call": "off",
945
+ "@typescript-eslint/no-unsafe-enum-comparison": "off",
946
+ "@typescript-eslint/no-unsafe-member-access": "off",
947
+ "@typescript-eslint/no-unsafe-return": "off",
948
+ "@typescript-eslint/no-unsafe-type-assertion": "off",
949
+ "@typescript-eslint/no-unsafe-unary-minus": "off",
950
+ "@typescript-eslint/no-useless-default-assignment": "off",
951
+ "@typescript-eslint/non-nullable-type-assertion-style": "off",
952
+ "@typescript-eslint/only-throw-error": "off",
953
+ "@typescript-eslint/prefer-find": "off",
954
+ "@typescript-eslint/prefer-includes": "off",
955
+ "@typescript-eslint/prefer-nullish-coalescing": "off",
956
+ "@typescript-eslint/prefer-optional-chain": "off",
957
+ "@typescript-eslint/prefer-promise-reject-errors": "off",
958
+ "@typescript-eslint/prefer-readonly": "off",
959
+ "@typescript-eslint/prefer-reduce-type-parameter": "off",
960
+ "@typescript-eslint/prefer-regexp-exec": "off",
961
+ "@typescript-eslint/prefer-return-this-type": "off",
962
+ "@typescript-eslint/prefer-string-starts-ends-with": "off",
963
+ "@typescript-eslint/promise-function-async": "off",
964
+ "@typescript-eslint/related-getter-setter-pairs": "off",
965
+ "@typescript-eslint/require-array-sort-compare": "off",
966
+ "@typescript-eslint/require-await": "off",
967
+ "@typescript-eslint/restrict-plus-operands": "off",
968
+ "@typescript-eslint/restrict-template-expressions": "off",
969
+ "@typescript-eslint/return-await": "off",
970
+ "@typescript-eslint/strict-boolean-expressions": "off",
971
+ "@typescript-eslint/strict-void-return": "off",
972
+ "@typescript-eslint/switch-exhaustiveness-check": "off",
973
+ "@typescript-eslint/unbound-method": "off",
974
+ "@typescript-eslint/use-unknown-in-catch-callback-variable": "off",
975
+ "dot-notation": "off",
976
+ "no-array-constructor": "off",
977
+ "no-empty-function": "off",
978
+ "no-implied-eval": "off",
979
+ "no-return-await": "off",
980
+ "no-shadow": "off",
981
+ "no-throw-literal": "off",
982
+ "no-useless-constructor": "off",
983
+ "prefer-promise-reject-errors": "off",
984
+ "require-await": "off",
985
+ "strict": "off",
986
+ "unicode-bom": "off"
987
+ },
740
988
  ...mdxPlugin.flatCodeBlocks.rules,
741
989
  "eol-last": "off",
742
990
  "no-undef": "off",
@@ -749,12 +997,13 @@ export default [
749
997
  },
750
998
 
751
999
  // OxLint integration — disables rules already covered by OxLint
752
- ...[oxlintPlugin.configs["flat/recommended"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint", ...c })),
753
- ...[oxlintPlugin.configs["flat/react"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-react", ...c })),
754
- ...[oxlintPlugin.configs["flat/jsx-a11y"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-jsx-a11y", ...c })),
755
- ...[oxlintPlugin.configs["flat/typescript"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-typescript", ...c })),
756
- ...[oxlintPlugin.configs["flat/unicorn"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-unicorn", ...c })),
757
- ...[oxlintPlugin.configs["flat/import"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-import", ...c })),
758
- ...[oxlintPlugin.configs["flat/jsdoc"]].flat().map((c) => ({ name: "eslint-config-setup/oxlint-jsdoc", ...c })),
1000
+ ...[oxlintPlugin.configs["flat/recommended"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint" + (array.length > 1 ? "-" + (index + 1) : "") })),
1001
+ ...[oxlintPlugin.configs["flat/react"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-react" + (array.length > 1 ? "-" + (index + 1) : "") })),
1002
+ ...[oxlintPlugin.configs["flat/jsx-a11y"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-jsx-a11y" + (array.length > 1 ? "-" + (index + 1) : "") })),
1003
+ ...[oxlintPlugin.configs["flat/react-hooks"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-react-hooks" + (array.length > 1 ? "-" + (index + 1) : "") })),
1004
+ ...[oxlintPlugin.configs["flat/typescript"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-typescript" + (array.length > 1 ? "-" + (index + 1) : "") })),
1005
+ ...[oxlintPlugin.configs["flat/unicorn"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-unicorn" + (array.length > 1 ? "-" + (index + 1) : "") })),
1006
+ ...[oxlintPlugin.configs["flat/import"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-import" + (array.length > 1 ? "-" + (index + 1) : "") })),
1007
+ ...[oxlintPlugin.configs["flat/jsdoc"]].flat().map((c, index, array) => ({ ...c, name: "eslint-config-setup/oxlint-jsdoc" + (array.length > 1 ? "-" + (index + 1) : "") })),
759
1008
 
760
1009
  ]