@oxlint/migrate 1.46.0 → 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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as preFixForJsPlugins, f as nurseryRules, p as rules_exports, u as isOffValue } from "../settings-C8UlaScv.mjs";
2
+ import { a as preFixForJsPlugins, f as buildUnsupportedRuleExplanations, m as rules_exports, p as nurseryRules, u as isOffValue } from "../settings-Bb6227Gq.mjs";
3
3
  import main from "../src/index.mjs";
4
4
  import { program } from "commander";
5
5
  import { existsSync, readFileSync, renameSync, writeFileSync } from "node:fs";
@@ -33,7 +33,7 @@ const loadESLintConfig = async (filePath) => {
33
33
 
34
34
  //#endregion
35
35
  //#region package.json
36
- var version = "1.46.0";
36
+ var version = "1.49.0";
37
37
 
38
38
  //#endregion
39
39
  //#region src/walker/comments/replaceRuleDirectiveComment.ts
@@ -278,6 +278,7 @@ var DefaultReporter = class {
278
278
  skippedRules = new Map([
279
279
  ["nursery", /* @__PURE__ */ new Set()],
280
280
  ["type-aware", /* @__PURE__ */ new Set()],
281
+ ["not-implemented", /* @__PURE__ */ new Set()],
281
282
  ["unsupported", /* @__PURE__ */ new Set()],
282
283
  ["js-plugins", /* @__PURE__ */ new Set()]
283
284
  ]);
@@ -297,6 +298,7 @@ var DefaultReporter = class {
297
298
  const result = {
298
299
  nursery: [],
299
300
  "type-aware": [],
301
+ "not-implemented": [],
300
302
  "js-plugins": [],
301
303
  unsupported: []
302
304
  };
@@ -307,6 +309,7 @@ var DefaultReporter = class {
307
309
 
308
310
  //#endregion
309
311
  //#region bin/output-formatter.ts
312
+ const unsupportedRuleExplanations = buildUnsupportedRuleExplanations();
310
313
  const CATEGORY_METADATA = {
311
314
  nursery: {
312
315
  label: "Nursery",
@@ -320,7 +323,14 @@ const CATEGORY_METADATA = {
320
323
  label: "JS Plugins",
321
324
  description: "Requires JS plugins:"
322
325
  },
323
- unsupported: { label: "Unsupported" }
326
+ "not-implemented": {
327
+ label: "Not Implemented",
328
+ description: "Not yet in oxlint:"
329
+ },
330
+ unsupported: {
331
+ label: "Unsupported",
332
+ description: "Won't be implemented:"
333
+ }
324
334
  };
325
335
  const MAX_LABEL_LENGTH = Math.max(...Object.values(CATEGORY_METADATA).map((meta) => meta.label.length));
326
336
  /**
@@ -336,7 +346,8 @@ function formatCategorySummary(count, category, rules, showAll) {
336
346
  return ` - ${String(count).padStart(3)} ${meta.label.padEnd(MAX_LABEL_LENGTH)} (${prefix}${exampleList}${suffix})\n`;
337
347
  }
338
348
  let output = ` - ${count} ${meta.label}\n`;
339
- for (const rule of rules) output += ` - ${rule}\n`;
349
+ for (const rule of rules) if (category === "unsupported" && unsupportedRuleExplanations[rule]) output += ` - ${rule}: ${unsupportedRuleExplanations[rule]}\n`;
350
+ else output += ` - ${rule}\n`;
340
351
  return output;
341
352
  }
342
353
  /**
@@ -360,18 +371,20 @@ function formatMigrationOutput(data) {
360
371
  const byCategory = data.skippedRulesByCategory;
361
372
  const nurseryCount = byCategory.nursery.length;
362
373
  const typeAwareCount = byCategory["type-aware"].length;
374
+ const notImplementedCount = byCategory["not-implemented"].length;
363
375
  const unsupportedCount = byCategory.unsupported.length;
364
376
  const jsPluginsCount = byCategory["js-plugins"].length;
365
- const totalSkipped = nurseryCount + typeAwareCount + unsupportedCount + jsPluginsCount;
377
+ const totalSkipped = nurseryCount + typeAwareCount + notImplementedCount + unsupportedCount + jsPluginsCount;
366
378
  if (totalSkipped > 0) {
367
379
  output += `\n Skipped ${totalSkipped} rules:\n`;
368
380
  if (nurseryCount > 0) output += formatCategorySummary(nurseryCount, "nursery", byCategory.nursery, showAll);
369
381
  if (typeAwareCount > 0) output += formatCategorySummary(typeAwareCount, "type-aware", byCategory["type-aware"], showAll);
370
382
  if (jsPluginsCount > 0) output += formatCategorySummary(jsPluginsCount, "js-plugins", byCategory["js-plugins"], showAll);
383
+ if (notImplementedCount > 0) output += formatCategorySummary(notImplementedCount, "not-implemented", byCategory["not-implemented"], showAll);
371
384
  if (unsupportedCount > 0) output += formatCategorySummary(unsupportedCount, "unsupported", byCategory.unsupported, showAll);
372
385
  if (!showAll) {
373
386
  const maxExamples = 3;
374
- if (nurseryCount > maxExamples || typeAwareCount > maxExamples || unsupportedCount > maxExamples || jsPluginsCount > maxExamples) output += `\n Tip: Use --details to see the full list.\n`;
387
+ if (nurseryCount > maxExamples || typeAwareCount > maxExamples || notImplementedCount > maxExamples || unsupportedCount > maxExamples || jsPluginsCount > maxExamples) output += `\n Tip: Use --details to see the full list.\n`;
375
388
  }
376
389
  const missingFlags = detectMissingFlags(byCategory, data.cliOptions);
377
390
  if (missingFlags.length > 0) {
@@ -391,6 +391,7 @@ const styleRules = [
391
391
  "jest/prefer-jest-mocked",
392
392
  "jest/prefer-lowercase-title",
393
393
  "jest/prefer-mock-promise-shorthand",
394
+ "jest/prefer-mock-return-shorthand",
394
395
  "jest/prefer-spy-on",
395
396
  "jest/prefer-strict-equal",
396
397
  "jest/prefer-to-be",
@@ -425,6 +426,7 @@ const styleRules = [
425
426
  "@typescript-eslint/adjacent-overload-signatures",
426
427
  "@typescript-eslint/array-type",
427
428
  "@typescript-eslint/ban-tslint-comment",
429
+ "@typescript-eslint/class-literal-property-style",
428
430
  "@typescript-eslint/consistent-generic-constructors",
429
431
  "@typescript-eslint/consistent-indexed-object-style",
430
432
  "@typescript-eslint/consistent-type-assertions",
@@ -432,10 +434,12 @@ const styleRules = [
432
434
  "@typescript-eslint/consistent-type-imports",
433
435
  "@typescript-eslint/no-empty-interface",
434
436
  "@typescript-eslint/no-inferrable-types",
437
+ "@typescript-eslint/parameter-properties",
435
438
  "@typescript-eslint/prefer-for-of",
436
439
  "@typescript-eslint/prefer-function-type",
437
440
  "@typescript-eslint/prefer-reduce-type-parameter",
438
441
  "@typescript-eslint/prefer-return-this-type",
442
+ "@typescript-eslint/unified-signatures",
439
443
  "unicorn/catch-error-name",
440
444
  "unicorn/consistent-date-clone",
441
445
  "unicorn/consistent-existence-index-check",
@@ -481,10 +485,12 @@ const styleRules = [
481
485
  "vitest/consistent-test-filename",
482
486
  "vitest/consistent-vitest-vi",
483
487
  "vitest/no-import-node-test",
488
+ "vitest/no-importing-vitest-globals",
484
489
  "vitest/prefer-called-once",
485
490
  "vitest/prefer-called-times",
486
491
  "vitest/prefer-describe-function-title",
487
492
  "vitest/prefer-expect-type-of",
493
+ "vitest/prefer-import-in-mock",
488
494
  "vitest/prefer-to-be-falsy",
489
495
  "vitest/prefer-to-be-object",
490
496
  "vitest/prefer-to-be-truthy",
@@ -532,6 +538,7 @@ const styleRules = [
532
538
  "vitest/prefer-hooks-on-top",
533
539
  "vitest/prefer-lowercase-title",
534
540
  "vitest/prefer-mock-promise-shorthand",
541
+ "vitest/prefer-mock-return-shorthand",
535
542
  "vitest/prefer-spy-on",
536
543
  "vitest/prefer-strict-equal",
537
544
  "vitest/prefer-to-be",
@@ -548,7 +555,9 @@ const suspiciousRules = [
548
555
  "no-extend-native",
549
556
  "no-extra-bind",
550
557
  "no-new",
558
+ "no-shadow",
551
559
  "no-unexpected-multiline",
560
+ "no-unmodified-loop-condition",
552
561
  "no-unneeded-ternary",
553
562
  "no-useless-concat",
554
563
  "no-useless-constructor",
@@ -588,6 +597,7 @@ const suspiciousRules = [
588
597
  "unicorn/require-post-message-target-origin",
589
598
  "vue/no-required-prop-with-default",
590
599
  "vue/require-default-export",
600
+ "@typescript-eslint/no-shadow",
591
601
  "@typescript-eslint/no-useless-constructor",
592
602
  "import-x/no-absolute-path",
593
603
  "import-x/no-empty-named-blocks",
@@ -616,6 +626,7 @@ const restrictionRules = [
616
626
  "no-restricted-imports",
617
627
  "no-sequences",
618
628
  "no-undefined",
629
+ "no-use-before-define",
619
630
  "no-var",
620
631
  "no-void",
621
632
  "unicode-bom",
@@ -632,6 +643,7 @@ const restrictionRules = [
632
643
  "jsdoc/empty-tags",
633
644
  "jsx-a11y/anchor-ambiguous-text",
634
645
  "node/no-new-require",
646
+ "node/no-path-concat",
635
647
  "node/no-process-env",
636
648
  "promise/catch-or-return",
637
649
  "promise/spec-only",
@@ -649,6 +661,7 @@ const restrictionRules = [
649
661
  "@typescript-eslint/no-empty-object-type",
650
662
  "@typescript-eslint/no-explicit-any",
651
663
  "@typescript-eslint/no-import-type-side-effects",
664
+ "@typescript-eslint/no-invalid-void-type",
652
665
  "@typescript-eslint/no-namespace",
653
666
  "@typescript-eslint/no-non-null-asserted-nullish-coalescing",
654
667
  "@typescript-eslint/no-non-null-assertion",
@@ -677,6 +690,7 @@ const restrictionRules = [
677
690
  "@typescript-eslint/class-methods-use-this",
678
691
  "@typescript-eslint/no-empty-function",
679
692
  "@typescript-eslint/no-restricted-imports",
693
+ "@typescript-eslint/no-use-before-define",
680
694
  "import-x/extensions",
681
695
  "import-x/no-amd",
682
696
  "import-x/no-commonjs",
@@ -687,6 +701,7 @@ const restrictionRules = [
687
701
  "import-x/no-webpack-loader-syntax",
688
702
  "import-x/unambiguous",
689
703
  "n/no-new-require",
704
+ "n/no-path-concat",
690
705
  "n/no-process-env",
691
706
  "react-refresh/only-export-components"
692
707
  ];
@@ -791,6 +806,7 @@ const correctnessRules = [
791
806
  "jsx-a11y/no-distracting-elements",
792
807
  "jsx-a11y/no-noninteractive-tabindex",
793
808
  "jsx-a11y/no-redundant-roles",
809
+ "jsx-a11y/no-static-element-interactions",
794
810
  "jsx-a11y/prefer-tag-over-role",
795
811
  "jsx-a11y/role-has-required-aria-props",
796
812
  "jsx-a11y/role-supports-aria-props",
@@ -911,16 +927,29 @@ const nurseryRules = [
911
927
  "no-unreachable",
912
928
  "import/export",
913
929
  "import/named",
914
- "jsx-a11y/no-static-element-interactions",
915
930
  "promise/no-return-in-finally",
916
931
  "react/require-render-return",
932
+ "@typescript-eslint/consistent-return",
933
+ "@typescript-eslint/consistent-type-exports",
934
+ "@typescript-eslint/dot-notation",
935
+ "@typescript-eslint/no-unnecessary-condition",
936
+ "@typescript-eslint/no-unnecessary-qualifier",
937
+ "@typescript-eslint/no-unnecessary-type-parameters",
938
+ "@typescript-eslint/no-useless-default-assignment",
939
+ "@typescript-eslint/prefer-find",
917
940
  "@typescript-eslint/prefer-optional-chain",
941
+ "@typescript-eslint/prefer-readonly",
942
+ "@typescript-eslint/prefer-readonly-parameter-types",
943
+ "@typescript-eslint/prefer-regexp-exec",
944
+ "@typescript-eslint/prefer-string-starts-ends-with",
945
+ "@typescript-eslint/strict-void-return",
918
946
  "import-x/export",
919
947
  "import-x/named"
920
948
  ];
921
949
  const perfRules = [
922
950
  "no-await-in-loop",
923
951
  "no-useless-call",
952
+ "react/jsx-no-constructed-context-values",
924
953
  "react/no-array-index-key",
925
954
  "react-perf/jsx-no-jsx-as-prop",
926
955
  "react-perf/jsx-no-new-array-as-prop",
@@ -932,6 +961,9 @@ const perfRules = [
932
961
  ];
933
962
  const typeAwareRules = [
934
963
  "@typescript-eslint/await-thenable",
964
+ "@typescript-eslint/consistent-return",
965
+ "@typescript-eslint/consistent-type-exports",
966
+ "@typescript-eslint/dot-notation",
935
967
  "@typescript-eslint/no-array-delete",
936
968
  "@typescript-eslint/no-base-to-string",
937
969
  "@typescript-eslint/no-confusing-void-expression",
@@ -946,9 +978,12 @@ const typeAwareRules = [
946
978
  "@typescript-eslint/no-mixed-enums",
947
979
  "@typescript-eslint/no-redundant-type-constituents",
948
980
  "@typescript-eslint/no-unnecessary-boolean-literal-compare",
981
+ "@typescript-eslint/no-unnecessary-condition",
982
+ "@typescript-eslint/no-unnecessary-qualifier",
949
983
  "@typescript-eslint/no-unnecessary-template-expression",
950
984
  "@typescript-eslint/no-unnecessary-type-arguments",
951
985
  "@typescript-eslint/no-unnecessary-type-assertion",
986
+ "@typescript-eslint/no-unnecessary-type-parameters",
952
987
  "@typescript-eslint/no-unsafe-argument",
953
988
  "@typescript-eslint/no-unsafe-assignment",
954
989
  "@typescript-eslint/no-unsafe-call",
@@ -957,14 +992,20 @@ const typeAwareRules = [
957
992
  "@typescript-eslint/no-unsafe-return",
958
993
  "@typescript-eslint/no-unsafe-type-assertion",
959
994
  "@typescript-eslint/no-unsafe-unary-minus",
995
+ "@typescript-eslint/no-useless-default-assignment",
960
996
  "@typescript-eslint/non-nullable-type-assertion-style",
961
997
  "@typescript-eslint/only-throw-error",
998
+ "@typescript-eslint/prefer-find",
962
999
  "@typescript-eslint/prefer-includes",
963
1000
  "@typescript-eslint/prefer-nullish-coalescing",
964
1001
  "@typescript-eslint/prefer-optional-chain",
965
1002
  "@typescript-eslint/prefer-promise-reject-errors",
1003
+ "@typescript-eslint/prefer-readonly",
1004
+ "@typescript-eslint/prefer-readonly-parameter-types",
966
1005
  "@typescript-eslint/prefer-reduce-type-parameter",
1006
+ "@typescript-eslint/prefer-regexp-exec",
967
1007
  "@typescript-eslint/prefer-return-this-type",
1008
+ "@typescript-eslint/prefer-string-starts-ends-with",
968
1009
  "@typescript-eslint/promise-function-async",
969
1010
  "@typescript-eslint/related-getter-setter-pairs",
970
1011
  "@typescript-eslint/require-array-sort-compare",
@@ -973,6 +1014,7 @@ const typeAwareRules = [
973
1014
  "@typescript-eslint/restrict-template-expressions",
974
1015
  "@typescript-eslint/return-await",
975
1016
  "@typescript-eslint/strict-boolean-expressions",
1017
+ "@typescript-eslint/strict-void-return",
976
1018
  "@typescript-eslint/switch-exhaustiveness-check",
977
1019
  "@typescript-eslint/unbound-method",
978
1020
  "@typescript-eslint/use-unknown-in-catch-callback-variable"
@@ -1061,9 +1103,403 @@ const enableJsPluginRule = (targetConfig, rule, ruleEntry) => {
1061
1103
  return true;
1062
1104
  };
1063
1105
 
1106
+ //#endregion
1107
+ //#region src/generated/unsupported-rules.json
1108
+ var unsupportedRules = {
1109
+ "eslint/no-dupe-args": "Superseded by strict mode.",
1110
+ "eslint/no-octal": "Superseded by strict mode.",
1111
+ "eslint/no-octal-escape": "Superseded by strict mode.",
1112
+ "eslint/no-new-symbol": "Deprecated as of ESLint v9, but for a while disable manually.",
1113
+ "eslint/no-undef-init": "#6456, `unicorn/no-useless-undefined` covers this case.",
1114
+ "import/no-unresolved": "Will always contain false positives due to module resolution complexity.",
1115
+ "promise/no-native": "Handled by `eslint/no-undef`.",
1116
+ "unicorn/no-for-loop": "This rule suggests using `Array.prototype.entries` which is slow https://github.com/oxc-project/oxc/issues/11311, furthermore, `typescript/prefer-for-of` covers most cases.",
1117
+ "eslint/no-negated-in-lhs": "Replaced by `eslint/no-unsafe-negation`, which we support.",
1118
+ "eslint/no-catch-shadow": "Replaced by `eslint/no-shadow`.",
1119
+ "eslint/id-blacklist": "Replaced by `eslint/id-denylist`.",
1120
+ "eslint/no-new-object": "Replaced by `eslint/no-object-constructor`, which we support.",
1121
+ "eslint/no-native-reassign": "Replaced by `eslint/no-global-assign`, which we support.",
1122
+ "n/shebang": "Replaced by `node/hashbang`.",
1123
+ "n/no-hide-core-modules": "This rule is deprecated in eslint-plugin-n for being inherently incorrect, no need for us to implement it.",
1124
+ "unicorn/no-array-push-push": "Replaced by `unicorn/prefer-single-call`.",
1125
+ "import/imports-first": "Replaced by `import/first`, which we support.",
1126
+ "eslint/dot-notation": "Use `typescript/dot-notation` instead, which we support as a type-aware rule.",
1127
+ "eslint/consistent-return": "Use `typescript/consistent-return` instead, which we support as a type-aware rule.",
1128
+ "eslint/no-useless-default-assignment": "Use `typescript/no-useless-default-assignment` instead, which will be supported as a type-aware rule.",
1129
+ "react/jsx-sort-default-props": "Replaced by `react/sort-default-props`.",
1130
+ "vitest/no-done-callback": "[Deprecated in eslint-plugin-vitest](https://github.com/vitest-dev/eslint-plugin-vitest/issues/158).",
1131
+ "eslint/no-return-await": "Deprecated, not recommended anymore by ESLint.",
1132
+ "eslint/prefer-reflect": "Deprecated, not recommended anymore by ESLint.",
1133
+ "jsx-a11y/accessible-emoji": "Deprecated.",
1134
+ "jsx-a11y/label-has-for": "Deprecated, replaced by `jsx-a11y/label-has-associated-control`.",
1135
+ "jsx-a11y/no-onchange": "Deprecated, based on behavior of very old browsers, and so no longer necessary.",
1136
+ "eslint/camelcase": "Superseded by `@typescript-eslint/naming-convention`, which accomplishes the same behavior with more flexibility.",
1137
+ "eslint/no-invalid-this": "Superseded by TypeScript's [`noImplicitThis`](https://www.typescriptlang.org/tsconfig/#noImplicitThis) compiler option (enabled by `strict` mode).",
1138
+ "react/jsx-uses-react": "It is unnecessary to import React for JSX/TSX files with React 17+ when using the new JSX transform. This rule is also not easy to implement in Oxlint as it modifies the behavior of another rule.",
1139
+ "import/no-internal-modules": "Not necessary to implement this rule as we already have `eslint/no-restricted-imports`, which is able to cover the same use-cases.",
1140
+ "n/prefer-node-protocol": "No need to implement, already implemented by `unicorn/prefer-node-protocol`.",
1141
+ "n/no-process-exit": "No need to implement, already implemented by `unicorn/no-process-exit`.",
1142
+ "n/file-extension-in-import": "No need to implement, already implemented by `import/extensions`.",
1143
+ "import/enforce-node-protocol-usage": "No need to implement, already implemented by `unicorn/prefer-node-protocol`.",
1144
+ "import/no-deprecated": "No need to implement, already implemented by `typescript/no-deprecated` via tsgolint.",
1145
+ "n/no-restricted-import": "No need to implement, already implemented by `no-restricted-imports` rule.",
1146
+ "n/no-restricted-require": "No need to implement, already implemented by `no-restricted-imports` rule.",
1147
+ "jsdoc/type-formatting": "Experimental rule in the original plugin, may reconsider once stable.",
1148
+ "jsdoc/convert-to-jsdoc-comments": "Experimental rule in the original plugin, may reconsider once stable.",
1149
+ "jsdoc/check-examples": "Deprecated.",
1150
+ "jest/no-unnecessary-assertion": "Requires type information. Not currently possible to implement in oxlint.",
1151
+ "jest/unbound-method": "Requires type information. Not currently possible to implement in oxlint.",
1152
+ "jest/no-error-equal": "Requires type information. Not currently possible to implement in oxlint.",
1153
+ "vitest/unbound-method": "Requires type information. Not currently possible to implement in oxlint.",
1154
+ "vitest/prefer-vi-mocked": "Requires type information. Not currently possible to implement in oxlint.",
1155
+ "eslint/no-process-env": "Deprecated, replaced by `node/no-process-env`, which we already support.",
1156
+ "eslint/no-new-require": "Deprecated, replaced by `node/no-new-require`, which we already support.",
1157
+ "eslint/no-buffer-constructor": "Replaced by `node/no-deprecated-api`.",
1158
+ "eslint/no-path-concat": "Deprecated, replaced by `node/no-path-concat`.",
1159
+ "eslint/no-sync": "Deprecated, replaced by `node/no-sync`.",
1160
+ "eslint/no-process-exit": "Deprecated, replaced by `node/no-process-exit`.",
1161
+ "eslint/no-restricted-modules": "Deprecated, replaced by `node/no-restricted-require`.",
1162
+ "eslint/no-mixed-requires": "Deprecated, replaced by `node/no-mixed-requires`.",
1163
+ "eslint/global-require": "Deprecated, replaced by `node/global-require`.",
1164
+ "eslint/handle-callback-err": "Deprecated, replaced by `node/handle-callback-err`.",
1165
+ "eslint/callback-return": "Deprecated, replaced by `node/callback-return`.",
1166
+ "react/jsx-equals-spacing": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1167
+ "react/jsx-curly-spacing": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1168
+ "react/jsx-indent": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1169
+ "react/jsx-indent-props": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1170
+ "react/jsx-newline": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1171
+ "react/jsx-wrap-multilines": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1172
+ "react/jsx-props-no-multi-spaces": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1173
+ "react/jsx-tag-spacing": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1174
+ "react/jsx-space-before-closing": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1175
+ "react/jsx-closing-tag-location": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1176
+ "react/jsx-closing-bracket-location": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1177
+ "react/jsx-first-prop-new-line": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1178
+ "react/jsx-max-props-per-line": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1179
+ "react/jsx-curly-newline": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1180
+ "react/jsx-child-element-spacing": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1181
+ "react/jsx-one-expression-per-line": "Stylistic rule from eslint-plugin-react. Should use Oxfmt for stylistic rules, or use JS Plugins to enable this rule.",
1182
+ "react/config": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1183
+ "react/error-boundaries": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1184
+ "react/component-hook-factories": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1185
+ "react/gating": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1186
+ "react/globals": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1187
+ "react/immutability": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1188
+ "react/preserve-manual-memoization": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1189
+ "react/purity": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1190
+ "react/refs": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1191
+ "react/set-state-in-effect": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1192
+ "react/set-state-in-render": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1193
+ "react/static-components": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1194
+ "react/unsupported-syntax": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1195
+ "react/use-memo": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1196
+ "react/incompatible-library": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1197
+ "react/automatic-effect-dependencies": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1198
+ "react/capitalized-calls": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1199
+ "react/fbt": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1200
+ "react/fire": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1201
+ "react/invariant": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1202
+ "react/hooks": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1203
+ "react/memoized-effect-dependencies": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1204
+ "react/no-deriving-state-in-effects": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1205
+ "react/rule-suppression": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1206
+ "react/syntax": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1207
+ "react/todo": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1208
+ "react/void-use-memo": "React Compiler rules will not be implemented in oxlint for now, as they require integration with the react compiler itself. These rules can be used via JS Plugins if desired.",
1209
+ "react/default-props-match-prop-types": "This rule only applies to legacy class components, which are not widely used in modern React. Also stylistic.",
1210
+ "react/forbid-foreign-prop-types": "PropTypes are ignored in React 19, and this rule is only relevant for very specific use-cases involving it.",
1211
+ "react/forbid-prop-types": "PropTypes are ignored in React 19, and this rule is only relevant if you use the PropTypes package.",
1212
+ "react/no-access-state-in-setstate": "This rule only applies to legacy class components, which are not widely used in modern React.",
1213
+ "react/no-unused-class-component-methods": "This rule only applies to legacy class components, which are not widely used in modern React. It is also complex to implement.",
1214
+ "react/no-unused-state": "This rule only applies to legacy class components, which are not widely used in modern React. It is also complex to implement.",
1215
+ "react/no-unused-prop-types": "PropTypes are ignored in React 19, and TypeScript + the `no-unused-vars` rule already catches unused props in most cases.",
1216
+ "react/prefer-exact-props": "This rule is not relevant for TypeScript code, and PropTypes are ignored in React 19.",
1217
+ "react/sort-comp": "This rule only applies to legacy class components, which are not widely used in modern React. Also stylistic.",
1218
+ "react/sort-default-props": "`defaultProps` is removed entirely in React 19, this rule is no longer relevant. Also stylistic.",
1219
+ "react/sort-prop-types": "PropTypes are ignored in React 19, and this rule is only relevant if you use the PropTypes package. Also stylistic.",
1220
+ "react/static-property-placement": "This rule only applies to legacy class components, which are not widely used in modern React.",
1221
+ "typescript/sort-type-constituents": "Deprecated, replaced by `perfectionist/sort-intersection-types` and `perfectionist/sort-union-types` rules.",
1222
+ "typescript/no-type-alias": "Deprecated, replaced by `typescript-eslint/consistent-type-definitions` rule.",
1223
+ "typescript/typedef": "Deprecated.",
1224
+ "typescript/no-invalid-this": "This rule is checked by the TypeScript compiler when the `noImplicitThis` compiler option is enabled. In TypeScript versions prior to 6.0, this compiler option is not enabled by default, however it is a best practice to enable it.",
1225
+ "eslint/array-bracket-newline": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1226
+ "eslint/array-bracket-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1227
+ "eslint/array-element-newline": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1228
+ "eslint/arrow-parens": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1229
+ "eslint/arrow-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1230
+ "eslint/block-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1231
+ "eslint/brace-style": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1232
+ "eslint/comma-dangle": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1233
+ "eslint/comma-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1234
+ "eslint/comma-style": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1235
+ "eslint/computed-property-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1236
+ "eslint/dot-location": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1237
+ "eslint/eol-last": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1238
+ "eslint/func-call-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1239
+ "eslint/function-call-argument-newline": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1240
+ "eslint/function-paren-newline": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1241
+ "eslint/generator-star-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1242
+ "eslint/implicit-arrow-linebreak": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1243
+ "eslint/indent-legacy": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1244
+ "eslint/indent": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1245
+ "eslint/jsx-quotes": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1246
+ "eslint/key-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1247
+ "eslint/keyword-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1248
+ "eslint/line-comment-position": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1249
+ "eslint/linebreak-style": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1250
+ "eslint/lines-around-comment": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1251
+ "eslint/lines-around-directive": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1252
+ "eslint/lines-between-class-members": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1253
+ "eslint/max-len": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1254
+ "eslint/max-statements-per-line": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1255
+ "eslint/multiline-comment-style": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1256
+ "eslint/multiline-ternary": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1257
+ "eslint/new-parens": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1258
+ "eslint/newline-after-var": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1259
+ "eslint/newline-before-return": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1260
+ "eslint/newline-per-chained-call": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1261
+ "eslint/no-confusing-arrow": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1262
+ "eslint/no-extra-parens": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1263
+ "eslint/no-extra-semi": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1264
+ "eslint/no-floating-decimal": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1265
+ "eslint/no-mixed-operators": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1266
+ "eslint/no-mixed-spaces-and-tabs": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1267
+ "eslint/no-multi-spaces": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1268
+ "eslint/no-multiple-empty-lines": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1269
+ "eslint/no-spaced-func": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1270
+ "eslint/no-tabs": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1271
+ "eslint/no-trailing-spaces": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1272
+ "eslint/no-whitespace-before-property": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1273
+ "eslint/nonblock-statement-body-position": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1274
+ "eslint/object-curly-newline": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1275
+ "eslint/object-curly-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1276
+ "eslint/object-property-newline": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1277
+ "eslint/one-var-declaration-per-line": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1278
+ "eslint/operator-linebreak": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1279
+ "eslint/padded-blocks": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1280
+ "eslint/padding-line-between-statements": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1281
+ "eslint/quote-props": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1282
+ "eslint/quotes": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1283
+ "eslint/rest-spread-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1284
+ "eslint/semi-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1285
+ "eslint/semi-style": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1286
+ "eslint/semi": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1287
+ "eslint/space-before-blocks": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1288
+ "eslint/space-before-function-paren": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1289
+ "eslint/space-in-parens": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1290
+ "eslint/space-infix-ops": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1291
+ "eslint/space-unary-ops": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1292
+ "eslint/spaced-comment": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1293
+ "eslint/switch-colon-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1294
+ "eslint/template-curly-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1295
+ "eslint/template-tag-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1296
+ "eslint/wrap-iife": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1297
+ "eslint/wrap-regex": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1298
+ "eslint/yield-star-spacing": "Deprecated stylistic rule, can be used via the stylistic eslint plugin as a JS Plugin if necessary.",
1299
+ "react/jsx-uses-vars": "Handled by `eslint/no-unused-vars`, which already evaluates whether vars are used in JSX.",
1300
+ "unicorn/no-named-default": "Implemented via `import/no-named-default`.",
1301
+ "vue/no-lone-template": "Not currently possible, as it requires Vue template parsing.",
1302
+ "vue/no-v-html": "Not currently possible, as it requires Vue template parsing.",
1303
+ "vue/this-in-template": "Not currently possible, as it requires Vue template parsing.",
1304
+ "vue/array-bracket-newline": "Stylistic rule.",
1305
+ "vue/array-bracket-spacing": "Stylistic rule.",
1306
+ "vue/array-element-newline": "Stylistic rule.",
1307
+ "vue/arrow-spacing": "Stylistic rule.",
1308
+ "vue/attribute-hyphenation": "Not currently possible, as it requires Vue template parsing.",
1309
+ "vue/attributes-order": "Not currently possible, as it requires Vue template parsing.",
1310
+ "vue/block-lang": "Not currently possible, as it requires Vue template parsing.",
1311
+ "vue/block-order": "Not currently possible, as it requires Vue template parsing.",
1312
+ "vue/block-spacing": "Stylistic rule.",
1313
+ "vue/block-tag-newline": "Stylistic rule.",
1314
+ "vue/brace-style": "Stylistic rule.",
1315
+ "vue/camelcase": "Not currently possible, as it requires Vue template parsing.",
1316
+ "vue/comma-dangle": "Stylistic rule.",
1317
+ "vue/comma-spacing": "Stylistic rule.",
1318
+ "vue/comma-style": "Stylistic rule.",
1319
+ "vue/comment-directive": "Not currently possible, as it requires Vue template parsing. Also possibly unnecessary as its own rule, as oxlint directives should be implemented at the same time as Vue template parsing.",
1320
+ "vue/component-name-in-template-casing": "Not currently possible, as it requires Vue template parsing.",
1321
+ "vue/custom-event-name-casing": "Not currently possible, as it requires Vue template parsing.",
1322
+ "vue/define-macros-order": "Stylistic rule.",
1323
+ "vue/dot-location": "Not currently possible, as it requires Vue template parsing.",
1324
+ "vue/dot-notation": "Not currently possible, as it requires Vue template parsing.",
1325
+ "vue/enforce-style-attribute": "Not currently possible, as it requires Vue template parsing.",
1326
+ "vue/eqeqeq": "Not currently possible, as it requires Vue template parsing.",
1327
+ "vue/first-attribute-linebreak": "Stylistic rule.",
1328
+ "vue/func-call-spacing": "Stylistic rule.",
1329
+ "vue/html-button-has-type": "Not currently possible, as it requires Vue template parsing.",
1330
+ "vue/html-closing-bracket-newline": "Stylistic rule.",
1331
+ "vue/html-closing-bracket-spacing": "Stylistic rule.",
1332
+ "vue/html-comment-content-newline": "Stylistic rule.",
1333
+ "vue/html-comment-content-spacing": "Stylistic rule.",
1334
+ "vue/html-comment-indent": "Stylistic rule.",
1335
+ "vue/html-end-tags": "Not currently possible, as it requires Vue template parsing.",
1336
+ "vue/html-indent": "Stylistic rule.",
1337
+ "vue/html-quotes": "Stylistic rule.",
1338
+ "vue/html-self-closing": "Not currently possible, as it requires Vue template parsing.",
1339
+ "vue/key-spacing": "Stylistic rule.",
1340
+ "vue/keyword-spacing": "Stylistic rule.",
1341
+ "vue/max-attributes-per-line": "Stylistic rule.",
1342
+ "vue/max-len": "Not currently possible, as it requires Vue template parsing.",
1343
+ "vue/max-lines-per-block": "Not currently possible, as it requires Vue template parsing.",
1344
+ "vue/max-template-depth": "Not currently possible, as it requires Vue template parsing.",
1345
+ "vue/multiline-html-element-content-newline": "Not currently possible, as it requires Vue template parsing.",
1346
+ "vue/multiline-ternary": "Stylistic rule. Also not currently possible, as it requires Vue template parsing.",
1347
+ "vue/mustache-interpolation-spacing": "Stylistic rule.",
1348
+ "vue/new-line-between-multi-line-property": "Stylistic rule.",
1349
+ "vue/no-bare-strings-in-template": "Not currently possible, as it requires Vue template parsing.",
1350
+ "vue/no-child-content": "Not currently possible, as it requires Vue template parsing.",
1351
+ "vue/no-console": "Not currently possible, as it requires Vue template parsing.",
1352
+ "vue/no-constant-condition": "Not currently possible, as it requires Vue template parsing.",
1353
+ "vue/no-custom-modifiers-on-v-model": "Not currently possible, as it requires Vue template parsing.",
1354
+ "vue/no-deprecated-filter": "Not currently possible, as it requires Vue template parsing.",
1355
+ "vue/no-deprecated-functional-template": "Not currently possible, as it requires Vue template parsing.",
1356
+ "vue/no-deprecated-html-element-is": "Not currently possible, as it requires Vue template parsing.",
1357
+ "vue/no-deprecated-inline-template": "Not currently possible, as it requires Vue template parsing.",
1358
+ "vue/no-deprecated-router-link-tag-prop": "Not currently possible, as it requires Vue template parsing.",
1359
+ "vue/no-deprecated-scope-attribute": "Not currently possible, as it requires Vue template parsing.",
1360
+ "vue/no-deprecated-slot-attribute": "Not currently possible, as it requires Vue template parsing.",
1361
+ "vue/no-deprecated-slot-scope-attribute": "Not currently possible, as it requires Vue template parsing.",
1362
+ "vue/no-deprecated-v-bind-sync": "Not currently possible, as it requires Vue template parsing.",
1363
+ "vue/no-deprecated-v-is": "Not currently possible, as it requires Vue template parsing.",
1364
+ "vue/no-deprecated-v-on-native-modifier": "Not currently possible, as it requires Vue template parsing.",
1365
+ "vue/no-deprecated-v-on-number-modifiers": "Not currently possible, as it requires Vue template parsing.",
1366
+ "vue/no-dupe-v-else-if": "Not currently possible, as it requires Vue template parsing.",
1367
+ "vue/no-duplicate-attr-inheritance": "Not currently possible, as it requires Vue template parsing.",
1368
+ "vue/no-duplicate-attributes": "Not currently possible, as it requires Vue template parsing.",
1369
+ "vue/no-duplicate-class-names": "Not currently possible, as it requires Vue template parsing.",
1370
+ "vue/no-empty-component-block": "Not currently possible, as it requires Vue template and style parsing.",
1371
+ "vue/no-empty-pattern": "Not currently possible, as it requires Vue template parsing.",
1372
+ "vue/no-extra-parens": "Stylistic rule, and requires template parsing.",
1373
+ "vue/no-implicit-coercion": "Not currently possible, as it requires Vue template parsing.",
1374
+ "vue/no-literals-in-template": "Not currently possible, as it requires Vue template parsing.",
1375
+ "vue/no-loss-of-precision": "Not currently possible, as it requires Vue template parsing.",
1376
+ "vue/no-multi-spaces": "Stylistic rule.",
1377
+ "vue/no-multiple-objects-in-class": "Not currently possible, as it requires Vue template parsing.",
1378
+ "vue/no-multiple-template-root": "Not currently possible, as it requires Vue template parsing.",
1379
+ "vue/no-negated-condition": "Not currently possible, as it requires Vue template parsing.",
1380
+ "vue/no-negated-v-if-condition": "Not currently possible, as it requires Vue template parsing.",
1381
+ "vue/no-parsing-error": "Not currently possible, as it requires Vue template parsing.",
1382
+ "vue/no-restricted-block": "Not currently possible, as it requires Vue template parsing.",
1383
+ "vue/no-restricted-class": "Not currently possible, as it requires Vue template parsing.",
1384
+ "vue/no-restricted-html-elements": "Not currently possible, as it requires Vue template parsing.",
1385
+ "vue/no-restricted-static-attribute": "Not currently possible, as it requires Vue template parsing.",
1386
+ "vue/no-restricted-syntax": "Not currently possible, as it requires Vue template parsing.",
1387
+ "vue/no-restricted-v-bind": "Not currently possible, as it requires Vue template parsing.",
1388
+ "vue/no-restricted-v-on": "Not currently possible, as it requires Vue template parsing.",
1389
+ "vue/no-root-v-if": "Not currently possible, as it requires Vue template parsing.",
1390
+ "vue/no-spaces-around-equal-signs-in-attribute": "Stylistic rule.",
1391
+ "vue/no-sparse-arrays": "Not currently possible, as it requires Vue template parsing.",
1392
+ "vue/no-static-inline-styles": "Not currently possible, as it requires Vue template parsing.",
1393
+ "vue/no-template-key": "Not currently possible, as it requires Vue template parsing.",
1394
+ "vue/no-template-shadow": "Not currently possible, as it requires Vue template parsing.",
1395
+ "vue/no-template-target-blank": "Not currently possible, as it requires Vue template parsing.",
1396
+ "vue/no-textarea-mustache": "Not currently possible, as it requires Vue template parsing.",
1397
+ "vue/no-undef-components": "Not currently possible, as it requires Vue template parsing.",
1398
+ "vue/no-undef-directives": "Not currently possible, as it requires Vue template parsing.",
1399
+ "vue/no-undef-properties": "Not currently possible, as it requires Vue template parsing.",
1400
+ "vue/no-unsupported-features": "Cannot be kept up-to-date with Vue versions + requires template parsing.",
1401
+ "vue/no-unused-components": "Not currently possible, as it requires Vue template parsing.",
1402
+ "vue/no-unused-properties": "Not currently possible, as it requires Vue template parsing.",
1403
+ "vue/no-unused-refs": "Not currently possible, as it requires Vue template parsing.",
1404
+ "vue/no-unused-vars": "Not currently possible, as it requires Vue template parsing. May also prefer to cover this via the core no-unused-vars rule.",
1405
+ "vue/no-use-v-else-with-v-for": "Not currently possible, as it requires Vue template parsing.",
1406
+ "vue/no-use-v-if-with-v-for": "Not currently possible, as it requires Vue template parsing.",
1407
+ "vue/no-useless-concat": "Not currently possible, as it requires Vue template parsing.",
1408
+ "vue/no-useless-mustaches": "Not currently possible, as it requires Vue template parsing.",
1409
+ "vue/no-useless-template-attributes": "Not currently possible, as it requires Vue template parsing.",
1410
+ "vue/no-useless-v-bind": "Not currently possible, as it requires Vue template parsing.",
1411
+ "vue/no-v-text-v-html-on-component": "Not currently possible, as it requires Vue template parsing.",
1412
+ "vue/no-v-text": "Not currently possible, as it requires Vue template parsing.",
1413
+ "vue/no-v-for-template-key": "Not currently possible, as it requires Vue template parsing.",
1414
+ "vue/object-curly-newline": "Stylistic rule.",
1415
+ "vue/object-curly-spacing": "Stylistic rule.",
1416
+ "vue/object-property-newline": "Stylistic rule.",
1417
+ "vue/object-shorthand": "Not currently possible, as it requires Vue template parsing.",
1418
+ "vue/operator-linebreak": "Stylistic rule.",
1419
+ "vue/padding-line-between-blocks": "Stylistic rule.",
1420
+ "vue/padding-line-between-tags": "Stylistic rule.",
1421
+ "vue/padding-lines-in-component-definition": "Stylistic rule.",
1422
+ "vue/prefer-separate-static-class": "Not currently possible, as it requires Vue template parsing.",
1423
+ "vue/prefer-template": "Not currently possible, as it requires Vue template parsing.",
1424
+ "vue/prefer-true-attribute-shorthand": "Not currently possible, as it requires Vue template parsing.",
1425
+ "vue/quote-props": "Stylistic rule.",
1426
+ "vue/require-component-is": "Not currently possible, as it requires Vue template parsing.",
1427
+ "vue/require-explicit-emits": "Not currently possible, as it requires Vue template parsing.",
1428
+ "vue/require-explicit-slots": "Not currently possible, as it requires Vue template parsing.",
1429
+ "vue/require-toggle-inside-transition": "Not currently possible, as it requires Vue template parsing.",
1430
+ "vue/require-v-for-key": "Not currently possible, as it requires Vue template parsing.",
1431
+ "vue/restricted-component-names": "Not currently possible, as it requires Vue template parsing.",
1432
+ "vue/singleline-html-element-content-newline": "Not currently possible, as it requires Vue template parsing.",
1433
+ "vue/slot-name-casing": "Not currently possible, as it requires Vue template parsing.",
1434
+ "vue/space-in-parens": "Stylistic rule.",
1435
+ "vue/space-infix-ops": "Stylistic rule.",
1436
+ "vue/space-unary-ops": "Stylistic rule.",
1437
+ "vue/static-class-names-order": "Not currently possible, as it requires Vue template parsing.",
1438
+ "vue/template-curly-spacing": "Stylistic rule.",
1439
+ "vue/use-v-on-exact": "Not currently possible, as it requires Vue template parsing.",
1440
+ "vue/v-bind-style": "Not currently possible, as it requires Vue template parsing.",
1441
+ "vue/v-for-delimiter-style": "Not currently possible, as it requires Vue template parsing.",
1442
+ "vue/v-if-else-key": "Not currently possible, as it requires Vue template parsing.",
1443
+ "vue/v-on-event-hyphenation": "Not currently possible, as it requires Vue template parsing.",
1444
+ "vue/v-on-handler-style": "Not currently possible, as it requires Vue template parsing.",
1445
+ "vue/v-on-style": "Not currently possible, as it requires Vue template parsing.",
1446
+ "vue/v-slot-style": "Not currently possible, as it requires Vue template parsing.",
1447
+ "vue/valid-attribute-name": "Not currently possible, as it requires Vue template parsing.",
1448
+ "vue/valid-template-root": "Not currently possible, as it requires Vue template parsing.",
1449
+ "vue/valid-v-bind": "Not currently possible, as it requires Vue template parsing.",
1450
+ "vue/valid-v-cloak": "Not currently possible, as it requires Vue template parsing.",
1451
+ "vue/valid-v-else-if": "Not currently possible, as it requires Vue template parsing.",
1452
+ "vue/valid-v-else": "Not currently possible, as it requires Vue template parsing.",
1453
+ "vue/valid-v-for": "Not currently possible, as it requires Vue template parsing.",
1454
+ "vue/valid-v-html": "Not currently possible, as it requires Vue template parsing.",
1455
+ "vue/valid-v-if": "Not currently possible, as it requires Vue template parsing.",
1456
+ "vue/valid-v-is": "Not currently possible, as it requires Vue template parsing.",
1457
+ "vue/valid-v-memo": "Not currently possible, as it requires Vue template parsing.",
1458
+ "vue/valid-v-model": "Not currently possible, as it requires Vue template parsing.",
1459
+ "vue/valid-v-on": "Not currently possible, as it requires Vue template parsing.",
1460
+ "vue/valid-v-once": "Not currently possible, as it requires Vue template parsing.",
1461
+ "vue/valid-v-pre": "Not currently possible, as it requires Vue template parsing.",
1462
+ "vue/valid-v-show": "Not currently possible, as it requires Vue template parsing.",
1463
+ "vue/valid-v-slot": "Not currently possible, as it requires Vue template parsing.",
1464
+ "vue/valid-v-text": "Not currently possible, as it requires Vue template parsing.",
1465
+ "vue/no-v-for-template-key-on-child": "Deprecated.",
1466
+ "vue/no-v-model-argument": "Deprecated.",
1467
+ "vue/valid-v-bind-sync": "Deprecated.",
1468
+ "vue/valid-model-definition": "Deprecated."
1469
+ };
1470
+
1471
+ //#endregion
1472
+ //#region src/utilities.ts
1473
+ const isEqualDeep = (a, b) => {
1474
+ if (a === b) return true;
1475
+ const bothAreObjects = a && b && typeof a === "object" && typeof b === "object";
1476
+ return Boolean(bothAreObjects && Object.keys(a).length === Object.keys(b).length && Object.entries(a).every(([k, v]) => isEqualDeep(v, b[k])));
1477
+ };
1478
+ /**
1479
+ * Builds a lookup map of unsupported rule explanations.
1480
+ * Converts oxc-style rule keys (e.g. "eslint/no-dupe-args", "react/immutability")
1481
+ * to all matching ESLint-style keys, using rulesPrefixesForPlugins for aliases
1482
+ * (e.g. react → react-hooks/react-refresh, import → import-x, node → n).
1483
+ */
1484
+ function buildUnsupportedRuleExplanations() {
1485
+ const explanations = {};
1486
+ for (const [key, value] of Object.entries(unsupportedRules)) {
1487
+ const slashIdx = key.indexOf("/");
1488
+ const oxlintPlugin = key.slice(0, slashIdx);
1489
+ const ruleName = key.slice(slashIdx + 1);
1490
+ if (oxlintPlugin === "eslint") {
1491
+ explanations[ruleName] = value;
1492
+ continue;
1493
+ }
1494
+ for (const [eslintPrefix, plugin] of Object.entries(rulesPrefixesForPlugins)) if (plugin === oxlintPlugin) explanations[`${eslintPrefix}/${ruleName}`] = value;
1495
+ }
1496
+ return explanations;
1497
+ }
1498
+
1064
1499
  //#endregion
1065
1500
  //#region src/plugins_rules.ts
1066
1501
  const allRules = Object.values(rules_exports).flat();
1502
+ const unsupportedRuleExplanations = buildUnsupportedRuleExplanations();
1067
1503
  /**
1068
1504
  * checks if value is validSet, or if validSet is an array, check if value is first value of it
1069
1505
  */
@@ -1103,6 +1539,11 @@ const normalizeSeverityValue = (value) => {
1103
1539
  return "off";
1104
1540
  }
1105
1541
  };
1542
+ const removePreviousOverrideRule = (rule, eslintConfig, overrides) => {
1543
+ if (eslintConfig.files === void 0 && overrides) {
1544
+ for (const override of overrides) if (override.rules?.[rule]) delete override.rules[rule];
1545
+ }
1546
+ };
1106
1547
  /**
1107
1548
  * Merges a new rule configuration with an existing one, preserving options when
1108
1549
  * the new config only specifies a severity level.
@@ -1128,11 +1569,12 @@ const mergeRuleConfig = (existingConfig, newConfig) => {
1128
1569
  if (Array.isArray(newConfig) && newConfig.length === 1 && existingIsArray && existingConfig.length > 1) return [newConfig[0], ...existingConfig.slice(1)];
1129
1570
  return newConfig;
1130
1571
  };
1131
- const transformRuleEntry = (eslintConfig, targetConfig, baseConfig, options) => {
1572
+ const transformRuleEntry = (eslintConfig, targetConfig, baseConfig, options, overrides) => {
1132
1573
  if (eslintConfig.rules === void 0) return;
1133
1574
  if (targetConfig.rules === void 0) targetConfig.rules = {};
1134
1575
  for (const [rule, config] of Object.entries(eslintConfig.rules)) {
1135
1576
  const normalizedConfig = normalizeSeverityValue(config);
1577
+ if (!options?.merge) removePreviousOverrideRule(rule, eslintConfig, overrides);
1136
1578
  if (allRules.includes(rule)) {
1137
1579
  if (!options?.withNursery && nurseryRules.includes(rule)) {
1138
1580
  options?.reporter?.markSkipped(rule, "nursery");
@@ -1155,23 +1597,31 @@ const transformRuleEntry = (eslintConfig, targetConfig, baseConfig, options) =>
1155
1597
  else if (!isIgnoredPluginRule(rule)) targetConfig.rules[rule] = normalizedConfig;
1156
1598
  if (eslintConfig.files === void 0) {
1157
1599
  options?.reporter?.removeSkipped(rule, "js-plugins");
1600
+ options?.reporter?.removeSkipped(rule, "not-implemented");
1158
1601
  options?.reporter?.removeSkipped(rule, "unsupported");
1159
1602
  }
1160
1603
  continue;
1161
1604
  }
1162
- if (!enableJsPluginRule(targetConfig, rule, normalizedConfig)) options?.reporter?.markSkipped(rule, "unsupported");
1605
+ if (!enableJsPluginRule(targetConfig, rule, normalizedConfig)) {
1606
+ const category = unsupportedRuleExplanations[rule] ? "unsupported" : "not-implemented";
1607
+ options?.reporter?.markSkipped(rule, category);
1608
+ }
1163
1609
  continue;
1164
1610
  }
1165
1611
  if (!isActiveValue(normalizedConfig)) {
1166
1612
  if (isOffValue(normalizedConfig)) delete targetConfig.rules[rule];
1167
- if (eslintConfig.files === void 0) options?.reporter?.removeSkipped(rule, "unsupported");
1613
+ if (eslintConfig.files === void 0) {
1614
+ options?.reporter?.removeSkipped(rule, "not-implemented");
1615
+ options?.reporter?.removeSkipped(rule, "unsupported");
1616
+ }
1168
1617
  continue;
1169
1618
  }
1170
1619
  if (!options?.jsPlugins && !isIgnoredPluginRule(rule)) {
1171
1620
  options?.reporter?.markSkipped(rule, "js-plugins");
1172
1621
  continue;
1173
1622
  }
1174
- options?.reporter?.markSkipped(rule, "unsupported");
1623
+ const category = unsupportedRuleExplanations[rule] ? "unsupported" : "not-implemented";
1624
+ options?.reporter?.markSkipped(rule, category);
1175
1625
  }
1176
1626
  }
1177
1627
  };
@@ -1193,32 +1643,55 @@ const cleanUpUselessOverridesPlugins = (config) => {
1193
1643
  }
1194
1644
  };
1195
1645
  const cleanUpUselessOverridesRules = (config) => {
1196
- if (config.rules === void 0 || config.overrides === void 0) return;
1197
- const filesPatternMap = /* @__PURE__ */ new Map();
1198
- for (const [i, override] of config.overrides.entries()) {
1199
- if (override.files === void 0) continue;
1200
- const filesKey = JSON.stringify(override.files);
1201
- let entry = filesPatternMap.get(filesKey);
1202
- if (!entry) {
1203
- entry = {
1204
- firstIndex: i,
1205
- finalRules: {},
1206
- indicesToRemove: []
1207
- };
1208
- filesPatternMap.set(filesKey, entry);
1209
- } else entry.indicesToRemove.push(i);
1210
- if (override.rules) Object.assign(entry.finalRules, override.rules);
1211
- }
1212
- for (const entry of filesPatternMap.values()) {
1213
- const firstOverride = config.overrides[entry.firstIndex];
1214
- firstOverride.rules = entry.finalRules;
1215
- if (firstOverride.rules) {
1216
- for (const [rule, settings] of Object.entries(firstOverride.rules)) if (config.rules[rule] === settings) delete firstOverride.rules[rule];
1217
- if (Object.keys(firstOverride.rules).length === 0) delete firstOverride.rules;
1646
+ if (config.overrides === void 0) return;
1647
+ for (let i = 0; i < config.overrides.length; i++) {
1648
+ const current = config.overrides[i];
1649
+ if (i > 0) {
1650
+ const previous = config.overrides[i - 1];
1651
+ if (isEqualDeep(previous.files, current.files)) {
1652
+ mergeOverrideProperties(previous, current);
1653
+ config.overrides.splice(i, 1);
1654
+ i -= 2;
1655
+ continue;
1656
+ }
1218
1657
  }
1219
- for (const indexToRemove of entry.indicesToRemove) delete config.overrides[indexToRemove].rules;
1658
+ removeRootMatchingRules(config, i);
1220
1659
  }
1221
1660
  };
1661
+ /** Merge all properties from `source` into `target` (same-files overrides). */
1662
+ const mergeOverrideProperties = (target, source) => {
1663
+ if (source.rules) target.rules = {
1664
+ ...target.rules,
1665
+ ...source.rules
1666
+ };
1667
+ if (source.plugins) target.plugins = [...new Set([...target.plugins ?? [], ...source.plugins])];
1668
+ if (source.jsPlugins) target.jsPlugins = [...new Set([...target.jsPlugins ?? [], ...source.jsPlugins])];
1669
+ if (source.env) target.env = {
1670
+ ...target.env,
1671
+ ...source.env
1672
+ };
1673
+ if (source.globals) target.globals = {
1674
+ ...target.globals,
1675
+ ...source.globals
1676
+ };
1677
+ if (source.categories) target.categories = {
1678
+ ...target.categories,
1679
+ ...source.categories
1680
+ };
1681
+ };
1682
+ /**
1683
+ * Remove rules from `config.overrides[overrideIndex]` that match root config,
1684
+ * unless a previous override also has the rule (meaning it overrides root with
1685
+ * a different value — same-as-root rules are removed earlier in the loop).
1686
+ */
1687
+ const removeRootMatchingRules = (config, overrideIndex) => {
1688
+ const override = config.overrides[overrideIndex];
1689
+ if (!override.rules || !config.rules) return;
1690
+ for (const [rule, settings] of Object.entries(override.rules)) if (config.rules[rule] === settings) {
1691
+ if (!config.overrides.slice(0, overrideIndex).some((prev) => prev.rules?.[rule] !== void 0)) delete override.rules[rule];
1692
+ }
1693
+ if (Object.keys(override.rules).length === 0) delete override.rules;
1694
+ };
1222
1695
  const cleanUpRulesWhichAreCoveredByCategory = (config) => {
1223
1696
  if (config.rules === void 0 || config.categories === void 0) return;
1224
1697
  const enabledCategories = Object.entries(config.categories).filter(([, severity]) => severity === "warn" || severity === "error").map(([category]) => category);
@@ -1278,14 +1751,6 @@ const replaceReactRefreshPluginName = (config) => {
1278
1751
  }
1279
1752
  };
1280
1753
 
1281
- //#endregion
1282
- //#region src/utilities.ts
1283
- const isEqualDeep = (a, b) => {
1284
- if (a === b) return true;
1285
- const bothAreObjects = a && b && typeof a === "object" && typeof b === "object";
1286
- return Boolean(bothAreObjects && Object.keys(a).length === Object.keys(b).length && Object.entries(a).every(([k, v]) => isEqualDeep(v, b[k])));
1287
- };
1288
-
1289
1754
  //#endregion
1290
1755
  //#region src/cleanup.ts
1291
1756
  const TS_ESLINT_DEFAULT_OVERRIDE = {
@@ -1328,7 +1793,6 @@ const cleanUpUselessOverridesEntries = (config) => {
1328
1793
  if (config.overrides === void 0) return;
1329
1794
  for (const [overrideIndex, override] of config.overrides.entries()) if (Object.keys(override).length === 1) delete config.overrides[overrideIndex];
1330
1795
  config.overrides = config.overrides.filter((overrides) => Object.keys(overrides).length > 0);
1331
- mergeConsecutiveIdenticalOverrides(config);
1332
1796
  mergeConsecutiveOverridesWithDifferingFiles(config);
1333
1797
  if (config.overrides.length === 0) delete config.overrides;
1334
1798
  };
@@ -1354,51 +1818,6 @@ const cleanUpOxlintConfig = (config) => {
1354
1818
  }
1355
1819
  };
1356
1820
  /**
1357
- * Merges consecutive identical overrides in the config's overrides array
1358
- * Merges only if the overrides are directly next to each other
1359
- * (otherwise they could be overriden in between one another).
1360
- *
1361
- * Example:
1362
- *
1363
- * ```json
1364
- * overrides: [
1365
- * {
1366
- * "files": [
1367
- * "*.ts",
1368
- * "*.tsx",
1369
- * ],
1370
- * "plugins": [
1371
- * "typescript",
1372
- * ],
1373
- * },
1374
- * {
1375
- * "files": [
1376
- * "*.ts",
1377
- * "*.tsx",
1378
- * ],
1379
- * "plugins": [
1380
- * "typescript",
1381
- * ],
1382
- * },
1383
- * ]
1384
- * ```
1385
- */
1386
- function mergeConsecutiveIdenticalOverrides(config) {
1387
- if (config.overrides === void 0) return;
1388
- if (config.overrides.length <= 1) return;
1389
- const mergedOverrides = [];
1390
- let i = 0;
1391
- while (i < config.overrides.length) {
1392
- const current = config.overrides[i];
1393
- if (i + 1 < config.overrides.length && isEqualDeep(current, config.overrides[i + 1])) {
1394
- mergedOverrides.push(current);
1395
- while (i + 1 < config.overrides.length && isEqualDeep(current, config.overrides[i + 1])) i++;
1396
- } else mergedOverrides.push(current);
1397
- i++;
1398
- }
1399
- config.overrides = mergedOverrides;
1400
- }
1401
- /**
1402
1821
  * Merge consecutive overrides that have differing files but everything else is identical.
1403
1822
  *
1404
1823
  * ```json
@@ -1530,8 +1949,15 @@ const preFixForJsPlugins = () => {
1530
1949
  function processConfigFiles(files, reporter) {
1531
1950
  const filesArray = Array.isArray(files) ? files : [files];
1532
1951
  const simpleFiles = [];
1533
- for (const file of filesArray) if (Array.isArray(file)) reporter?.addWarning(`ESLint AND glob patterns (nested arrays in files) are not supported in oxlint: ${JSON.stringify(file)}`);
1534
- else simpleFiles.push(file);
1952
+ for (const file of filesArray) if (Array.isArray(file)) {
1953
+ const filesSet = new Set(file);
1954
+ if (filesSet.size === 0) continue;
1955
+ if (filesSet.size > 1) {
1956
+ reporter?.addWarning(`ESLint AND glob patterns (nested arrays in files) are not supported in oxlint: ${JSON.stringify(file)}`);
1957
+ continue;
1958
+ }
1959
+ simpleFiles.push(file[0]);
1960
+ } else simpleFiles.push(file);
1535
1961
  return simpleFiles;
1536
1962
  }
1537
1963
 
@@ -1637,4 +2063,4 @@ const warnSettingsInOverride = (eslintConfig, options) => {
1637
2063
  };
1638
2064
 
1639
2065
  //#endregion
1640
- export { preFixForJsPlugins as a, cleanUpOxlintConfig as c, transformRuleEntry as d, nurseryRules as f, transformEnvAndGlobals as h, fixForJsPlugins as i, detectNeededRulesPlugins as l, detectEnvironmentByGlobals as m, warnSettingsInOverride as n, detectSameOverride as o, rules_exports as p, processConfigFiles as r, transformIgnorePatterns as s, transformSettings as t, isOffValue as u };
2066
+ export { preFixForJsPlugins as a, cleanUpOxlintConfig as c, transformRuleEntry as d, buildUnsupportedRuleExplanations as f, transformEnvAndGlobals as g, detectEnvironmentByGlobals as h, fixForJsPlugins as i, detectNeededRulesPlugins as l, rules_exports as m, warnSettingsInOverride as n, detectSameOverride as o, nurseryRules as p, processConfigFiles as r, transformIgnorePatterns as s, transformSettings as t, isOffValue as u };
@@ -2694,7 +2694,7 @@ type OxlintConfig = {
2694
2694
  ignorePatterns?: OxlintConfigIgnorePatterns;
2695
2695
  settings?: OxlintSettings;
2696
2696
  };
2697
- type RuleSkippedCategory = 'nursery' | 'type-aware' | 'unsupported' | 'js-plugins';
2697
+ type RuleSkippedCategory = 'nursery' | 'type-aware' | 'not-implemented' | 'unsupported' | 'js-plugins';
2698
2698
  type SkippedCategoryGroup = Record<RuleSkippedCategory, string[]>;
2699
2699
  type Reporter = {
2700
2700
  addWarning(message: string): void;
@@ -1,4 +1,4 @@
1
- import { c as cleanUpOxlintConfig, d as transformRuleEntry, h as transformEnvAndGlobals, i as fixForJsPlugins, l as detectNeededRulesPlugins, m as detectEnvironmentByGlobals, n as warnSettingsInOverride, o as detectSameOverride, r as processConfigFiles, s as transformIgnorePatterns, t as transformSettings } from "../settings-C8UlaScv.mjs";
1
+ import { c as cleanUpOxlintConfig, d as transformRuleEntry, g as transformEnvAndGlobals, h as detectEnvironmentByGlobals, i as fixForJsPlugins, l as detectNeededRulesPlugins, n as warnSettingsInOverride, o as detectSameOverride, r as processConfigFiles, s as transformIgnorePatterns, t as transformSettings } from "../settings-Bb6227Gq.mjs";
2
2
 
3
3
  //#region src/index.ts
4
4
  const buildConfig = (configs, oxlintConfig, options) => {
@@ -34,7 +34,7 @@ const buildConfig = (configs, oxlintConfig, options) => {
34
34
  if (push) overrides.push(result);
35
35
  }
36
36
  transformIgnorePatterns(config, targetConfig, options);
37
- transformRuleEntry(config, targetConfig, config.files !== void 0 ? oxlintConfig : void 0, options);
37
+ transformRuleEntry(config, targetConfig, config.files !== void 0 ? oxlintConfig : void 0, options, config.files === void 0 ? overrides : void 0);
38
38
  transformEnvAndGlobals(config, targetConfig, options);
39
39
  if (config.files === void 0) transformSettings(config, oxlintConfig, options);
40
40
  else warnSettingsInOverride(config, options);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxlint/migrate",
3
- "version": "1.46.0",
3
+ "version": "1.49.0",
4
4
  "description": "Generates a `.oxlintrc.json` from a existing eslint flat config",
5
5
  "keywords": [
6
6
  "eslint",
@@ -28,7 +28,10 @@
28
28
  },
29
29
  "scripts": {
30
30
  "prepare": "husky",
31
- "generate": "node --import @oxc-node/core/register ./scripts/generate-vitest-rules.ts && node --import @oxc-node/core/register ./scripts/generate.ts && pnpm format",
31
+ "generate": "node --import @oxc-node/core/register ./scripts/generate.ts",
32
+ "generate:vitest": "node --import @oxc-node/core/register ./scripts/generate-vitest-rules.ts",
33
+ "generate:unsupported": "node --import @oxc-node/core/register ./scripts/fetch-unsupported-rules.ts",
34
+ "generate:all": "pnpm generate:vitest && pnpm generate && pnpm generate:unsupported && pnpm format",
32
35
  "format": "oxfmt",
33
36
  "lint": "oxlint --type-aware --type-check",
34
37
  "test": "vitest",
@@ -38,7 +41,7 @@
38
41
  "dependencies": {
39
42
  "commander": "^14.0.0",
40
43
  "globals": "^17.0.0",
41
- "oxc-parser": "^0.112.0",
44
+ "oxc-parser": "^0.114.0",
42
45
  "tinyglobby": "^0.2.14"
43
46
  },
44
47
  "devDependencies": {
@@ -75,9 +78,9 @@
75
78
  "husky": "^9.1.7",
76
79
  "lint-staged": "^16.1.2",
77
80
  "next": "^16.0.0",
78
- "oxfmt": "^0.28.0",
79
- "oxlint": "^1.46.0",
80
- "oxlint-tsgolint": "^0.11.3",
81
+ "oxfmt": "^0.33.0",
82
+ "oxlint": "^1.49.0",
83
+ "oxlint-tsgolint": "^0.14.0",
81
84
  "tsdown": "^0.20.0",
82
85
  "typescript-eslint": "^8.35.0",
83
86
  "vitest": "^4.0.0"
@@ -85,5 +88,5 @@
85
88
  "lint-staged": {
86
89
  "*": "oxfmt --no-error-on-unmatched-pattern"
87
90
  },
88
- "packageManager": "pnpm@10.28.2"
91
+ "packageManager": "pnpm@10.29.3"
89
92
  }