oxlint-plugin-react-doctor 0.2.0-beta.5 → 0.2.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.
package/dist/index.js CHANGED
@@ -1162,42 +1162,6 @@ const HEAVY_HEADING_TAILWIND_WEIGHTS = new Set([
1162
1162
  "font-extrabold",
1163
1163
  "font-black"
1164
1164
  ]);
1165
- const TAILWIND_DEFAULT_PALETTE_NAMES = [
1166
- "indigo",
1167
- "gray",
1168
- "slate"
1169
- ];
1170
- const TAILWIND_DEFAULT_PALETTE_STOPS = [
1171
- "50",
1172
- "100",
1173
- "200",
1174
- "300",
1175
- "400",
1176
- "500",
1177
- "600",
1178
- "700",
1179
- "800",
1180
- "900",
1181
- "950"
1182
- ];
1183
- const TAILWIND_PALETTE_UTILITY_PREFIXES = [
1184
- "text",
1185
- "bg",
1186
- "border",
1187
- "ring",
1188
- "fill",
1189
- "stroke",
1190
- "from",
1191
- "to",
1192
- "via",
1193
- "decoration",
1194
- "divide",
1195
- "outline",
1196
- "placeholder",
1197
- "caret",
1198
- "accent",
1199
- "shadow"
1200
- ];
1201
1165
  const VAGUE_BUTTON_LABELS = new Set([
1202
1166
  "continue",
1203
1167
  "submit",
@@ -1326,38 +1290,6 @@ const noBoldHeading = defineRule({
1326
1290
  } })
1327
1291
  });
1328
1292
  //#endregion
1329
- //#region src/plugin/rules/react-ui/no-default-tailwind-palette.ts
1330
- const buildDefaultPaletteRegex = () => {
1331
- const utilityPrefixGroup = TAILWIND_PALETTE_UTILITY_PREFIXES.join("|");
1332
- const paletteNameGroup = TAILWIND_DEFAULT_PALETTE_NAMES.join("|");
1333
- const paletteStopGroup = TAILWIND_DEFAULT_PALETTE_STOPS.join("|");
1334
- return new RegExp(`(?:^|\\s|:)(${utilityPrefixGroup})-(${paletteNameGroup})-(${paletteStopGroup})(?=$|[\\s:/])`, "g");
1335
- };
1336
- const DEFAULT_PALETTE_REGEX = buildDefaultPaletteRegex();
1337
- const noDefaultTailwindPalette = defineRule({
1338
- id: "design-no-default-tailwind-palette",
1339
- tags: ["design", "test-noise"],
1340
- severity: "warn",
1341
- category: "Architecture",
1342
- recommendation: "Replace `indigo-*` / `gray-*` / `slate-*` with project tokens, your brand color, or a less-default neutral (`zinc`, `neutral`, `stone`)",
1343
- create: (context) => ({ JSXAttribute(jsxAttribute) {
1344
- if (!isNodeOfType(jsxAttribute.name, "JSXIdentifier") || jsxAttribute.name.name !== "className") return;
1345
- const classNameLiteral = getClassNameLiteral(jsxAttribute);
1346
- if (!classNameLiteral) return;
1347
- const reportedTokens = /* @__PURE__ */ new Set();
1348
- for (const paletteMatch of classNameLiteral.matchAll(DEFAULT_PALETTE_REGEX)) {
1349
- const matchedToken = `${paletteMatch[1]}-${paletteMatch[2]}-${paletteMatch[3]}`;
1350
- if (reportedTokens.has(matchedToken)) continue;
1351
- reportedTokens.add(matchedToken);
1352
- const replacementSuggestion = paletteMatch[2] === "indigo" ? "use your project's brand color or zinc/neutral/stone" : "use zinc (true neutral), neutral (warmer), or stone (warmest)";
1353
- context.report({
1354
- node: jsxAttribute,
1355
- message: `${matchedToken} reads as the Tailwind template default — ${replacementSuggestion}`
1356
- });
1357
- }
1358
- } })
1359
- });
1360
- //#endregion
1361
1293
  //#region src/plugin/rules/react-ui/utils/is-inside-excluded-typography-ancestor.ts
1362
1294
  const isInsideExcludedTypographyAncestor = (jsxTextNode) => {
1363
1295
  let cursor = jsxTextNode.parent;
@@ -5706,6 +5638,7 @@ const noLegacyClassLifecycles = defineRule({
5706
5638
  id: "no-legacy-class-lifecycles",
5707
5639
  severity: "error",
5708
5640
  category: "Correctness",
5641
+ tags: ["migration-hint"],
5709
5642
  recommendation: "Move side effects in `componentWillMount` to `componentDidMount`; replace `componentWillReceiveProps` with `componentDidUpdate` (compare prevProps) or the static `getDerivedStateFromProps` for pure state derivation; replace `componentWillUpdate` with `getSnapshotBeforeUpdate` paired with `componentDidUpdate`. The `UNSAFE_` prefix only silences the warning — React 19 removes both forms.",
5710
5643
  create: (context) => {
5711
5644
  const checkMember = (memberNode) => {
@@ -5747,6 +5680,7 @@ const noLegacyContextApi = defineRule({
5747
5680
  id: "no-legacy-context-api",
5748
5681
  severity: "error",
5749
5682
  category: "Correctness",
5683
+ tags: ["migration-hint"],
5750
5684
  recommendation: "Replace `childContextTypes` + `getChildContext` with `const MyContext = createContext(...)` + `<MyContext.Provider value={...}>`; replace `contextTypes` with `static contextType = MyContext` (single context) or `useContext()` / `use()` from a function component. The provider and every consumer must migrate together — partial migrations leave consumers reading the wrong context.",
5751
5685
  create: (context) => {
5752
5686
  const checkMember = (memberNode) => {
@@ -6381,7 +6315,7 @@ const reportTestUtilsImports = (node, context) => {
6381
6315
  const noReactDomDeprecatedApis = defineRule({
6382
6316
  id: "no-react-dom-deprecated-apis",
6383
6317
  requires: ["react:18"],
6384
- tags: ["test-noise"],
6318
+ tags: ["test-noise", "migration-hint"],
6385
6319
  severity: "warn",
6386
6320
  recommendation: "Switch the legacy `react-dom` root API (`render` / `hydrate` / `unmountComponentAtNode`) to `createRoot` / `hydrateRoot` / `root.unmount()` from `react-dom/client`. Replace `findDOMNode` with a ref. The whole `react-dom/test-utils` entry point is removed in React 19 — use `act` from `react` and `fireEvent` / `render` from `@testing-library/react`. Only enabled on projects detected as React 18+.",
6387
6321
  ...createDeprecatedReactImportRule({
@@ -6397,7 +6331,7 @@ const noReactDomDeprecatedApis = defineRule({
6397
6331
  const noReact19DeprecatedApis = defineRule({
6398
6332
  id: "no-react19-deprecated-apis",
6399
6333
  requires: ["react:19"],
6400
- tags: ["test-noise"],
6334
+ tags: ["test-noise", "migration-hint"],
6401
6335
  severity: "warn",
6402
6336
  recommendation: "Pass `ref` as a regular prop on function components — `forwardRef` is no longer needed in React 19+. Replace `useContext(X)` with `use(X)` for branch-aware context reads. Only enabled on projects detected as React 19+.",
6403
6337
  ...createDeprecatedReactImportRule({
@@ -10618,903 +10552,2355 @@ const useLazyMotion = defineRule({
10618
10552
  });
10619
10553
  //#endregion
10620
10554
  //#region src/plugin/rule-registry.ts
10621
- const ruleRegistry = {
10622
- "advanced-event-handler-refs": {
10623
- ...advancedEventHandlerRefs,
10624
- framework: "global",
10625
- category: "Performance"
10626
- },
10627
- "async-await-in-loop": {
10628
- ...asyncAwaitInLoop,
10555
+ const reactDoctorRules = [
10556
+ {
10557
+ key: "react-doctor/advanced-event-handler-refs",
10558
+ id: "advanced-event-handler-refs",
10559
+ source: "react-doctor",
10629
10560
  framework: "global",
10630
- category: "Performance"
10561
+ category: "Performance",
10562
+ severity: "warn",
10563
+ rule: {
10564
+ ...advancedEventHandlerRefs,
10565
+ framework: "global",
10566
+ category: "Performance"
10567
+ }
10631
10568
  },
10632
- "async-defer-await": {
10633
- ...asyncDeferAwait,
10569
+ {
10570
+ key: "react-doctor/async-await-in-loop",
10571
+ id: "async-await-in-loop",
10572
+ source: "react-doctor",
10634
10573
  framework: "global",
10635
- category: "Performance"
10574
+ category: "Performance",
10575
+ severity: "warn",
10576
+ rule: {
10577
+ ...asyncAwaitInLoop,
10578
+ framework: "global",
10579
+ category: "Performance"
10580
+ }
10636
10581
  },
10637
- "async-parallel": {
10638
- ...asyncParallel,
10582
+ {
10583
+ key: "react-doctor/async-defer-await",
10584
+ id: "async-defer-await",
10585
+ source: "react-doctor",
10639
10586
  framework: "global",
10640
- category: "Performance"
10587
+ category: "Performance",
10588
+ severity: "warn",
10589
+ rule: {
10590
+ ...asyncDeferAwait,
10591
+ framework: "global",
10592
+ category: "Performance"
10593
+ }
10641
10594
  },
10642
- "client-localstorage-no-version": {
10643
- ...clientLocalstorageNoVersion,
10595
+ {
10596
+ key: "react-doctor/async-parallel",
10597
+ id: "async-parallel",
10598
+ source: "react-doctor",
10644
10599
  framework: "global",
10645
- category: "Correctness"
10600
+ category: "Performance",
10601
+ severity: "warn",
10602
+ rule: {
10603
+ ...asyncParallel,
10604
+ framework: "global",
10605
+ category: "Performance"
10606
+ }
10646
10607
  },
10647
- "client-passive-event-listeners": {
10648
- ...clientPassiveEventListeners,
10608
+ {
10609
+ key: "react-doctor/client-localstorage-no-version",
10610
+ id: "client-localstorage-no-version",
10611
+ source: "react-doctor",
10649
10612
  framework: "global",
10650
- category: "Performance"
10613
+ category: "Correctness",
10614
+ severity: "warn",
10615
+ rule: {
10616
+ ...clientLocalstorageNoVersion,
10617
+ framework: "global",
10618
+ category: "Correctness"
10619
+ }
10651
10620
  },
10652
- "design-no-bold-heading": {
10653
- ...noBoldHeading,
10621
+ {
10622
+ key: "react-doctor/client-passive-event-listeners",
10623
+ id: "client-passive-event-listeners",
10624
+ source: "react-doctor",
10654
10625
  framework: "global",
10655
- category: "Architecture"
10626
+ category: "Performance",
10627
+ severity: "warn",
10628
+ rule: {
10629
+ ...clientPassiveEventListeners,
10630
+ framework: "global",
10631
+ category: "Performance"
10632
+ }
10656
10633
  },
10657
- "design-no-default-tailwind-palette": {
10658
- ...noDefaultTailwindPalette,
10634
+ {
10635
+ key: "react-doctor/design-no-bold-heading",
10636
+ id: "design-no-bold-heading",
10637
+ source: "react-doctor",
10659
10638
  framework: "global",
10660
- category: "Architecture"
10639
+ category: "Architecture",
10640
+ severity: "warn",
10641
+ rule: {
10642
+ ...noBoldHeading,
10643
+ framework: "global",
10644
+ category: "Architecture"
10645
+ }
10661
10646
  },
10662
- "design-no-em-dash-in-jsx-text": {
10663
- ...noEmDashInJsxText,
10647
+ {
10648
+ key: "react-doctor/design-no-em-dash-in-jsx-text",
10649
+ id: "design-no-em-dash-in-jsx-text",
10650
+ source: "react-doctor",
10664
10651
  framework: "global",
10665
- category: "Architecture"
10652
+ category: "Architecture",
10653
+ severity: "warn",
10654
+ rule: {
10655
+ ...noEmDashInJsxText,
10656
+ framework: "global",
10657
+ category: "Architecture"
10658
+ }
10666
10659
  },
10667
- "design-no-redundant-padding-axes": {
10668
- ...noRedundantPaddingAxes,
10660
+ {
10661
+ key: "react-doctor/design-no-redundant-padding-axes",
10662
+ id: "design-no-redundant-padding-axes",
10663
+ source: "react-doctor",
10669
10664
  framework: "global",
10670
- category: "Architecture"
10665
+ category: "Architecture",
10666
+ severity: "warn",
10667
+ rule: {
10668
+ ...noRedundantPaddingAxes,
10669
+ framework: "global",
10670
+ category: "Architecture"
10671
+ }
10671
10672
  },
10672
- "design-no-redundant-size-axes": {
10673
- ...noRedundantSizeAxes,
10673
+ {
10674
+ key: "react-doctor/design-no-redundant-size-axes",
10675
+ id: "design-no-redundant-size-axes",
10676
+ source: "react-doctor",
10674
10677
  framework: "global",
10675
- category: "Architecture"
10678
+ category: "Architecture",
10679
+ severity: "warn",
10680
+ rule: {
10681
+ ...noRedundantSizeAxes,
10682
+ framework: "global",
10683
+ category: "Architecture"
10684
+ }
10676
10685
  },
10677
- "design-no-space-on-flex-children": {
10678
- ...noSpaceOnFlexChildren,
10686
+ {
10687
+ key: "react-doctor/design-no-space-on-flex-children",
10688
+ id: "design-no-space-on-flex-children",
10689
+ source: "react-doctor",
10679
10690
  framework: "global",
10680
- category: "Architecture"
10691
+ category: "Architecture",
10692
+ severity: "warn",
10693
+ rule: {
10694
+ ...noSpaceOnFlexChildren,
10695
+ framework: "global",
10696
+ category: "Architecture"
10697
+ }
10681
10698
  },
10682
- "design-no-three-period-ellipsis": {
10683
- ...noThreePeriodEllipsis,
10699
+ {
10700
+ key: "react-doctor/design-no-three-period-ellipsis",
10701
+ id: "design-no-three-period-ellipsis",
10702
+ source: "react-doctor",
10684
10703
  framework: "global",
10685
- category: "Architecture"
10704
+ category: "Architecture",
10705
+ severity: "warn",
10706
+ rule: {
10707
+ ...noThreePeriodEllipsis,
10708
+ framework: "global",
10709
+ category: "Architecture"
10710
+ }
10686
10711
  },
10687
- "design-no-vague-button-label": {
10688
- ...noVagueButtonLabel,
10712
+ {
10713
+ key: "react-doctor/design-no-vague-button-label",
10714
+ id: "design-no-vague-button-label",
10715
+ source: "react-doctor",
10689
10716
  framework: "global",
10690
- category: "Accessibility"
10717
+ category: "Accessibility",
10718
+ severity: "warn",
10719
+ rule: {
10720
+ ...noVagueButtonLabel,
10721
+ framework: "global",
10722
+ category: "Accessibility"
10723
+ }
10691
10724
  },
10692
- "effect-needs-cleanup": {
10693
- ...effectNeedsCleanup,
10725
+ {
10726
+ key: "react-doctor/effect-needs-cleanup",
10727
+ id: "effect-needs-cleanup",
10728
+ source: "react-doctor",
10694
10729
  framework: "global",
10695
- category: "State & Effects"
10730
+ category: "State & Effects",
10731
+ severity: "error",
10732
+ rule: {
10733
+ ...effectNeedsCleanup,
10734
+ framework: "global",
10735
+ category: "State & Effects"
10736
+ }
10696
10737
  },
10697
- "js-batch-dom-css": {
10698
- ...jsBatchDomCss,
10738
+ {
10739
+ key: "react-doctor/js-batch-dom-css",
10740
+ id: "js-batch-dom-css",
10741
+ source: "react-doctor",
10699
10742
  framework: "global",
10700
- category: "Performance"
10743
+ category: "Performance",
10744
+ severity: "warn",
10745
+ rule: {
10746
+ ...jsBatchDomCss,
10747
+ framework: "global",
10748
+ category: "Performance"
10749
+ }
10701
10750
  },
10702
- "js-cache-property-access": {
10703
- ...jsCachePropertyAccess,
10751
+ {
10752
+ key: "react-doctor/js-cache-property-access",
10753
+ id: "js-cache-property-access",
10754
+ source: "react-doctor",
10704
10755
  framework: "global",
10705
- category: "Performance"
10756
+ category: "Performance",
10757
+ severity: "warn",
10758
+ rule: {
10759
+ ...jsCachePropertyAccess,
10760
+ framework: "global",
10761
+ category: "Performance"
10762
+ }
10706
10763
  },
10707
- "js-cache-storage": {
10708
- ...jsCacheStorage,
10764
+ {
10765
+ key: "react-doctor/js-cache-storage",
10766
+ id: "js-cache-storage",
10767
+ source: "react-doctor",
10709
10768
  framework: "global",
10710
- category: "Performance"
10769
+ category: "Performance",
10770
+ severity: "warn",
10771
+ rule: {
10772
+ ...jsCacheStorage,
10773
+ framework: "global",
10774
+ category: "Performance"
10775
+ }
10711
10776
  },
10712
- "js-combine-iterations": {
10713
- ...jsCombineIterations,
10777
+ {
10778
+ key: "react-doctor/js-combine-iterations",
10779
+ id: "js-combine-iterations",
10780
+ source: "react-doctor",
10714
10781
  framework: "global",
10715
- category: "Performance"
10782
+ category: "Performance",
10783
+ severity: "warn",
10784
+ rule: {
10785
+ ...jsCombineIterations,
10786
+ framework: "global",
10787
+ category: "Performance"
10788
+ }
10716
10789
  },
10717
- "js-early-exit": {
10718
- ...jsEarlyExit,
10790
+ {
10791
+ key: "react-doctor/js-early-exit",
10792
+ id: "js-early-exit",
10793
+ source: "react-doctor",
10719
10794
  framework: "global",
10720
- category: "Performance"
10795
+ category: "Performance",
10796
+ severity: "warn",
10797
+ rule: {
10798
+ ...jsEarlyExit,
10799
+ framework: "global",
10800
+ category: "Performance"
10801
+ }
10721
10802
  },
10722
- "js-flatmap-filter": {
10723
- ...jsFlatmapFilter,
10803
+ {
10804
+ key: "react-doctor/js-flatmap-filter",
10805
+ id: "js-flatmap-filter",
10806
+ source: "react-doctor",
10724
10807
  framework: "global",
10725
- category: "Performance"
10808
+ category: "Performance",
10809
+ severity: "warn",
10810
+ rule: {
10811
+ ...jsFlatmapFilter,
10812
+ framework: "global",
10813
+ category: "Performance"
10814
+ }
10726
10815
  },
10727
- "js-hoist-intl": {
10728
- ...jsHoistIntl,
10816
+ {
10817
+ key: "react-doctor/js-hoist-intl",
10818
+ id: "js-hoist-intl",
10819
+ source: "react-doctor",
10729
10820
  framework: "global",
10730
- category: "Performance"
10821
+ category: "Performance",
10822
+ severity: "warn",
10823
+ rule: {
10824
+ ...jsHoistIntl,
10825
+ framework: "global",
10826
+ category: "Performance"
10827
+ }
10731
10828
  },
10732
- "js-hoist-regexp": {
10733
- ...jsHoistRegexp,
10829
+ {
10830
+ key: "react-doctor/js-hoist-regexp",
10831
+ id: "js-hoist-regexp",
10832
+ source: "react-doctor",
10734
10833
  framework: "global",
10735
- category: "Performance"
10834
+ category: "Performance",
10835
+ severity: "warn",
10836
+ rule: {
10837
+ ...jsHoistRegexp,
10838
+ framework: "global",
10839
+ category: "Performance"
10840
+ }
10736
10841
  },
10737
- "js-index-maps": {
10738
- ...jsIndexMaps,
10842
+ {
10843
+ key: "react-doctor/js-index-maps",
10844
+ id: "js-index-maps",
10845
+ source: "react-doctor",
10739
10846
  framework: "global",
10740
- category: "Performance"
10847
+ category: "Performance",
10848
+ severity: "warn",
10849
+ rule: {
10850
+ ...jsIndexMaps,
10851
+ framework: "global",
10852
+ category: "Performance"
10853
+ }
10741
10854
  },
10742
- "js-length-check-first": {
10743
- ...jsLengthCheckFirst,
10855
+ {
10856
+ key: "react-doctor/js-length-check-first",
10857
+ id: "js-length-check-first",
10858
+ source: "react-doctor",
10744
10859
  framework: "global",
10745
- category: "Performance"
10860
+ category: "Performance",
10861
+ severity: "warn",
10862
+ rule: {
10863
+ ...jsLengthCheckFirst,
10864
+ framework: "global",
10865
+ category: "Performance"
10866
+ }
10746
10867
  },
10747
- "js-min-max-loop": {
10748
- ...jsMinMaxLoop,
10868
+ {
10869
+ key: "react-doctor/js-min-max-loop",
10870
+ id: "js-min-max-loop",
10871
+ source: "react-doctor",
10749
10872
  framework: "global",
10750
- category: "Performance"
10873
+ category: "Performance",
10874
+ severity: "warn",
10875
+ rule: {
10876
+ ...jsMinMaxLoop,
10877
+ framework: "global",
10878
+ category: "Performance"
10879
+ }
10751
10880
  },
10752
- "js-set-map-lookups": {
10753
- ...jsSetMapLookups,
10881
+ {
10882
+ key: "react-doctor/js-set-map-lookups",
10883
+ id: "js-set-map-lookups",
10884
+ source: "react-doctor",
10754
10885
  framework: "global",
10755
- category: "Performance"
10886
+ category: "Performance",
10887
+ severity: "warn",
10888
+ rule: {
10889
+ ...jsSetMapLookups,
10890
+ framework: "global",
10891
+ category: "Performance"
10892
+ }
10756
10893
  },
10757
- "js-tosorted-immutable": {
10758
- ...jsTosortedImmutable,
10894
+ {
10895
+ key: "react-doctor/js-tosorted-immutable",
10896
+ id: "js-tosorted-immutable",
10897
+ source: "react-doctor",
10759
10898
  framework: "global",
10760
- category: "Performance"
10899
+ category: "Performance",
10900
+ severity: "warn",
10901
+ rule: {
10902
+ ...jsTosortedImmutable,
10903
+ framework: "global",
10904
+ category: "Performance"
10905
+ }
10761
10906
  },
10762
- "nextjs-async-client-component": {
10763
- ...nextjsAsyncClientComponent,
10907
+ {
10908
+ key: "react-doctor/nextjs-async-client-component",
10909
+ id: "nextjs-async-client-component",
10910
+ source: "react-doctor",
10764
10911
  framework: "nextjs",
10765
- category: "Next.js"
10912
+ category: "Next.js",
10913
+ severity: "error",
10914
+ rule: {
10915
+ ...nextjsAsyncClientComponent,
10916
+ framework: "nextjs",
10917
+ category: "Next.js"
10918
+ }
10766
10919
  },
10767
- "nextjs-image-missing-sizes": {
10768
- ...nextjsImageMissingSizes,
10920
+ {
10921
+ key: "react-doctor/nextjs-image-missing-sizes",
10922
+ id: "nextjs-image-missing-sizes",
10923
+ source: "react-doctor",
10769
10924
  framework: "nextjs",
10770
- category: "Next.js"
10925
+ category: "Next.js",
10926
+ severity: "warn",
10927
+ rule: {
10928
+ ...nextjsImageMissingSizes,
10929
+ framework: "nextjs",
10930
+ category: "Next.js"
10931
+ }
10771
10932
  },
10772
- "nextjs-inline-script-missing-id": {
10773
- ...nextjsInlineScriptMissingId,
10933
+ {
10934
+ key: "react-doctor/nextjs-inline-script-missing-id",
10935
+ id: "nextjs-inline-script-missing-id",
10936
+ source: "react-doctor",
10774
10937
  framework: "nextjs",
10775
- category: "Next.js"
10938
+ category: "Next.js",
10939
+ severity: "warn",
10940
+ rule: {
10941
+ ...nextjsInlineScriptMissingId,
10942
+ framework: "nextjs",
10943
+ category: "Next.js"
10944
+ }
10776
10945
  },
10777
- "nextjs-missing-metadata": {
10778
- ...nextjsMissingMetadata,
10946
+ {
10947
+ key: "react-doctor/nextjs-missing-metadata",
10948
+ id: "nextjs-missing-metadata",
10949
+ source: "react-doctor",
10779
10950
  framework: "nextjs",
10780
- category: "Next.js"
10951
+ category: "Next.js",
10952
+ severity: "warn",
10953
+ rule: {
10954
+ ...nextjsMissingMetadata,
10955
+ framework: "nextjs",
10956
+ category: "Next.js"
10957
+ }
10781
10958
  },
10782
- "nextjs-no-a-element": {
10783
- ...nextjsNoAElement,
10959
+ {
10960
+ key: "react-doctor/nextjs-no-a-element",
10961
+ id: "nextjs-no-a-element",
10962
+ source: "react-doctor",
10784
10963
  framework: "nextjs",
10785
- category: "Next.js"
10964
+ category: "Next.js",
10965
+ severity: "warn",
10966
+ rule: {
10967
+ ...nextjsNoAElement,
10968
+ framework: "nextjs",
10969
+ category: "Next.js"
10970
+ }
10786
10971
  },
10787
- "nextjs-no-client-fetch-for-server-data": {
10788
- ...nextjsNoClientFetchForServerData,
10972
+ {
10973
+ key: "react-doctor/nextjs-no-client-fetch-for-server-data",
10974
+ id: "nextjs-no-client-fetch-for-server-data",
10975
+ source: "react-doctor",
10789
10976
  framework: "nextjs",
10790
- category: "Next.js"
10977
+ category: "Next.js",
10978
+ severity: "warn",
10979
+ rule: {
10980
+ ...nextjsNoClientFetchForServerData,
10981
+ framework: "nextjs",
10982
+ category: "Next.js"
10983
+ }
10791
10984
  },
10792
- "nextjs-no-client-side-redirect": {
10793
- ...nextjsNoClientSideRedirect,
10985
+ {
10986
+ key: "react-doctor/nextjs-no-client-side-redirect",
10987
+ id: "nextjs-no-client-side-redirect",
10988
+ source: "react-doctor",
10794
10989
  framework: "nextjs",
10795
- category: "Next.js"
10990
+ category: "Next.js",
10991
+ severity: "warn",
10992
+ rule: {
10993
+ ...nextjsNoClientSideRedirect,
10994
+ framework: "nextjs",
10995
+ category: "Next.js"
10996
+ }
10796
10997
  },
10797
- "nextjs-no-css-link": {
10798
- ...nextjsNoCssLink,
10998
+ {
10999
+ key: "react-doctor/nextjs-no-css-link",
11000
+ id: "nextjs-no-css-link",
11001
+ source: "react-doctor",
10799
11002
  framework: "nextjs",
10800
- category: "Next.js"
11003
+ category: "Next.js",
11004
+ severity: "warn",
11005
+ rule: {
11006
+ ...nextjsNoCssLink,
11007
+ framework: "nextjs",
11008
+ category: "Next.js"
11009
+ }
10801
11010
  },
10802
- "nextjs-no-font-link": {
10803
- ...nextjsNoFontLink,
11011
+ {
11012
+ key: "react-doctor/nextjs-no-font-link",
11013
+ id: "nextjs-no-font-link",
11014
+ source: "react-doctor",
10804
11015
  framework: "nextjs",
10805
- category: "Next.js"
11016
+ category: "Next.js",
11017
+ severity: "warn",
11018
+ rule: {
11019
+ ...nextjsNoFontLink,
11020
+ framework: "nextjs",
11021
+ category: "Next.js"
11022
+ }
10806
11023
  },
10807
- "nextjs-no-head-import": {
10808
- ...nextjsNoHeadImport,
11024
+ {
11025
+ key: "react-doctor/nextjs-no-head-import",
11026
+ id: "nextjs-no-head-import",
11027
+ source: "react-doctor",
10809
11028
  framework: "nextjs",
10810
- category: "Next.js"
11029
+ category: "Next.js",
11030
+ severity: "error",
11031
+ rule: {
11032
+ ...nextjsNoHeadImport,
11033
+ framework: "nextjs",
11034
+ category: "Next.js"
11035
+ }
10811
11036
  },
10812
- "nextjs-no-img-element": {
10813
- ...nextjsNoImgElement,
11037
+ {
11038
+ key: "react-doctor/nextjs-no-img-element",
11039
+ id: "nextjs-no-img-element",
11040
+ source: "react-doctor",
10814
11041
  framework: "nextjs",
10815
- category: "Next.js"
11042
+ category: "Next.js",
11043
+ severity: "warn",
11044
+ rule: {
11045
+ ...nextjsNoImgElement,
11046
+ framework: "nextjs",
11047
+ category: "Next.js"
11048
+ }
10816
11049
  },
10817
- "nextjs-no-native-script": {
10818
- ...nextjsNoNativeScript,
11050
+ {
11051
+ key: "react-doctor/nextjs-no-native-script",
11052
+ id: "nextjs-no-native-script",
11053
+ source: "react-doctor",
10819
11054
  framework: "nextjs",
10820
- category: "Next.js"
11055
+ category: "Next.js",
11056
+ severity: "warn",
11057
+ rule: {
11058
+ ...nextjsNoNativeScript,
11059
+ framework: "nextjs",
11060
+ category: "Next.js"
11061
+ }
10821
11062
  },
10822
- "nextjs-no-polyfill-script": {
10823
- ...nextjsNoPolyfillScript,
11063
+ {
11064
+ key: "react-doctor/nextjs-no-polyfill-script",
11065
+ id: "nextjs-no-polyfill-script",
11066
+ source: "react-doctor",
10824
11067
  framework: "nextjs",
10825
- category: "Next.js"
11068
+ category: "Next.js",
11069
+ severity: "warn",
11070
+ rule: {
11071
+ ...nextjsNoPolyfillScript,
11072
+ framework: "nextjs",
11073
+ category: "Next.js"
11074
+ }
10826
11075
  },
10827
- "nextjs-no-redirect-in-try-catch": {
10828
- ...nextjsNoRedirectInTryCatch,
11076
+ {
11077
+ key: "react-doctor/nextjs-no-redirect-in-try-catch",
11078
+ id: "nextjs-no-redirect-in-try-catch",
11079
+ source: "react-doctor",
10829
11080
  framework: "nextjs",
10830
- category: "Next.js"
11081
+ category: "Next.js",
11082
+ severity: "warn",
11083
+ rule: {
11084
+ ...nextjsNoRedirectInTryCatch,
11085
+ framework: "nextjs",
11086
+ category: "Next.js"
11087
+ }
10831
11088
  },
10832
- "nextjs-no-side-effect-in-get-handler": {
10833
- ...nextjsNoSideEffectInGetHandler,
11089
+ {
11090
+ key: "react-doctor/nextjs-no-side-effect-in-get-handler",
11091
+ id: "nextjs-no-side-effect-in-get-handler",
11092
+ source: "react-doctor",
10834
11093
  framework: "nextjs",
10835
- category: "Security"
11094
+ category: "Security",
11095
+ severity: "error",
11096
+ rule: {
11097
+ ...nextjsNoSideEffectInGetHandler,
11098
+ framework: "nextjs",
11099
+ category: "Security"
11100
+ }
10836
11101
  },
10837
- "nextjs-no-use-search-params-without-suspense": {
10838
- ...nextjsNoUseSearchParamsWithoutSuspense,
11102
+ {
11103
+ key: "react-doctor/nextjs-no-use-search-params-without-suspense",
11104
+ id: "nextjs-no-use-search-params-without-suspense",
11105
+ source: "react-doctor",
10839
11106
  framework: "nextjs",
10840
- category: "Next.js"
11107
+ category: "Next.js",
11108
+ severity: "warn",
11109
+ rule: {
11110
+ ...nextjsNoUseSearchParamsWithoutSuspense,
11111
+ framework: "nextjs",
11112
+ category: "Next.js"
11113
+ }
10841
11114
  },
10842
- "no-array-index-as-key": {
10843
- ...noArrayIndexAsKey,
11115
+ {
11116
+ key: "react-doctor/no-array-index-as-key",
11117
+ id: "no-array-index-as-key",
11118
+ source: "react-doctor",
10844
11119
  framework: "global",
10845
- category: "Correctness"
11120
+ category: "Correctness",
11121
+ severity: "warn",
11122
+ rule: {
11123
+ ...noArrayIndexAsKey,
11124
+ framework: "global",
11125
+ category: "Correctness"
11126
+ }
10846
11127
  },
10847
- "no-barrel-import": {
10848
- ...noBarrelImport,
11128
+ {
11129
+ key: "react-doctor/no-barrel-import",
11130
+ id: "no-barrel-import",
11131
+ source: "react-doctor",
10849
11132
  framework: "global",
10850
- category: "Bundle Size"
11133
+ category: "Bundle Size",
11134
+ severity: "warn",
11135
+ rule: {
11136
+ ...noBarrelImport,
11137
+ framework: "global",
11138
+ category: "Bundle Size"
11139
+ }
10851
11140
  },
10852
- "no-cascading-set-state": {
10853
- ...noCascadingSetState,
11141
+ {
11142
+ key: "react-doctor/no-cascading-set-state",
11143
+ id: "no-cascading-set-state",
11144
+ source: "react-doctor",
10854
11145
  framework: "global",
10855
- category: "State & Effects"
11146
+ category: "State & Effects",
11147
+ severity: "warn",
11148
+ rule: {
11149
+ ...noCascadingSetState,
11150
+ framework: "global",
11151
+ category: "State & Effects"
11152
+ }
10856
11153
  },
10857
- "no-dark-mode-glow": {
10858
- ...noDarkModeGlow,
11154
+ {
11155
+ key: "react-doctor/no-dark-mode-glow",
11156
+ id: "no-dark-mode-glow",
11157
+ source: "react-doctor",
10859
11158
  framework: "global",
10860
- category: "Architecture"
11159
+ category: "Architecture",
11160
+ severity: "warn",
11161
+ rule: {
11162
+ ...noDarkModeGlow,
11163
+ framework: "global",
11164
+ category: "Architecture"
11165
+ }
10861
11166
  },
10862
- "no-default-props": {
10863
- ...noDefaultProps,
11167
+ {
11168
+ key: "react-doctor/no-default-props",
11169
+ id: "no-default-props",
11170
+ source: "react-doctor",
10864
11171
  framework: "global",
10865
- category: "Architecture"
11172
+ category: "Architecture",
11173
+ severity: "warn",
11174
+ rule: {
11175
+ ...noDefaultProps,
11176
+ framework: "global",
11177
+ category: "Architecture"
11178
+ }
10866
11179
  },
10867
- "no-derived-state-effect": {
10868
- ...noDerivedStateEffect,
11180
+ {
11181
+ key: "react-doctor/no-derived-state-effect",
11182
+ id: "no-derived-state-effect",
11183
+ source: "react-doctor",
10869
11184
  framework: "global",
10870
- category: "State & Effects"
11185
+ category: "State & Effects",
11186
+ severity: "warn",
11187
+ rule: {
11188
+ ...noDerivedStateEffect,
11189
+ framework: "global",
11190
+ category: "State & Effects"
11191
+ }
10871
11192
  },
10872
- "no-derived-useState": {
10873
- ...noDerivedUseState,
11193
+ {
11194
+ key: "react-doctor/no-derived-useState",
11195
+ id: "no-derived-useState",
11196
+ source: "react-doctor",
10874
11197
  framework: "global",
10875
- category: "State & Effects"
11198
+ category: "State & Effects",
11199
+ severity: "warn",
11200
+ rule: {
11201
+ ...noDerivedUseState,
11202
+ framework: "global",
11203
+ category: "State & Effects"
11204
+ }
10876
11205
  },
10877
- "no-direct-state-mutation": {
10878
- ...noDirectStateMutation,
11206
+ {
11207
+ key: "react-doctor/no-direct-state-mutation",
11208
+ id: "no-direct-state-mutation",
11209
+ source: "react-doctor",
10879
11210
  framework: "global",
10880
- category: "State & Effects"
11211
+ category: "State & Effects",
11212
+ severity: "warn",
11213
+ rule: {
11214
+ ...noDirectStateMutation,
11215
+ framework: "global",
11216
+ category: "State & Effects"
11217
+ }
10881
11218
  },
10882
- "no-disabled-zoom": {
10883
- ...noDisabledZoom,
11219
+ {
11220
+ key: "react-doctor/no-disabled-zoom",
11221
+ id: "no-disabled-zoom",
11222
+ source: "react-doctor",
10884
11223
  framework: "global",
10885
- category: "Accessibility"
11224
+ category: "Accessibility",
11225
+ severity: "error",
11226
+ rule: {
11227
+ ...noDisabledZoom,
11228
+ framework: "global",
11229
+ category: "Accessibility"
11230
+ }
10886
11231
  },
10887
- "no-document-start-view-transition": {
10888
- ...noDocumentStartViewTransition,
11232
+ {
11233
+ key: "react-doctor/no-document-start-view-transition",
11234
+ id: "no-document-start-view-transition",
11235
+ source: "react-doctor",
10889
11236
  framework: "global",
10890
- category: "Correctness"
11237
+ category: "Correctness",
11238
+ severity: "warn",
11239
+ rule: {
11240
+ ...noDocumentStartViewTransition,
11241
+ framework: "global",
11242
+ category: "Correctness"
11243
+ }
10891
11244
  },
10892
- "no-dynamic-import-path": {
10893
- ...noDynamicImportPath,
11245
+ {
11246
+ key: "react-doctor/no-dynamic-import-path",
11247
+ id: "no-dynamic-import-path",
11248
+ source: "react-doctor",
10894
11249
  framework: "global",
10895
- category: "Bundle Size"
11250
+ category: "Bundle Size",
11251
+ severity: "warn",
11252
+ rule: {
11253
+ ...noDynamicImportPath,
11254
+ framework: "global",
11255
+ category: "Bundle Size"
11256
+ }
10896
11257
  },
10897
- "no-effect-chain": {
10898
- ...noEffectChain,
11258
+ {
11259
+ key: "react-doctor/no-effect-chain",
11260
+ id: "no-effect-chain",
11261
+ source: "react-doctor",
10899
11262
  framework: "global",
10900
- category: "State & Effects"
11263
+ category: "State & Effects",
11264
+ severity: "warn",
11265
+ rule: {
11266
+ ...noEffectChain,
11267
+ framework: "global",
11268
+ category: "State & Effects"
11269
+ }
10901
11270
  },
10902
- "no-effect-event-handler": {
10903
- ...noEffectEventHandler,
11271
+ {
11272
+ key: "react-doctor/no-effect-event-handler",
11273
+ id: "no-effect-event-handler",
11274
+ source: "react-doctor",
10904
11275
  framework: "global",
10905
- category: "State & Effects"
11276
+ category: "State & Effects",
11277
+ severity: "warn",
11278
+ rule: {
11279
+ ...noEffectEventHandler,
11280
+ framework: "global",
11281
+ category: "State & Effects"
11282
+ }
10906
11283
  },
10907
- "no-effect-event-in-deps": {
10908
- ...noEffectEventInDeps,
11284
+ {
11285
+ key: "react-doctor/no-effect-event-in-deps",
11286
+ id: "no-effect-event-in-deps",
11287
+ source: "react-doctor",
10909
11288
  framework: "global",
10910
- category: "State & Effects"
11289
+ category: "State & Effects",
11290
+ severity: "error",
11291
+ rule: {
11292
+ ...noEffectEventInDeps,
11293
+ framework: "global",
11294
+ category: "State & Effects"
11295
+ }
10911
11296
  },
10912
- "no-eval": {
10913
- ...noEval,
11297
+ {
11298
+ key: "react-doctor/no-eval",
11299
+ id: "no-eval",
11300
+ source: "react-doctor",
10914
11301
  framework: "global",
10915
- category: "Security"
11302
+ category: "Security",
11303
+ severity: "error",
11304
+ rule: {
11305
+ ...noEval,
11306
+ framework: "global",
11307
+ category: "Security"
11308
+ }
10916
11309
  },
10917
- "no-event-trigger-state": {
10918
- ...noEventTriggerState,
11310
+ {
11311
+ key: "react-doctor/no-event-trigger-state",
11312
+ id: "no-event-trigger-state",
11313
+ source: "react-doctor",
10919
11314
  framework: "global",
10920
- category: "State & Effects"
11315
+ category: "State & Effects",
11316
+ severity: "warn",
11317
+ rule: {
11318
+ ...noEventTriggerState,
11319
+ framework: "global",
11320
+ category: "State & Effects"
11321
+ }
10921
11322
  },
10922
- "no-fetch-in-effect": {
10923
- ...noFetchInEffect,
11323
+ {
11324
+ key: "react-doctor/no-fetch-in-effect",
11325
+ id: "no-fetch-in-effect",
11326
+ source: "react-doctor",
10924
11327
  framework: "global",
10925
- category: "State & Effects"
11328
+ category: "State & Effects",
11329
+ severity: "warn",
11330
+ rule: {
11331
+ ...noFetchInEffect,
11332
+ framework: "global",
11333
+ category: "State & Effects"
11334
+ }
10926
11335
  },
10927
- "no-flush-sync": {
10928
- ...noFlushSync,
11336
+ {
11337
+ key: "react-doctor/no-flush-sync",
11338
+ id: "no-flush-sync",
11339
+ source: "react-doctor",
10929
11340
  framework: "global",
10930
- category: "Performance"
11341
+ category: "Performance",
11342
+ severity: "warn",
11343
+ rule: {
11344
+ ...noFlushSync,
11345
+ framework: "global",
11346
+ category: "Performance"
11347
+ }
10931
11348
  },
10932
- "no-full-lodash-import": {
10933
- ...noFullLodashImport,
11349
+ {
11350
+ key: "react-doctor/no-full-lodash-import",
11351
+ id: "no-full-lodash-import",
11352
+ source: "react-doctor",
10934
11353
  framework: "global",
10935
- category: "Bundle Size"
11354
+ category: "Bundle Size",
11355
+ severity: "warn",
11356
+ rule: {
11357
+ ...noFullLodashImport,
11358
+ framework: "global",
11359
+ category: "Bundle Size"
11360
+ }
10936
11361
  },
10937
- "no-generic-handler-names": {
10938
- ...noGenericHandlerNames,
11362
+ {
11363
+ key: "react-doctor/no-generic-handler-names",
11364
+ id: "no-generic-handler-names",
11365
+ source: "react-doctor",
10939
11366
  framework: "global",
10940
- category: "Architecture"
11367
+ category: "Architecture",
11368
+ severity: "warn",
11369
+ rule: {
11370
+ ...noGenericHandlerNames,
11371
+ framework: "global",
11372
+ category: "Architecture"
11373
+ }
10941
11374
  },
10942
- "no-giant-component": {
10943
- ...noGiantComponent,
11375
+ {
11376
+ key: "react-doctor/no-giant-component",
11377
+ id: "no-giant-component",
11378
+ source: "react-doctor",
10944
11379
  framework: "global",
10945
- category: "Architecture"
11380
+ category: "Architecture",
11381
+ severity: "warn",
11382
+ rule: {
11383
+ ...noGiantComponent,
11384
+ framework: "global",
11385
+ category: "Architecture"
11386
+ }
10946
11387
  },
10947
- "no-global-css-variable-animation": {
10948
- ...noGlobalCssVariableAnimation,
11388
+ {
11389
+ key: "react-doctor/no-global-css-variable-animation",
11390
+ id: "no-global-css-variable-animation",
11391
+ source: "react-doctor",
10949
11392
  framework: "global",
10950
- category: "Performance"
11393
+ category: "Performance",
11394
+ severity: "error",
11395
+ rule: {
11396
+ ...noGlobalCssVariableAnimation,
11397
+ framework: "global",
11398
+ category: "Performance"
11399
+ }
10951
11400
  },
10952
- "no-gradient-text": {
10953
- ...noGradientText,
11401
+ {
11402
+ key: "react-doctor/no-gradient-text",
11403
+ id: "no-gradient-text",
11404
+ source: "react-doctor",
10954
11405
  framework: "global",
10955
- category: "Architecture"
11406
+ category: "Architecture",
11407
+ severity: "warn",
11408
+ rule: {
11409
+ ...noGradientText,
11410
+ framework: "global",
11411
+ category: "Architecture"
11412
+ }
10956
11413
  },
10957
- "no-gray-on-colored-background": {
10958
- ...noGrayOnColoredBackground,
11414
+ {
11415
+ key: "react-doctor/no-gray-on-colored-background",
11416
+ id: "no-gray-on-colored-background",
11417
+ source: "react-doctor",
10959
11418
  framework: "global",
10960
- category: "Accessibility"
11419
+ category: "Accessibility",
11420
+ severity: "warn",
11421
+ rule: {
11422
+ ...noGrayOnColoredBackground,
11423
+ framework: "global",
11424
+ category: "Accessibility"
11425
+ }
10961
11426
  },
10962
- "no-inline-bounce-easing": {
10963
- ...noInlineBounceEasing,
11427
+ {
11428
+ key: "react-doctor/no-inline-bounce-easing",
11429
+ id: "no-inline-bounce-easing",
11430
+ source: "react-doctor",
10964
11431
  framework: "global",
10965
- category: "Performance"
11432
+ category: "Performance",
11433
+ severity: "warn",
11434
+ rule: {
11435
+ ...noInlineBounceEasing,
11436
+ framework: "global",
11437
+ category: "Performance"
11438
+ }
10966
11439
  },
10967
- "no-inline-exhaustive-style": {
10968
- ...noInlineExhaustiveStyle,
11440
+ {
11441
+ key: "react-doctor/no-inline-exhaustive-style",
11442
+ id: "no-inline-exhaustive-style",
11443
+ source: "react-doctor",
10969
11444
  framework: "global",
10970
- category: "Architecture"
11445
+ category: "Architecture",
11446
+ severity: "warn",
11447
+ rule: {
11448
+ ...noInlineExhaustiveStyle,
11449
+ framework: "global",
11450
+ category: "Architecture"
11451
+ }
10971
11452
  },
10972
- "no-inline-prop-on-memo-component": {
10973
- ...noInlinePropOnMemoComponent,
11453
+ {
11454
+ key: "react-doctor/no-inline-prop-on-memo-component",
11455
+ id: "no-inline-prop-on-memo-component",
11456
+ source: "react-doctor",
10974
11457
  framework: "global",
10975
- category: "Performance"
11458
+ category: "Performance",
11459
+ severity: "warn",
11460
+ rule: {
11461
+ ...noInlinePropOnMemoComponent,
11462
+ framework: "global",
11463
+ category: "Performance"
11464
+ }
10976
11465
  },
10977
- "no-justified-text": {
10978
- ...noJustifiedText,
11466
+ {
11467
+ key: "react-doctor/no-justified-text",
11468
+ id: "no-justified-text",
11469
+ source: "react-doctor",
10979
11470
  framework: "global",
10980
- category: "Accessibility"
11471
+ category: "Accessibility",
11472
+ severity: "warn",
11473
+ rule: {
11474
+ ...noJustifiedText,
11475
+ framework: "global",
11476
+ category: "Accessibility"
11477
+ }
10981
11478
  },
10982
- "no-large-animated-blur": {
10983
- ...noLargeAnimatedBlur,
11479
+ {
11480
+ key: "react-doctor/no-large-animated-blur",
11481
+ id: "no-large-animated-blur",
11482
+ source: "react-doctor",
10984
11483
  framework: "global",
10985
- category: "Performance"
11484
+ category: "Performance",
11485
+ severity: "warn",
11486
+ rule: {
11487
+ ...noLargeAnimatedBlur,
11488
+ framework: "global",
11489
+ category: "Performance"
11490
+ }
10986
11491
  },
10987
- "no-layout-property-animation": {
10988
- ...noLayoutPropertyAnimation,
11492
+ {
11493
+ key: "react-doctor/no-layout-property-animation",
11494
+ id: "no-layout-property-animation",
11495
+ source: "react-doctor",
10989
11496
  framework: "global",
10990
- category: "Performance"
11497
+ category: "Performance",
11498
+ severity: "error",
11499
+ rule: {
11500
+ ...noLayoutPropertyAnimation,
11501
+ framework: "global",
11502
+ category: "Performance"
11503
+ }
10991
11504
  },
10992
- "no-layout-transition-inline": {
10993
- ...noLayoutTransitionInline,
11505
+ {
11506
+ key: "react-doctor/no-layout-transition-inline",
11507
+ id: "no-layout-transition-inline",
11508
+ source: "react-doctor",
10994
11509
  framework: "global",
10995
- category: "Performance"
11510
+ category: "Performance",
11511
+ severity: "warn",
11512
+ rule: {
11513
+ ...noLayoutTransitionInline,
11514
+ framework: "global",
11515
+ category: "Performance"
11516
+ }
10996
11517
  },
10997
- "no-legacy-class-lifecycles": {
10998
- ...noLegacyClassLifecycles,
11518
+ {
11519
+ key: "react-doctor/no-legacy-class-lifecycles",
11520
+ id: "no-legacy-class-lifecycles",
11521
+ source: "react-doctor",
10999
11522
  framework: "global",
11000
- category: "Correctness"
11523
+ category: "Correctness",
11524
+ severity: "error",
11525
+ rule: {
11526
+ ...noLegacyClassLifecycles,
11527
+ framework: "global",
11528
+ category: "Correctness"
11529
+ }
11001
11530
  },
11002
- "no-legacy-context-api": {
11003
- ...noLegacyContextApi,
11531
+ {
11532
+ key: "react-doctor/no-legacy-context-api",
11533
+ id: "no-legacy-context-api",
11534
+ source: "react-doctor",
11004
11535
  framework: "global",
11005
- category: "Correctness"
11536
+ category: "Correctness",
11537
+ severity: "error",
11538
+ rule: {
11539
+ ...noLegacyContextApi,
11540
+ framework: "global",
11541
+ category: "Correctness"
11542
+ }
11006
11543
  },
11007
- "no-long-transition-duration": {
11008
- ...noLongTransitionDuration,
11544
+ {
11545
+ key: "react-doctor/no-long-transition-duration",
11546
+ id: "no-long-transition-duration",
11547
+ source: "react-doctor",
11009
11548
  framework: "global",
11010
- category: "Performance"
11549
+ category: "Performance",
11550
+ severity: "warn",
11551
+ rule: {
11552
+ ...noLongTransitionDuration,
11553
+ framework: "global",
11554
+ category: "Performance"
11555
+ }
11011
11556
  },
11012
- "no-many-boolean-props": {
11013
- ...noManyBooleanProps,
11557
+ {
11558
+ key: "react-doctor/no-many-boolean-props",
11559
+ id: "no-many-boolean-props",
11560
+ source: "react-doctor",
11014
11561
  framework: "global",
11015
- category: "Architecture"
11562
+ category: "Architecture",
11563
+ severity: "warn",
11564
+ rule: {
11565
+ ...noManyBooleanProps,
11566
+ framework: "global",
11567
+ category: "Architecture"
11568
+ }
11016
11569
  },
11017
- "no-mirror-prop-effect": {
11018
- ...noMirrorPropEffect,
11570
+ {
11571
+ key: "react-doctor/no-mirror-prop-effect",
11572
+ id: "no-mirror-prop-effect",
11573
+ source: "react-doctor",
11019
11574
  framework: "global",
11020
- category: "State & Effects"
11575
+ category: "State & Effects",
11576
+ severity: "warn",
11577
+ rule: {
11578
+ ...noMirrorPropEffect,
11579
+ framework: "global",
11580
+ category: "State & Effects"
11581
+ }
11021
11582
  },
11022
- "no-moment": {
11023
- ...noMoment,
11583
+ {
11584
+ key: "react-doctor/no-moment",
11585
+ id: "no-moment",
11586
+ source: "react-doctor",
11024
11587
  framework: "global",
11025
- category: "Bundle Size"
11588
+ category: "Bundle Size",
11589
+ severity: "warn",
11590
+ rule: {
11591
+ ...noMoment,
11592
+ framework: "global",
11593
+ category: "Bundle Size"
11594
+ }
11026
11595
  },
11027
- "no-mutable-in-deps": {
11028
- ...noMutableInDeps,
11596
+ {
11597
+ key: "react-doctor/no-mutable-in-deps",
11598
+ id: "no-mutable-in-deps",
11599
+ source: "react-doctor",
11029
11600
  framework: "global",
11030
- category: "State & Effects"
11601
+ category: "State & Effects",
11602
+ severity: "error",
11603
+ rule: {
11604
+ ...noMutableInDeps,
11605
+ framework: "global",
11606
+ category: "State & Effects"
11607
+ }
11031
11608
  },
11032
- "no-nested-component-definition": {
11033
- ...noNestedComponentDefinition,
11609
+ {
11610
+ key: "react-doctor/no-nested-component-definition",
11611
+ id: "no-nested-component-definition",
11612
+ source: "react-doctor",
11034
11613
  framework: "global",
11035
- category: "Correctness"
11614
+ category: "Correctness",
11615
+ severity: "error",
11616
+ rule: {
11617
+ ...noNestedComponentDefinition,
11618
+ framework: "global",
11619
+ category: "Correctness"
11620
+ }
11036
11621
  },
11037
- "no-outline-none": {
11038
- ...noOutlineNone,
11622
+ {
11623
+ key: "react-doctor/no-outline-none",
11624
+ id: "no-outline-none",
11625
+ source: "react-doctor",
11039
11626
  framework: "global",
11040
- category: "Accessibility"
11627
+ category: "Accessibility",
11628
+ severity: "warn",
11629
+ rule: {
11630
+ ...noOutlineNone,
11631
+ framework: "global",
11632
+ category: "Accessibility"
11633
+ }
11041
11634
  },
11042
- "no-permanent-will-change": {
11043
- ...noPermanentWillChange,
11635
+ {
11636
+ key: "react-doctor/no-permanent-will-change",
11637
+ id: "no-permanent-will-change",
11638
+ source: "react-doctor",
11044
11639
  framework: "global",
11045
- category: "Performance"
11640
+ category: "Performance",
11641
+ severity: "warn",
11642
+ rule: {
11643
+ ...noPermanentWillChange,
11644
+ framework: "global",
11645
+ category: "Performance"
11646
+ }
11046
11647
  },
11047
- "no-polymorphic-children": {
11048
- ...noPolymorphicChildren,
11648
+ {
11649
+ key: "react-doctor/no-polymorphic-children",
11650
+ id: "no-polymorphic-children",
11651
+ source: "react-doctor",
11049
11652
  framework: "global",
11050
- category: "Architecture"
11653
+ category: "Architecture",
11654
+ severity: "warn",
11655
+ rule: {
11656
+ ...noPolymorphicChildren,
11657
+ framework: "global",
11658
+ category: "Architecture"
11659
+ }
11051
11660
  },
11052
- "no-prevent-default": {
11053
- ...noPreventDefault,
11661
+ {
11662
+ key: "react-doctor/no-prevent-default",
11663
+ id: "no-prevent-default",
11664
+ source: "react-doctor",
11054
11665
  framework: "global",
11055
- category: "Correctness"
11666
+ category: "Correctness",
11667
+ severity: "warn",
11668
+ rule: {
11669
+ ...noPreventDefault,
11670
+ framework: "global",
11671
+ category: "Correctness"
11672
+ }
11056
11673
  },
11057
- "no-prop-callback-in-effect": {
11058
- ...noPropCallbackInEffect,
11674
+ {
11675
+ key: "react-doctor/no-prop-callback-in-effect",
11676
+ id: "no-prop-callback-in-effect",
11677
+ source: "react-doctor",
11059
11678
  framework: "global",
11060
- category: "State & Effects"
11679
+ category: "State & Effects",
11680
+ severity: "warn",
11681
+ rule: {
11682
+ ...noPropCallbackInEffect,
11683
+ framework: "global",
11684
+ category: "State & Effects"
11685
+ }
11061
11686
  },
11062
- "no-pure-black-background": {
11063
- ...noPureBlackBackground,
11687
+ {
11688
+ key: "react-doctor/no-pure-black-background",
11689
+ id: "no-pure-black-background",
11690
+ source: "react-doctor",
11064
11691
  framework: "global",
11065
- category: "Architecture"
11692
+ category: "Architecture",
11693
+ severity: "warn",
11694
+ rule: {
11695
+ ...noPureBlackBackground,
11696
+ framework: "global",
11697
+ category: "Architecture"
11698
+ }
11066
11699
  },
11067
- "no-react-dom-deprecated-apis": {
11068
- ...noReactDomDeprecatedApis,
11700
+ {
11701
+ key: "react-doctor/no-react-dom-deprecated-apis",
11702
+ id: "no-react-dom-deprecated-apis",
11703
+ source: "react-doctor",
11069
11704
  framework: "global",
11070
- category: "Architecture"
11705
+ category: "Architecture",
11706
+ severity: "warn",
11707
+ rule: {
11708
+ ...noReactDomDeprecatedApis,
11709
+ framework: "global",
11710
+ category: "Architecture"
11711
+ }
11071
11712
  },
11072
- "no-react19-deprecated-apis": {
11073
- ...noReact19DeprecatedApis,
11713
+ {
11714
+ key: "react-doctor/no-react19-deprecated-apis",
11715
+ id: "no-react19-deprecated-apis",
11716
+ source: "react-doctor",
11074
11717
  framework: "global",
11075
- category: "Architecture"
11718
+ category: "Architecture",
11719
+ severity: "warn",
11720
+ rule: {
11721
+ ...noReact19DeprecatedApis,
11722
+ framework: "global",
11723
+ category: "Architecture"
11724
+ }
11076
11725
  },
11077
- "no-render-in-render": {
11078
- ...noRenderInRender,
11726
+ {
11727
+ key: "react-doctor/no-render-in-render",
11728
+ id: "no-render-in-render",
11729
+ source: "react-doctor",
11079
11730
  framework: "global",
11080
- category: "Architecture"
11731
+ category: "Architecture",
11732
+ severity: "warn",
11733
+ rule: {
11734
+ ...noRenderInRender,
11735
+ framework: "global",
11736
+ category: "Architecture"
11737
+ }
11081
11738
  },
11082
- "no-render-prop-children": {
11083
- ...noRenderPropChildren,
11739
+ {
11740
+ key: "react-doctor/no-render-prop-children",
11741
+ id: "no-render-prop-children",
11742
+ source: "react-doctor",
11084
11743
  framework: "global",
11085
- category: "Architecture"
11744
+ category: "Architecture",
11745
+ severity: "warn",
11746
+ rule: {
11747
+ ...noRenderPropChildren,
11748
+ framework: "global",
11749
+ category: "Architecture"
11750
+ }
11086
11751
  },
11087
- "no-scale-from-zero": {
11088
- ...noScaleFromZero,
11752
+ {
11753
+ key: "react-doctor/no-scale-from-zero",
11754
+ id: "no-scale-from-zero",
11755
+ source: "react-doctor",
11089
11756
  framework: "global",
11090
- category: "Performance"
11757
+ category: "Performance",
11758
+ severity: "warn",
11759
+ rule: {
11760
+ ...noScaleFromZero,
11761
+ framework: "global",
11762
+ category: "Performance"
11763
+ }
11091
11764
  },
11092
- "no-secrets-in-client-code": {
11093
- ...noSecretsInClientCode,
11765
+ {
11766
+ key: "react-doctor/no-secrets-in-client-code",
11767
+ id: "no-secrets-in-client-code",
11768
+ source: "react-doctor",
11094
11769
  framework: "global",
11095
- category: "Security"
11770
+ category: "Security",
11771
+ severity: "warn",
11772
+ rule: {
11773
+ ...noSecretsInClientCode,
11774
+ framework: "global",
11775
+ category: "Security"
11776
+ }
11096
11777
  },
11097
- "no-set-state-in-render": {
11098
- ...noSetStateInRender,
11778
+ {
11779
+ key: "react-doctor/no-set-state-in-render",
11780
+ id: "no-set-state-in-render",
11781
+ source: "react-doctor",
11099
11782
  framework: "global",
11100
- category: "State & Effects"
11783
+ category: "State & Effects",
11784
+ severity: "warn",
11785
+ rule: {
11786
+ ...noSetStateInRender,
11787
+ framework: "global",
11788
+ category: "State & Effects"
11789
+ }
11101
11790
  },
11102
- "no-side-tab-border": {
11103
- ...noSideTabBorder,
11791
+ {
11792
+ key: "react-doctor/no-side-tab-border",
11793
+ id: "no-side-tab-border",
11794
+ source: "react-doctor",
11104
11795
  framework: "global",
11105
- category: "Architecture"
11796
+ category: "Architecture",
11797
+ severity: "warn",
11798
+ rule: {
11799
+ ...noSideTabBorder,
11800
+ framework: "global",
11801
+ category: "Architecture"
11802
+ }
11106
11803
  },
11107
- "no-tiny-text": {
11108
- ...noTinyText,
11804
+ {
11805
+ key: "react-doctor/no-tiny-text",
11806
+ id: "no-tiny-text",
11807
+ source: "react-doctor",
11109
11808
  framework: "global",
11110
- category: "Accessibility"
11809
+ category: "Accessibility",
11810
+ severity: "warn",
11811
+ rule: {
11812
+ ...noTinyText,
11813
+ framework: "global",
11814
+ category: "Accessibility"
11815
+ }
11111
11816
  },
11112
- "no-transition-all": {
11113
- ...noTransitionAll,
11817
+ {
11818
+ key: "react-doctor/no-transition-all",
11819
+ id: "no-transition-all",
11820
+ source: "react-doctor",
11114
11821
  framework: "global",
11115
- category: "Performance"
11822
+ category: "Performance",
11823
+ severity: "warn",
11824
+ rule: {
11825
+ ...noTransitionAll,
11826
+ framework: "global",
11827
+ category: "Performance"
11828
+ }
11116
11829
  },
11117
- "no-uncontrolled-input": {
11118
- ...noUncontrolledInput,
11830
+ {
11831
+ key: "react-doctor/no-uncontrolled-input",
11832
+ id: "no-uncontrolled-input",
11833
+ source: "react-doctor",
11119
11834
  framework: "global",
11120
- category: "Correctness"
11835
+ category: "Correctness",
11836
+ severity: "warn",
11837
+ rule: {
11838
+ ...noUncontrolledInput,
11839
+ framework: "global",
11840
+ category: "Correctness"
11841
+ }
11121
11842
  },
11122
- "no-undeferred-third-party": {
11123
- ...noUndeferredThirdParty,
11843
+ {
11844
+ key: "react-doctor/no-undeferred-third-party",
11845
+ id: "no-undeferred-third-party",
11846
+ source: "react-doctor",
11124
11847
  framework: "global",
11125
- category: "Bundle Size"
11848
+ category: "Bundle Size",
11849
+ severity: "warn",
11850
+ rule: {
11851
+ ...noUndeferredThirdParty,
11852
+ framework: "global",
11853
+ category: "Bundle Size"
11854
+ }
11126
11855
  },
11127
- "no-usememo-simple-expression": {
11128
- ...noUsememoSimpleExpression,
11856
+ {
11857
+ key: "react-doctor/no-usememo-simple-expression",
11858
+ id: "no-usememo-simple-expression",
11859
+ source: "react-doctor",
11129
11860
  framework: "global",
11130
- category: "Performance"
11861
+ category: "Performance",
11862
+ severity: "warn",
11863
+ rule: {
11864
+ ...noUsememoSimpleExpression,
11865
+ framework: "global",
11866
+ category: "Performance"
11867
+ }
11131
11868
  },
11132
- "no-wide-letter-spacing": {
11133
- ...noWideLetterSpacing,
11869
+ {
11870
+ key: "react-doctor/no-wide-letter-spacing",
11871
+ id: "no-wide-letter-spacing",
11872
+ source: "react-doctor",
11134
11873
  framework: "global",
11135
- category: "Architecture"
11874
+ category: "Architecture",
11875
+ severity: "warn",
11876
+ rule: {
11877
+ ...noWideLetterSpacing,
11878
+ framework: "global",
11879
+ category: "Architecture"
11880
+ }
11136
11881
  },
11137
- "no-z-index-9999": {
11138
- ...noZIndex9999,
11882
+ {
11883
+ key: "react-doctor/no-z-index-9999",
11884
+ id: "no-z-index-9999",
11885
+ source: "react-doctor",
11139
11886
  framework: "global",
11140
- category: "Architecture"
11887
+ category: "Architecture",
11888
+ severity: "warn",
11889
+ rule: {
11890
+ ...noZIndex9999,
11891
+ framework: "global",
11892
+ category: "Architecture"
11893
+ }
11141
11894
  },
11142
- "prefer-dynamic-import": {
11143
- ...preferDynamicImport,
11895
+ {
11896
+ key: "react-doctor/prefer-dynamic-import",
11897
+ id: "prefer-dynamic-import",
11898
+ source: "react-doctor",
11144
11899
  framework: "global",
11145
- category: "Bundle Size"
11900
+ category: "Bundle Size",
11901
+ severity: "warn",
11902
+ rule: {
11903
+ ...preferDynamicImport,
11904
+ framework: "global",
11905
+ category: "Bundle Size"
11906
+ }
11146
11907
  },
11147
- "prefer-use-effect-event": {
11148
- ...preferUseEffectEvent,
11908
+ {
11909
+ key: "react-doctor/prefer-use-effect-event",
11910
+ id: "prefer-use-effect-event",
11911
+ source: "react-doctor",
11149
11912
  framework: "global",
11150
- category: "State & Effects"
11913
+ category: "State & Effects",
11914
+ severity: "warn",
11915
+ rule: {
11916
+ ...preferUseEffectEvent,
11917
+ framework: "global",
11918
+ category: "State & Effects"
11919
+ }
11151
11920
  },
11152
- "prefer-use-sync-external-store": {
11153
- ...preferUseSyncExternalStore,
11921
+ {
11922
+ key: "react-doctor/prefer-use-sync-external-store",
11923
+ id: "prefer-use-sync-external-store",
11924
+ source: "react-doctor",
11154
11925
  framework: "global",
11155
- category: "State & Effects"
11926
+ category: "State & Effects",
11927
+ severity: "warn",
11928
+ rule: {
11929
+ ...preferUseSyncExternalStore,
11930
+ framework: "global",
11931
+ category: "State & Effects"
11932
+ }
11156
11933
  },
11157
- "prefer-useReducer": {
11158
- ...preferUseReducer,
11934
+ {
11935
+ key: "react-doctor/prefer-useReducer",
11936
+ id: "prefer-useReducer",
11937
+ source: "react-doctor",
11159
11938
  framework: "global",
11160
- category: "State & Effects"
11939
+ category: "State & Effects",
11940
+ severity: "warn",
11941
+ rule: {
11942
+ ...preferUseReducer,
11943
+ framework: "global",
11944
+ category: "State & Effects"
11945
+ }
11161
11946
  },
11162
- "query-mutation-missing-invalidation": {
11163
- ...queryMutationMissingInvalidation,
11947
+ {
11948
+ key: "react-doctor/query-mutation-missing-invalidation",
11949
+ id: "query-mutation-missing-invalidation",
11950
+ source: "react-doctor",
11164
11951
  framework: "tanstack-query",
11165
- category: "TanStack Query"
11952
+ category: "TanStack Query",
11953
+ severity: "warn",
11954
+ rule: {
11955
+ ...queryMutationMissingInvalidation,
11956
+ framework: "tanstack-query",
11957
+ category: "TanStack Query"
11958
+ }
11166
11959
  },
11167
- "query-no-query-in-effect": {
11168
- ...queryNoQueryInEffect,
11960
+ {
11961
+ key: "react-doctor/query-no-query-in-effect",
11962
+ id: "query-no-query-in-effect",
11963
+ source: "react-doctor",
11169
11964
  framework: "tanstack-query",
11170
- category: "TanStack Query"
11965
+ category: "TanStack Query",
11966
+ severity: "warn",
11967
+ rule: {
11968
+ ...queryNoQueryInEffect,
11969
+ framework: "tanstack-query",
11970
+ category: "TanStack Query"
11971
+ }
11171
11972
  },
11172
- "query-no-rest-destructuring": {
11173
- ...queryNoRestDestructuring,
11973
+ {
11974
+ key: "react-doctor/query-no-rest-destructuring",
11975
+ id: "query-no-rest-destructuring",
11976
+ source: "react-doctor",
11174
11977
  framework: "tanstack-query",
11175
- category: "TanStack Query"
11978
+ category: "TanStack Query",
11979
+ severity: "warn",
11980
+ rule: {
11981
+ ...queryNoRestDestructuring,
11982
+ framework: "tanstack-query",
11983
+ category: "TanStack Query"
11984
+ }
11176
11985
  },
11177
- "query-no-usequery-for-mutation": {
11178
- ...queryNoUseQueryForMutation,
11986
+ {
11987
+ key: "react-doctor/query-no-usequery-for-mutation",
11988
+ id: "query-no-usequery-for-mutation",
11989
+ source: "react-doctor",
11179
11990
  framework: "tanstack-query",
11180
- category: "TanStack Query"
11991
+ category: "TanStack Query",
11992
+ severity: "warn",
11993
+ rule: {
11994
+ ...queryNoUseQueryForMutation,
11995
+ framework: "tanstack-query",
11996
+ category: "TanStack Query"
11997
+ }
11181
11998
  },
11182
- "query-no-void-query-fn": {
11183
- ...queryNoVoidQueryFn,
11999
+ {
12000
+ key: "react-doctor/query-no-void-query-fn",
12001
+ id: "query-no-void-query-fn",
12002
+ source: "react-doctor",
11184
12003
  framework: "tanstack-query",
11185
- category: "TanStack Query"
12004
+ category: "TanStack Query",
12005
+ severity: "warn",
12006
+ rule: {
12007
+ ...queryNoVoidQueryFn,
12008
+ framework: "tanstack-query",
12009
+ category: "TanStack Query"
12010
+ }
11186
12011
  },
11187
- "query-stable-query-client": {
11188
- ...queryStableQueryClient,
12012
+ {
12013
+ key: "react-doctor/query-stable-query-client",
12014
+ id: "query-stable-query-client",
12015
+ source: "react-doctor",
11189
12016
  framework: "tanstack-query",
11190
- category: "TanStack Query"
12017
+ category: "TanStack Query",
12018
+ severity: "warn",
12019
+ rule: {
12020
+ ...queryStableQueryClient,
12021
+ framework: "tanstack-query",
12022
+ category: "TanStack Query"
12023
+ }
11191
12024
  },
11192
- "react-compiler-destructure-method": {
11193
- ...reactCompilerDestructureMethod,
12025
+ {
12026
+ key: "react-doctor/react-compiler-destructure-method",
12027
+ id: "react-compiler-destructure-method",
12028
+ source: "react-doctor",
11194
12029
  framework: "global",
11195
- category: "Architecture"
12030
+ category: "Architecture",
12031
+ severity: "warn",
12032
+ rule: {
12033
+ ...reactCompilerDestructureMethod,
12034
+ framework: "global",
12035
+ category: "Architecture"
12036
+ }
11196
12037
  },
11197
- "rendering-animate-svg-wrapper": {
11198
- ...renderingAnimateSvgWrapper,
12038
+ {
12039
+ key: "react-doctor/rendering-animate-svg-wrapper",
12040
+ id: "rendering-animate-svg-wrapper",
12041
+ source: "react-doctor",
11199
12042
  framework: "global",
11200
- category: "Performance"
12043
+ category: "Performance",
12044
+ severity: "warn",
12045
+ rule: {
12046
+ ...renderingAnimateSvgWrapper,
12047
+ framework: "global",
12048
+ category: "Performance"
12049
+ }
11201
12050
  },
11202
- "rendering-conditional-render": {
11203
- ...renderingConditionalRender,
12051
+ {
12052
+ key: "react-doctor/rendering-conditional-render",
12053
+ id: "rendering-conditional-render",
12054
+ source: "react-doctor",
11204
12055
  framework: "global",
11205
- category: "Correctness"
12056
+ category: "Correctness",
12057
+ severity: "warn",
12058
+ rule: {
12059
+ ...renderingConditionalRender,
12060
+ framework: "global",
12061
+ category: "Correctness"
12062
+ }
11206
12063
  },
11207
- "rendering-hoist-jsx": {
11208
- ...renderingHoistJsx,
12064
+ {
12065
+ key: "react-doctor/rendering-hoist-jsx",
12066
+ id: "rendering-hoist-jsx",
12067
+ source: "react-doctor",
11209
12068
  framework: "global",
11210
- category: "Performance"
12069
+ category: "Performance",
12070
+ severity: "warn",
12071
+ rule: {
12072
+ ...renderingHoistJsx,
12073
+ framework: "global",
12074
+ category: "Performance"
12075
+ }
11211
12076
  },
11212
- "rendering-hydration-mismatch-time": {
11213
- ...renderingHydrationMismatchTime,
12077
+ {
12078
+ key: "react-doctor/rendering-hydration-mismatch-time",
12079
+ id: "rendering-hydration-mismatch-time",
12080
+ source: "react-doctor",
11214
12081
  framework: "global",
11215
- category: "Correctness"
12082
+ category: "Correctness",
12083
+ severity: "warn",
12084
+ rule: {
12085
+ ...renderingHydrationMismatchTime,
12086
+ framework: "global",
12087
+ category: "Correctness"
12088
+ }
11216
12089
  },
11217
- "rendering-hydration-no-flicker": {
11218
- ...renderingHydrationNoFlicker,
12090
+ {
12091
+ key: "react-doctor/rendering-hydration-no-flicker",
12092
+ id: "rendering-hydration-no-flicker",
12093
+ source: "react-doctor",
11219
12094
  framework: "global",
11220
- category: "Performance"
12095
+ category: "Performance",
12096
+ severity: "warn",
12097
+ rule: {
12098
+ ...renderingHydrationNoFlicker,
12099
+ framework: "global",
12100
+ category: "Performance"
12101
+ }
11221
12102
  },
11222
- "rendering-script-defer-async": {
11223
- ...renderingScriptDeferAsync,
12103
+ {
12104
+ key: "react-doctor/rendering-script-defer-async",
12105
+ id: "rendering-script-defer-async",
12106
+ source: "react-doctor",
11224
12107
  framework: "global",
11225
- category: "Performance"
12108
+ category: "Performance",
12109
+ severity: "warn",
12110
+ rule: {
12111
+ ...renderingScriptDeferAsync,
12112
+ framework: "global",
12113
+ category: "Performance"
12114
+ }
11226
12115
  },
11227
- "rendering-svg-precision": {
11228
- ...renderingSvgPrecision,
12116
+ {
12117
+ key: "react-doctor/rendering-svg-precision",
12118
+ id: "rendering-svg-precision",
12119
+ source: "react-doctor",
11229
12120
  framework: "global",
11230
- category: "Performance"
12121
+ category: "Performance",
12122
+ severity: "warn",
12123
+ rule: {
12124
+ ...renderingSvgPrecision,
12125
+ framework: "global",
12126
+ category: "Performance"
12127
+ }
11231
12128
  },
11232
- "rendering-usetransition-loading": {
11233
- ...renderingUsetransitionLoading,
12129
+ {
12130
+ key: "react-doctor/rendering-usetransition-loading",
12131
+ id: "rendering-usetransition-loading",
12132
+ source: "react-doctor",
11234
12133
  framework: "global",
11235
- category: "Performance"
12134
+ category: "Performance",
12135
+ severity: "warn",
12136
+ rule: {
12137
+ ...renderingUsetransitionLoading,
12138
+ framework: "global",
12139
+ category: "Performance"
12140
+ }
11236
12141
  },
11237
- "rerender-defer-reads-hook": {
11238
- ...rerenderDeferReadsHook,
12142
+ {
12143
+ key: "react-doctor/rerender-defer-reads-hook",
12144
+ id: "rerender-defer-reads-hook",
12145
+ source: "react-doctor",
11239
12146
  framework: "global",
11240
- category: "Performance"
12147
+ category: "Performance",
12148
+ severity: "warn",
12149
+ rule: {
12150
+ ...rerenderDeferReadsHook,
12151
+ framework: "global",
12152
+ category: "Performance"
12153
+ }
11241
12154
  },
11242
- "rerender-dependencies": {
11243
- ...rerenderDependencies,
12155
+ {
12156
+ key: "react-doctor/rerender-dependencies",
12157
+ id: "rerender-dependencies",
12158
+ source: "react-doctor",
11244
12159
  framework: "global",
11245
- category: "State & Effects"
12160
+ category: "State & Effects",
12161
+ severity: "error",
12162
+ rule: {
12163
+ ...rerenderDependencies,
12164
+ framework: "global",
12165
+ category: "State & Effects"
12166
+ }
11246
12167
  },
11247
- "rerender-derived-state-from-hook": {
11248
- ...rerenderDerivedStateFromHook,
12168
+ {
12169
+ key: "react-doctor/rerender-derived-state-from-hook",
12170
+ id: "rerender-derived-state-from-hook",
12171
+ source: "react-doctor",
11249
12172
  framework: "global",
11250
- category: "Performance"
12173
+ category: "Performance",
12174
+ severity: "warn",
12175
+ rule: {
12176
+ ...rerenderDerivedStateFromHook,
12177
+ framework: "global",
12178
+ category: "Performance"
12179
+ }
11251
12180
  },
11252
- "rerender-functional-setstate": {
11253
- ...rerenderFunctionalSetstate,
12181
+ {
12182
+ key: "react-doctor/rerender-functional-setstate",
12183
+ id: "rerender-functional-setstate",
12184
+ source: "react-doctor",
11254
12185
  framework: "global",
11255
- category: "Performance"
12186
+ category: "Performance",
12187
+ severity: "warn",
12188
+ rule: {
12189
+ ...rerenderFunctionalSetstate,
12190
+ framework: "global",
12191
+ category: "Performance"
12192
+ }
11256
12193
  },
11257
- "rerender-lazy-state-init": {
11258
- ...rerenderLazyStateInit,
12194
+ {
12195
+ key: "react-doctor/rerender-lazy-state-init",
12196
+ id: "rerender-lazy-state-init",
12197
+ source: "react-doctor",
11259
12198
  framework: "global",
11260
- category: "Performance"
12199
+ category: "Performance",
12200
+ severity: "warn",
12201
+ rule: {
12202
+ ...rerenderLazyStateInit,
12203
+ framework: "global",
12204
+ category: "Performance"
12205
+ }
11261
12206
  },
11262
- "rerender-memo-before-early-return": {
11263
- ...rerenderMemoBeforeEarlyReturn,
12207
+ {
12208
+ key: "react-doctor/rerender-memo-before-early-return",
12209
+ id: "rerender-memo-before-early-return",
12210
+ source: "react-doctor",
11264
12211
  framework: "global",
11265
- category: "Performance"
12212
+ category: "Performance",
12213
+ severity: "warn",
12214
+ rule: {
12215
+ ...rerenderMemoBeforeEarlyReturn,
12216
+ framework: "global",
12217
+ category: "Performance"
12218
+ }
11266
12219
  },
11267
- "rerender-memo-with-default-value": {
11268
- ...rerenderMemoWithDefaultValue,
12220
+ {
12221
+ key: "react-doctor/rerender-memo-with-default-value",
12222
+ id: "rerender-memo-with-default-value",
12223
+ source: "react-doctor",
11269
12224
  framework: "global",
11270
- category: "Performance"
12225
+ category: "Performance",
12226
+ severity: "warn",
12227
+ rule: {
12228
+ ...rerenderMemoWithDefaultValue,
12229
+ framework: "global",
12230
+ category: "Performance"
12231
+ }
11271
12232
  },
11272
- "rerender-state-only-in-handlers": {
11273
- ...rerenderStateOnlyInHandlers,
12233
+ {
12234
+ key: "react-doctor/rerender-state-only-in-handlers",
12235
+ id: "rerender-state-only-in-handlers",
12236
+ source: "react-doctor",
11274
12237
  framework: "global",
11275
- category: "Performance"
12238
+ category: "Performance",
12239
+ severity: "warn",
12240
+ rule: {
12241
+ ...rerenderStateOnlyInHandlers,
12242
+ framework: "global",
12243
+ category: "Performance"
12244
+ }
11276
12245
  },
11277
- "rerender-transitions-scroll": {
11278
- ...rerenderTransitionsScroll,
12246
+ {
12247
+ key: "react-doctor/rerender-transitions-scroll",
12248
+ id: "rerender-transitions-scroll",
12249
+ source: "react-doctor",
11279
12250
  framework: "global",
11280
- category: "Performance"
12251
+ category: "Performance",
12252
+ severity: "warn",
12253
+ rule: {
12254
+ ...rerenderTransitionsScroll,
12255
+ framework: "global",
12256
+ category: "Performance"
12257
+ }
11281
12258
  },
11282
- "rn-animate-layout-property": {
11283
- ...rnAnimateLayoutProperty,
12259
+ {
12260
+ key: "react-doctor/rn-animate-layout-property",
12261
+ id: "rn-animate-layout-property",
12262
+ source: "react-doctor",
11284
12263
  framework: "react-native",
11285
- category: "React Native"
12264
+ category: "React Native",
12265
+ severity: "error",
12266
+ rule: {
12267
+ ...rnAnimateLayoutProperty,
12268
+ framework: "react-native",
12269
+ category: "React Native",
12270
+ tags: [...new Set(["react-native", ...rnAnimateLayoutProperty.tags ?? []])]
12271
+ }
11286
12272
  },
11287
- "rn-animation-reaction-as-derived": {
11288
- ...rnAnimationReactionAsDerived,
12273
+ {
12274
+ key: "react-doctor/rn-animation-reaction-as-derived",
12275
+ id: "rn-animation-reaction-as-derived",
12276
+ source: "react-doctor",
11289
12277
  framework: "react-native",
11290
- category: "React Native"
12278
+ category: "React Native",
12279
+ severity: "warn",
12280
+ rule: {
12281
+ ...rnAnimationReactionAsDerived,
12282
+ framework: "react-native",
12283
+ category: "React Native",
12284
+ tags: [...new Set(["react-native", ...rnAnimationReactionAsDerived.tags ?? []])]
12285
+ }
11291
12286
  },
11292
- "rn-bottom-sheet-prefer-native": {
11293
- ...rnBottomSheetPreferNative,
12287
+ {
12288
+ key: "react-doctor/rn-bottom-sheet-prefer-native",
12289
+ id: "rn-bottom-sheet-prefer-native",
12290
+ source: "react-doctor",
11294
12291
  framework: "react-native",
11295
- category: "React Native"
12292
+ category: "React Native",
12293
+ severity: "warn",
12294
+ rule: {
12295
+ ...rnBottomSheetPreferNative,
12296
+ framework: "react-native",
12297
+ category: "React Native",
12298
+ tags: [...new Set(["react-native", ...rnBottomSheetPreferNative.tags ?? []])]
12299
+ }
11296
12300
  },
11297
- "rn-list-callback-per-row": {
11298
- ...rnListCallbackPerRow,
12301
+ {
12302
+ key: "react-doctor/rn-list-callback-per-row",
12303
+ id: "rn-list-callback-per-row",
12304
+ source: "react-doctor",
11299
12305
  framework: "react-native",
11300
- category: "React Native"
12306
+ category: "React Native",
12307
+ severity: "warn",
12308
+ rule: {
12309
+ ...rnListCallbackPerRow,
12310
+ framework: "react-native",
12311
+ category: "React Native",
12312
+ tags: [...new Set(["react-native", ...rnListCallbackPerRow.tags ?? []])]
12313
+ }
11301
12314
  },
11302
- "rn-list-data-mapped": {
11303
- ...rnListDataMapped,
12315
+ {
12316
+ key: "react-doctor/rn-list-data-mapped",
12317
+ id: "rn-list-data-mapped",
12318
+ source: "react-doctor",
11304
12319
  framework: "react-native",
11305
- category: "React Native"
12320
+ category: "React Native",
12321
+ severity: "warn",
12322
+ rule: {
12323
+ ...rnListDataMapped,
12324
+ framework: "react-native",
12325
+ category: "React Native",
12326
+ tags: [...new Set(["react-native", ...rnListDataMapped.tags ?? []])]
12327
+ }
11306
12328
  },
11307
- "rn-list-recyclable-without-types": {
11308
- ...rnListRecyclableWithoutTypes,
12329
+ {
12330
+ key: "react-doctor/rn-list-recyclable-without-types",
12331
+ id: "rn-list-recyclable-without-types",
12332
+ source: "react-doctor",
11309
12333
  framework: "react-native",
11310
- category: "React Native"
12334
+ category: "React Native",
12335
+ severity: "warn",
12336
+ rule: {
12337
+ ...rnListRecyclableWithoutTypes,
12338
+ framework: "react-native",
12339
+ category: "React Native",
12340
+ tags: [...new Set(["react-native", ...rnListRecyclableWithoutTypes.tags ?? []])]
12341
+ }
11311
12342
  },
11312
- "rn-no-deprecated-modules": {
11313
- ...rnNoDeprecatedModules,
12343
+ {
12344
+ key: "react-doctor/rn-no-deprecated-modules",
12345
+ id: "rn-no-deprecated-modules",
12346
+ source: "react-doctor",
11314
12347
  framework: "react-native",
11315
- category: "React Native"
12348
+ category: "React Native",
12349
+ severity: "error",
12350
+ rule: {
12351
+ ...rnNoDeprecatedModules,
12352
+ framework: "react-native",
12353
+ category: "React Native",
12354
+ tags: [...new Set(["react-native", ...rnNoDeprecatedModules.tags ?? []])]
12355
+ }
11316
12356
  },
11317
- "rn-no-dimensions-get": {
11318
- ...rnNoDimensionsGet,
12357
+ {
12358
+ key: "react-doctor/rn-no-dimensions-get",
12359
+ id: "rn-no-dimensions-get",
12360
+ source: "react-doctor",
11319
12361
  framework: "react-native",
11320
- category: "React Native"
12362
+ category: "React Native",
12363
+ severity: "warn",
12364
+ rule: {
12365
+ ...rnNoDimensionsGet,
12366
+ framework: "react-native",
12367
+ category: "React Native",
12368
+ tags: [...new Set(["react-native", ...rnNoDimensionsGet.tags ?? []])]
12369
+ }
11321
12370
  },
11322
- "rn-no-inline-flatlist-renderitem": {
11323
- ...rnNoInlineFlatlistRenderitem,
12371
+ {
12372
+ key: "react-doctor/rn-no-inline-flatlist-renderitem",
12373
+ id: "rn-no-inline-flatlist-renderitem",
12374
+ source: "react-doctor",
11324
12375
  framework: "react-native",
11325
- category: "React Native"
12376
+ category: "React Native",
12377
+ severity: "warn",
12378
+ rule: {
12379
+ ...rnNoInlineFlatlistRenderitem,
12380
+ framework: "react-native",
12381
+ category: "React Native",
12382
+ tags: [...new Set(["react-native", ...rnNoInlineFlatlistRenderitem.tags ?? []])]
12383
+ }
11326
12384
  },
11327
- "rn-no-inline-object-in-list-item": {
11328
- ...rnNoInlineObjectInListItem,
12385
+ {
12386
+ key: "react-doctor/rn-no-inline-object-in-list-item",
12387
+ id: "rn-no-inline-object-in-list-item",
12388
+ source: "react-doctor",
11329
12389
  framework: "react-native",
11330
- category: "React Native"
12390
+ category: "React Native",
12391
+ severity: "warn",
12392
+ rule: {
12393
+ ...rnNoInlineObjectInListItem,
12394
+ framework: "react-native",
12395
+ category: "React Native",
12396
+ tags: [...new Set(["react-native", ...rnNoInlineObjectInListItem.tags ?? []])]
12397
+ }
11331
12398
  },
11332
- "rn-no-legacy-expo-packages": {
11333
- ...rnNoLegacyExpoPackages,
12399
+ {
12400
+ key: "react-doctor/rn-no-legacy-expo-packages",
12401
+ id: "rn-no-legacy-expo-packages",
12402
+ source: "react-doctor",
11334
12403
  framework: "react-native",
11335
- category: "React Native"
12404
+ category: "React Native",
12405
+ severity: "warn",
12406
+ rule: {
12407
+ ...rnNoLegacyExpoPackages,
12408
+ framework: "react-native",
12409
+ category: "React Native",
12410
+ tags: [...new Set(["react-native", ...rnNoLegacyExpoPackages.tags ?? []])]
12411
+ }
11336
12412
  },
11337
- "rn-no-legacy-shadow-styles": {
11338
- ...rnNoLegacyShadowStyles,
12413
+ {
12414
+ key: "react-doctor/rn-no-legacy-shadow-styles",
12415
+ id: "rn-no-legacy-shadow-styles",
12416
+ source: "react-doctor",
11339
12417
  framework: "react-native",
11340
- category: "React Native"
12418
+ category: "React Native",
12419
+ severity: "warn",
12420
+ rule: {
12421
+ ...rnNoLegacyShadowStyles,
12422
+ framework: "react-native",
12423
+ category: "React Native",
12424
+ tags: [...new Set(["react-native", ...rnNoLegacyShadowStyles.tags ?? []])]
12425
+ }
11341
12426
  },
11342
- "rn-no-non-native-navigator": {
11343
- ...rnNoNonNativeNavigator,
12427
+ {
12428
+ key: "react-doctor/rn-no-non-native-navigator",
12429
+ id: "rn-no-non-native-navigator",
12430
+ source: "react-doctor",
11344
12431
  framework: "react-native",
11345
- category: "React Native"
12432
+ category: "React Native",
12433
+ severity: "warn",
12434
+ rule: {
12435
+ ...rnNoNonNativeNavigator,
12436
+ framework: "react-native",
12437
+ category: "React Native",
12438
+ tags: [...new Set(["react-native", ...rnNoNonNativeNavigator.tags ?? []])]
12439
+ }
11346
12440
  },
11347
- "rn-no-raw-text": {
11348
- ...rnNoRawText,
12441
+ {
12442
+ key: "react-doctor/rn-no-raw-text",
12443
+ id: "rn-no-raw-text",
12444
+ source: "react-doctor",
11349
12445
  framework: "react-native",
11350
- category: "React Native"
12446
+ category: "React Native",
12447
+ severity: "error",
12448
+ rule: {
12449
+ ...rnNoRawText,
12450
+ framework: "react-native",
12451
+ category: "React Native",
12452
+ tags: [...new Set(["react-native", ...rnNoRawText.tags ?? []])]
12453
+ }
11351
12454
  },
11352
- "rn-no-scroll-state": {
11353
- ...rnNoScrollState,
12455
+ {
12456
+ key: "react-doctor/rn-no-scroll-state",
12457
+ id: "rn-no-scroll-state",
12458
+ source: "react-doctor",
11354
12459
  framework: "react-native",
11355
- category: "React Native"
12460
+ category: "React Native",
12461
+ severity: "error",
12462
+ rule: {
12463
+ ...rnNoScrollState,
12464
+ framework: "react-native",
12465
+ category: "React Native",
12466
+ tags: [...new Set(["react-native", ...rnNoScrollState.tags ?? []])]
12467
+ }
11356
12468
  },
11357
- "rn-no-scrollview-mapped-list": {
11358
- ...rnNoScrollviewMappedList,
12469
+ {
12470
+ key: "react-doctor/rn-no-scrollview-mapped-list",
12471
+ id: "rn-no-scrollview-mapped-list",
12472
+ source: "react-doctor",
11359
12473
  framework: "react-native",
11360
- category: "React Native"
12474
+ category: "React Native",
12475
+ severity: "warn",
12476
+ rule: {
12477
+ ...rnNoScrollviewMappedList,
12478
+ framework: "react-native",
12479
+ category: "React Native",
12480
+ tags: [...new Set(["react-native", ...rnNoScrollviewMappedList.tags ?? []])]
12481
+ }
11361
12482
  },
11362
- "rn-no-single-element-style-array": {
11363
- ...rnNoSingleElementStyleArray,
12483
+ {
12484
+ key: "react-doctor/rn-no-single-element-style-array",
12485
+ id: "rn-no-single-element-style-array",
12486
+ source: "react-doctor",
11364
12487
  framework: "react-native",
11365
- category: "React Native"
12488
+ category: "React Native",
12489
+ severity: "warn",
12490
+ rule: {
12491
+ ...rnNoSingleElementStyleArray,
12492
+ framework: "react-native",
12493
+ category: "React Native",
12494
+ tags: [...new Set(["react-native", ...rnNoSingleElementStyleArray.tags ?? []])]
12495
+ }
11366
12496
  },
11367
- "rn-prefer-content-inset-adjustment": {
11368
- ...rnPreferContentInsetAdjustment,
12497
+ {
12498
+ key: "react-doctor/rn-prefer-content-inset-adjustment",
12499
+ id: "rn-prefer-content-inset-adjustment",
12500
+ source: "react-doctor",
11369
12501
  framework: "react-native",
11370
- category: "React Native"
12502
+ category: "React Native",
12503
+ severity: "warn",
12504
+ rule: {
12505
+ ...rnPreferContentInsetAdjustment,
12506
+ framework: "react-native",
12507
+ category: "React Native",
12508
+ tags: [...new Set(["react-native", ...rnPreferContentInsetAdjustment.tags ?? []])]
12509
+ }
11371
12510
  },
11372
- "rn-prefer-expo-image": {
11373
- ...rnPreferExpoImage,
12511
+ {
12512
+ key: "react-doctor/rn-prefer-expo-image",
12513
+ id: "rn-prefer-expo-image",
12514
+ source: "react-doctor",
11374
12515
  framework: "react-native",
11375
- category: "React Native"
12516
+ category: "React Native",
12517
+ severity: "warn",
12518
+ rule: {
12519
+ ...rnPreferExpoImage,
12520
+ framework: "react-native",
12521
+ category: "React Native",
12522
+ tags: [...new Set(["react-native", ...rnPreferExpoImage.tags ?? []])]
12523
+ }
11376
12524
  },
11377
- "rn-prefer-pressable": {
11378
- ...rnPreferPressable,
12525
+ {
12526
+ key: "react-doctor/rn-prefer-pressable",
12527
+ id: "rn-prefer-pressable",
12528
+ source: "react-doctor",
11379
12529
  framework: "react-native",
11380
- category: "React Native"
12530
+ category: "React Native",
12531
+ severity: "warn",
12532
+ rule: {
12533
+ ...rnPreferPressable,
12534
+ framework: "react-native",
12535
+ category: "React Native",
12536
+ tags: [...new Set(["react-native", ...rnPreferPressable.tags ?? []])]
12537
+ }
11381
12538
  },
11382
- "rn-prefer-reanimated": {
11383
- ...rnPreferReanimated,
12539
+ {
12540
+ key: "react-doctor/rn-prefer-reanimated",
12541
+ id: "rn-prefer-reanimated",
12542
+ source: "react-doctor",
11384
12543
  framework: "react-native",
11385
- category: "React Native"
12544
+ category: "React Native",
12545
+ severity: "warn",
12546
+ rule: {
12547
+ ...rnPreferReanimated,
12548
+ framework: "react-native",
12549
+ category: "React Native",
12550
+ tags: [...new Set(["react-native", ...rnPreferReanimated.tags ?? []])]
12551
+ }
11386
12552
  },
11387
- "rn-pressable-shared-value-mutation": {
11388
- ...rnPressableSharedValueMutation,
12553
+ {
12554
+ key: "react-doctor/rn-pressable-shared-value-mutation",
12555
+ id: "rn-pressable-shared-value-mutation",
12556
+ source: "react-doctor",
11389
12557
  framework: "react-native",
11390
- category: "React Native"
12558
+ category: "React Native",
12559
+ severity: "warn",
12560
+ rule: {
12561
+ ...rnPressableSharedValueMutation,
12562
+ framework: "react-native",
12563
+ category: "React Native",
12564
+ tags: [...new Set(["react-native", ...rnPressableSharedValueMutation.tags ?? []])]
12565
+ }
11391
12566
  },
11392
- "rn-scrollview-dynamic-padding": {
11393
- ...rnScrollviewDynamicPadding,
12567
+ {
12568
+ key: "react-doctor/rn-scrollview-dynamic-padding",
12569
+ id: "rn-scrollview-dynamic-padding",
12570
+ source: "react-doctor",
11394
12571
  framework: "react-native",
11395
- category: "React Native"
12572
+ category: "React Native",
12573
+ severity: "warn",
12574
+ rule: {
12575
+ ...rnScrollviewDynamicPadding,
12576
+ framework: "react-native",
12577
+ category: "React Native",
12578
+ tags: [...new Set(["react-native", ...rnScrollviewDynamicPadding.tags ?? []])]
12579
+ }
11396
12580
  },
11397
- "rn-style-prefer-boxshadow": {
11398
- ...rnStylePreferBoxShadow,
12581
+ {
12582
+ key: "react-doctor/rn-style-prefer-boxshadow",
12583
+ id: "rn-style-prefer-boxshadow",
12584
+ source: "react-doctor",
11399
12585
  framework: "react-native",
11400
- category: "React Native"
12586
+ category: "React Native",
12587
+ severity: "warn",
12588
+ rule: {
12589
+ ...rnStylePreferBoxShadow,
12590
+ framework: "react-native",
12591
+ category: "React Native",
12592
+ tags: [...new Set(["react-native", ...rnStylePreferBoxShadow.tags ?? []])]
12593
+ }
11401
12594
  },
11402
- "server-after-nonblocking": {
11403
- ...serverAfterNonblocking,
12595
+ {
12596
+ key: "react-doctor/server-after-nonblocking",
12597
+ id: "server-after-nonblocking",
12598
+ source: "react-doctor",
11404
12599
  framework: "global",
11405
- category: "Server"
12600
+ category: "Server",
12601
+ severity: "warn",
12602
+ rule: {
12603
+ ...serverAfterNonblocking,
12604
+ framework: "global",
12605
+ category: "Server",
12606
+ tags: [...new Set(["server-action", ...serverAfterNonblocking.tags ?? []])]
12607
+ }
11406
12608
  },
11407
- "server-auth-actions": {
11408
- ...serverAuthActions,
12609
+ {
12610
+ key: "react-doctor/server-auth-actions",
12611
+ id: "server-auth-actions",
12612
+ source: "react-doctor",
11409
12613
  framework: "global",
11410
- category: "Server"
12614
+ category: "Server",
12615
+ severity: "error",
12616
+ rule: {
12617
+ ...serverAuthActions,
12618
+ framework: "global",
12619
+ category: "Server",
12620
+ tags: [...new Set(["server-action", ...serverAuthActions.tags ?? []])]
12621
+ }
11411
12622
  },
11412
- "server-cache-with-object-literal": {
11413
- ...serverCacheWithObjectLiteral,
12623
+ {
12624
+ key: "react-doctor/server-cache-with-object-literal",
12625
+ id: "server-cache-with-object-literal",
12626
+ source: "react-doctor",
11414
12627
  framework: "global",
11415
- category: "Server"
12628
+ category: "Server",
12629
+ severity: "warn",
12630
+ rule: {
12631
+ ...serverCacheWithObjectLiteral,
12632
+ framework: "global",
12633
+ category: "Server",
12634
+ tags: [...new Set(["server-action", ...serverCacheWithObjectLiteral.tags ?? []])]
12635
+ }
11416
12636
  },
11417
- "server-dedup-props": {
11418
- ...serverDedupProps,
12637
+ {
12638
+ key: "react-doctor/server-dedup-props",
12639
+ id: "server-dedup-props",
12640
+ source: "react-doctor",
11419
12641
  framework: "global",
11420
- category: "Server"
12642
+ category: "Server",
12643
+ severity: "warn",
12644
+ rule: {
12645
+ ...serverDedupProps,
12646
+ framework: "global",
12647
+ category: "Server",
12648
+ tags: [...new Set(["server-action", ...serverDedupProps.tags ?? []])]
12649
+ }
11421
12650
  },
11422
- "server-fetch-without-revalidate": {
11423
- ...serverFetchWithoutRevalidate,
12651
+ {
12652
+ key: "react-doctor/server-fetch-without-revalidate",
12653
+ id: "server-fetch-without-revalidate",
12654
+ source: "react-doctor",
11424
12655
  framework: "global",
11425
- category: "Server"
12656
+ category: "Server",
12657
+ severity: "warn",
12658
+ rule: {
12659
+ ...serverFetchWithoutRevalidate,
12660
+ framework: "global",
12661
+ category: "Server",
12662
+ tags: [...new Set(["server-action", ...serverFetchWithoutRevalidate.tags ?? []])]
12663
+ }
11426
12664
  },
11427
- "server-hoist-static-io": {
11428
- ...serverHoistStaticIo,
12665
+ {
12666
+ key: "react-doctor/server-hoist-static-io",
12667
+ id: "server-hoist-static-io",
12668
+ source: "react-doctor",
11429
12669
  framework: "global",
11430
- category: "Server"
12670
+ category: "Server",
12671
+ severity: "warn",
12672
+ rule: {
12673
+ ...serverHoistStaticIo,
12674
+ framework: "global",
12675
+ category: "Server",
12676
+ tags: [...new Set(["server-action", ...serverHoistStaticIo.tags ?? []])]
12677
+ }
11431
12678
  },
11432
- "server-no-mutable-module-state": {
11433
- ...serverNoMutableModuleState,
12679
+ {
12680
+ key: "react-doctor/server-no-mutable-module-state",
12681
+ id: "server-no-mutable-module-state",
12682
+ source: "react-doctor",
11434
12683
  framework: "global",
11435
- category: "Server"
12684
+ category: "Server",
12685
+ severity: "error",
12686
+ rule: {
12687
+ ...serverNoMutableModuleState,
12688
+ framework: "global",
12689
+ category: "Server",
12690
+ tags: [...new Set(["server-action", ...serverNoMutableModuleState.tags ?? []])]
12691
+ }
11436
12692
  },
11437
- "server-sequential-independent-await": {
11438
- ...serverSequentialIndependentAwait,
12693
+ {
12694
+ key: "react-doctor/server-sequential-independent-await",
12695
+ id: "server-sequential-independent-await",
12696
+ source: "react-doctor",
11439
12697
  framework: "global",
11440
- category: "Server"
12698
+ category: "Server",
12699
+ severity: "warn",
12700
+ rule: {
12701
+ ...serverSequentialIndependentAwait,
12702
+ framework: "global",
12703
+ category: "Server",
12704
+ tags: [...new Set(["server-action", ...serverSequentialIndependentAwait.tags ?? []])]
12705
+ }
11441
12706
  },
11442
- "tanstack-start-get-mutation": {
11443
- ...tanstackStartGetMutation,
12707
+ {
12708
+ key: "react-doctor/tanstack-start-get-mutation",
12709
+ id: "tanstack-start-get-mutation",
12710
+ source: "react-doctor",
11444
12711
  framework: "tanstack-start",
11445
- category: "Security"
12712
+ category: "Security",
12713
+ severity: "warn",
12714
+ rule: {
12715
+ ...tanstackStartGetMutation,
12716
+ framework: "tanstack-start",
12717
+ category: "Security"
12718
+ }
11446
12719
  },
11447
- "tanstack-start-loader-parallel-fetch": {
11448
- ...tanstackStartLoaderParallelFetch,
12720
+ {
12721
+ key: "react-doctor/tanstack-start-loader-parallel-fetch",
12722
+ id: "tanstack-start-loader-parallel-fetch",
12723
+ source: "react-doctor",
11449
12724
  framework: "tanstack-start",
11450
- category: "Performance"
12725
+ category: "Performance",
12726
+ severity: "warn",
12727
+ rule: {
12728
+ ...tanstackStartLoaderParallelFetch,
12729
+ framework: "tanstack-start",
12730
+ category: "Performance"
12731
+ }
11451
12732
  },
11452
- "tanstack-start-missing-head-content": {
11453
- ...tanstackStartMissingHeadContent,
12733
+ {
12734
+ key: "react-doctor/tanstack-start-missing-head-content",
12735
+ id: "tanstack-start-missing-head-content",
12736
+ source: "react-doctor",
11454
12737
  framework: "tanstack-start",
11455
- category: "TanStack Start"
12738
+ category: "TanStack Start",
12739
+ severity: "warn",
12740
+ rule: {
12741
+ ...tanstackStartMissingHeadContent,
12742
+ framework: "tanstack-start",
12743
+ category: "TanStack Start"
12744
+ }
11456
12745
  },
11457
- "tanstack-start-no-anchor-element": {
11458
- ...tanstackStartNoAnchorElement,
12746
+ {
12747
+ key: "react-doctor/tanstack-start-no-anchor-element",
12748
+ id: "tanstack-start-no-anchor-element",
12749
+ source: "react-doctor",
11459
12750
  framework: "tanstack-start",
11460
- category: "TanStack Start"
12751
+ category: "TanStack Start",
12752
+ severity: "warn",
12753
+ rule: {
12754
+ ...tanstackStartNoAnchorElement,
12755
+ framework: "tanstack-start",
12756
+ category: "TanStack Start"
12757
+ }
11461
12758
  },
11462
- "tanstack-start-no-direct-fetch-in-loader": {
11463
- ...tanstackStartNoDirectFetchInLoader,
12759
+ {
12760
+ key: "react-doctor/tanstack-start-no-direct-fetch-in-loader",
12761
+ id: "tanstack-start-no-direct-fetch-in-loader",
12762
+ source: "react-doctor",
11464
12763
  framework: "tanstack-start",
11465
- category: "TanStack Start"
12764
+ category: "TanStack Start",
12765
+ severity: "warn",
12766
+ rule: {
12767
+ ...tanstackStartNoDirectFetchInLoader,
12768
+ framework: "tanstack-start",
12769
+ category: "TanStack Start"
12770
+ }
11466
12771
  },
11467
- "tanstack-start-no-dynamic-server-fn-import": {
11468
- ...tanstackStartNoDynamicServerFnImport,
12772
+ {
12773
+ key: "react-doctor/tanstack-start-no-dynamic-server-fn-import",
12774
+ id: "tanstack-start-no-dynamic-server-fn-import",
12775
+ source: "react-doctor",
11469
12776
  framework: "tanstack-start",
11470
- category: "TanStack Start"
12777
+ category: "TanStack Start",
12778
+ severity: "error",
12779
+ rule: {
12780
+ ...tanstackStartNoDynamicServerFnImport,
12781
+ framework: "tanstack-start",
12782
+ category: "TanStack Start"
12783
+ }
11471
12784
  },
11472
- "tanstack-start-no-navigate-in-render": {
11473
- ...tanstackStartNoNavigateInRender,
12785
+ {
12786
+ key: "react-doctor/tanstack-start-no-navigate-in-render",
12787
+ id: "tanstack-start-no-navigate-in-render",
12788
+ source: "react-doctor",
11474
12789
  framework: "tanstack-start",
11475
- category: "TanStack Start"
12790
+ category: "TanStack Start",
12791
+ severity: "warn",
12792
+ rule: {
12793
+ ...tanstackStartNoNavigateInRender,
12794
+ framework: "tanstack-start",
12795
+ category: "TanStack Start"
12796
+ }
11476
12797
  },
11477
- "tanstack-start-no-secrets-in-loader": {
11478
- ...tanstackStartNoSecretsInLoader,
12798
+ {
12799
+ key: "react-doctor/tanstack-start-no-secrets-in-loader",
12800
+ id: "tanstack-start-no-secrets-in-loader",
12801
+ source: "react-doctor",
11479
12802
  framework: "tanstack-start",
11480
- category: "Security"
12803
+ category: "Security",
12804
+ severity: "error",
12805
+ rule: {
12806
+ ...tanstackStartNoSecretsInLoader,
12807
+ framework: "tanstack-start",
12808
+ category: "Security"
12809
+ }
11481
12810
  },
11482
- "tanstack-start-no-use-server-in-handler": {
11483
- ...tanstackStartNoUseServerInHandler,
12811
+ {
12812
+ key: "react-doctor/tanstack-start-no-use-server-in-handler",
12813
+ id: "tanstack-start-no-use-server-in-handler",
12814
+ source: "react-doctor",
11484
12815
  framework: "tanstack-start",
11485
- category: "TanStack Start"
12816
+ category: "TanStack Start",
12817
+ severity: "error",
12818
+ rule: {
12819
+ ...tanstackStartNoUseServerInHandler,
12820
+ framework: "tanstack-start",
12821
+ category: "TanStack Start"
12822
+ }
11486
12823
  },
11487
- "tanstack-start-no-useeffect-fetch": {
11488
- ...tanstackStartNoUseEffectFetch,
12824
+ {
12825
+ key: "react-doctor/tanstack-start-no-useeffect-fetch",
12826
+ id: "tanstack-start-no-useeffect-fetch",
12827
+ source: "react-doctor",
11489
12828
  framework: "tanstack-start",
11490
- category: "TanStack Start"
12829
+ category: "TanStack Start",
12830
+ severity: "warn",
12831
+ rule: {
12832
+ ...tanstackStartNoUseEffectFetch,
12833
+ framework: "tanstack-start",
12834
+ category: "TanStack Start"
12835
+ }
11491
12836
  },
11492
- "tanstack-start-redirect-in-try-catch": {
11493
- ...tanstackStartRedirectInTryCatch,
12837
+ {
12838
+ key: "react-doctor/tanstack-start-redirect-in-try-catch",
12839
+ id: "tanstack-start-redirect-in-try-catch",
12840
+ source: "react-doctor",
11494
12841
  framework: "tanstack-start",
11495
- category: "TanStack Start"
12842
+ category: "TanStack Start",
12843
+ severity: "warn",
12844
+ rule: {
12845
+ ...tanstackStartRedirectInTryCatch,
12846
+ framework: "tanstack-start",
12847
+ category: "TanStack Start"
12848
+ }
11496
12849
  },
11497
- "tanstack-start-route-property-order": {
11498
- ...tanstackStartRoutePropertyOrder,
12850
+ {
12851
+ key: "react-doctor/tanstack-start-route-property-order",
12852
+ id: "tanstack-start-route-property-order",
12853
+ source: "react-doctor",
11499
12854
  framework: "tanstack-start",
11500
- category: "TanStack Start"
12855
+ category: "TanStack Start",
12856
+ severity: "error",
12857
+ rule: {
12858
+ ...tanstackStartRoutePropertyOrder,
12859
+ framework: "tanstack-start",
12860
+ category: "TanStack Start"
12861
+ }
11501
12862
  },
11502
- "tanstack-start-server-fn-method-order": {
11503
- ...tanstackStartServerFnMethodOrder,
12863
+ {
12864
+ key: "react-doctor/tanstack-start-server-fn-method-order",
12865
+ id: "tanstack-start-server-fn-method-order",
12866
+ source: "react-doctor",
11504
12867
  framework: "tanstack-start",
11505
- category: "TanStack Start"
12868
+ category: "TanStack Start",
12869
+ severity: "error",
12870
+ rule: {
12871
+ ...tanstackStartServerFnMethodOrder,
12872
+ framework: "tanstack-start",
12873
+ category: "TanStack Start"
12874
+ }
11506
12875
  },
11507
- "tanstack-start-server-fn-validate-input": {
11508
- ...tanstackStartServerFnValidateInput,
12876
+ {
12877
+ key: "react-doctor/tanstack-start-server-fn-validate-input",
12878
+ id: "tanstack-start-server-fn-validate-input",
12879
+ source: "react-doctor",
11509
12880
  framework: "tanstack-start",
11510
- category: "TanStack Start"
12881
+ category: "TanStack Start",
12882
+ severity: "warn",
12883
+ rule: {
12884
+ ...tanstackStartServerFnValidateInput,
12885
+ framework: "tanstack-start",
12886
+ category: "TanStack Start"
12887
+ }
11511
12888
  },
11512
- "use-lazy-motion": {
11513
- ...useLazyMotion,
12889
+ {
12890
+ key: "react-doctor/use-lazy-motion",
12891
+ id: "use-lazy-motion",
12892
+ source: "react-doctor",
11514
12893
  framework: "global",
11515
- category: "Bundle Size"
12894
+ category: "Bundle Size",
12895
+ severity: "warn",
12896
+ rule: {
12897
+ ...useLazyMotion,
12898
+ framework: "global",
12899
+ category: "Bundle Size"
12900
+ }
11516
12901
  }
11517
- };
12902
+ ];
12903
+ const ruleRegistry = Object.fromEntries(reactDoctorRules.map((rule) => [rule.id, rule.rule]));
11518
12904
  //#endregion
11519
12905
  //#region ../types/dist/index.js
11520
12906
  const REACT_NATIVE_DEPENDENCY_NAMES = new Set([
@@ -11678,29 +13064,285 @@ const plugin = {
11678
13064
  rules: applyFrameworkRuleWrappers(ruleRegistry)
11679
13065
  };
11680
13066
  //#endregion
11681
- //#region src/rules-by-framework.ts
11682
- const formatFullKey = (ruleId) => `react-doctor/${ruleId}`;
11683
- const collectRulesByFramework = (frameworkName) => {
11684
- const collected = {};
11685
- for (const [ruleId, rule] of Object.entries(plugin.rules)) if (rule.framework === frameworkName && rule.severity) collected[formatFullKey(ruleId)] = rule.severity;
11686
- return collected;
11687
- };
11688
- const GLOBAL_REACT_DOCTOR_RULES = collectRulesByFramework("global");
11689
- const NEXTJS_RULES = collectRulesByFramework("nextjs");
11690
- const REACT_NATIVE_RULES = collectRulesByFramework("react-native");
11691
- const TANSTACK_START_RULES = collectRulesByFramework("tanstack-start");
11692
- const TANSTACK_QUERY_RULES = collectRulesByFramework("tanstack-query");
11693
- const ALL_REACT_DOCTOR_RULE_KEYS = new Set(Object.keys(plugin.rules).map(formatFullKey));
13067
+ //#region src/rules.ts
13068
+ const toRuleMap = (rules) => Object.fromEntries(rules.map((rule) => [rule.key, rule.severity]));
13069
+ const collectReactDoctorRulesByFramework = (frameworkName) => reactDoctorRules.filter((rule) => rule.framework === frameworkName);
13070
+ const collectExternalRulesBySource = (source) => EXTERNAL_RULES.filter((rule) => rule.source === source);
11694
13071
  const collectFrameworkSpecificRuleKeys = () => {
11695
13072
  const collected = /* @__PURE__ */ new Set();
11696
- for (const [ruleId, rule] of Object.entries(plugin.rules)) if (rule.framework !== "global") collected.add(formatFullKey(ruleId));
13073
+ for (const rule of reactDoctorRules) if (rule.framework !== "global") collected.add(rule.key);
11697
13074
  return collected;
11698
13075
  };
13076
+ const REACT_DOCTOR_RULES = reactDoctorRules;
13077
+ const EXTERNAL_RULES = [
13078
+ {
13079
+ key: "react-hooks-js/set-state-in-render",
13080
+ source: "react-compiler",
13081
+ severity: "error"
13082
+ },
13083
+ {
13084
+ key: "react-hooks-js/immutability",
13085
+ source: "react-compiler",
13086
+ severity: "error"
13087
+ },
13088
+ {
13089
+ key: "react-hooks-js/refs",
13090
+ source: "react-compiler",
13091
+ severity: "error"
13092
+ },
13093
+ {
13094
+ key: "react-hooks-js/purity",
13095
+ source: "react-compiler",
13096
+ severity: "error"
13097
+ },
13098
+ {
13099
+ key: "react-hooks-js/hooks",
13100
+ source: "react-compiler",
13101
+ severity: "error"
13102
+ },
13103
+ {
13104
+ key: "react-hooks-js/set-state-in-effect",
13105
+ source: "react-compiler",
13106
+ severity: "error"
13107
+ },
13108
+ {
13109
+ key: "react-hooks-js/globals",
13110
+ source: "react-compiler",
13111
+ severity: "error"
13112
+ },
13113
+ {
13114
+ key: "react-hooks-js/error-boundaries",
13115
+ source: "react-compiler",
13116
+ severity: "error"
13117
+ },
13118
+ {
13119
+ key: "react-hooks-js/preserve-manual-memoization",
13120
+ source: "react-compiler",
13121
+ severity: "error"
13122
+ },
13123
+ {
13124
+ key: "react-hooks-js/unsupported-syntax",
13125
+ source: "react-compiler",
13126
+ severity: "error"
13127
+ },
13128
+ {
13129
+ key: "react-hooks-js/component-hook-factories",
13130
+ source: "react-compiler",
13131
+ severity: "error"
13132
+ },
13133
+ {
13134
+ key: "react-hooks-js/static-components",
13135
+ source: "react-compiler",
13136
+ severity: "error"
13137
+ },
13138
+ {
13139
+ key: "react-hooks-js/use-memo",
13140
+ source: "react-compiler",
13141
+ severity: "error"
13142
+ },
13143
+ {
13144
+ key: "react-hooks-js/void-use-memo",
13145
+ source: "react-compiler",
13146
+ severity: "error"
13147
+ },
13148
+ {
13149
+ key: "react-hooks-js/incompatible-library",
13150
+ source: "react-compiler",
13151
+ severity: "error"
13152
+ },
13153
+ {
13154
+ key: "react-hooks-js/todo",
13155
+ source: "react-compiler",
13156
+ severity: "error"
13157
+ },
13158
+ {
13159
+ key: "effect/no-derived-state",
13160
+ source: "you-might-not-need-effect",
13161
+ severity: "warn"
13162
+ },
13163
+ {
13164
+ key: "effect/no-chain-state-updates",
13165
+ source: "you-might-not-need-effect",
13166
+ severity: "warn"
13167
+ },
13168
+ {
13169
+ key: "effect/no-event-handler",
13170
+ source: "you-might-not-need-effect",
13171
+ severity: "warn"
13172
+ },
13173
+ {
13174
+ key: "effect/no-adjust-state-on-prop-change",
13175
+ source: "you-might-not-need-effect",
13176
+ severity: "warn"
13177
+ },
13178
+ {
13179
+ key: "effect/no-reset-all-state-on-prop-change",
13180
+ source: "you-might-not-need-effect",
13181
+ severity: "warn"
13182
+ },
13183
+ {
13184
+ key: "effect/no-pass-live-state-to-parent",
13185
+ source: "you-might-not-need-effect",
13186
+ severity: "warn"
13187
+ },
13188
+ {
13189
+ key: "effect/no-pass-data-to-parent",
13190
+ source: "you-might-not-need-effect",
13191
+ severity: "warn"
13192
+ },
13193
+ {
13194
+ key: "effect/no-initialize-state",
13195
+ source: "you-might-not-need-effect",
13196
+ severity: "warn"
13197
+ },
13198
+ {
13199
+ key: "react/rules-of-hooks",
13200
+ source: "builtin-react",
13201
+ severity: "error"
13202
+ },
13203
+ {
13204
+ key: "react/no-direct-mutation-state",
13205
+ source: "builtin-react",
13206
+ severity: "error"
13207
+ },
13208
+ {
13209
+ key: "react/jsx-no-duplicate-props",
13210
+ source: "builtin-react",
13211
+ severity: "error"
13212
+ },
13213
+ {
13214
+ key: "react/jsx-key",
13215
+ source: "builtin-react",
13216
+ severity: "error"
13217
+ },
13218
+ {
13219
+ key: "react/no-children-prop",
13220
+ source: "builtin-react",
13221
+ severity: "warn"
13222
+ },
13223
+ {
13224
+ key: "react/no-danger",
13225
+ source: "builtin-react",
13226
+ severity: "warn"
13227
+ },
13228
+ {
13229
+ key: "react/jsx-no-script-url",
13230
+ source: "builtin-react",
13231
+ severity: "error"
13232
+ },
13233
+ {
13234
+ key: "react/no-render-return-value",
13235
+ source: "builtin-react",
13236
+ severity: "warn"
13237
+ },
13238
+ {
13239
+ key: "react/no-string-refs",
13240
+ source: "builtin-react",
13241
+ severity: "warn"
13242
+ },
13243
+ {
13244
+ key: "react/no-is-mounted",
13245
+ source: "builtin-react",
13246
+ severity: "warn"
13247
+ },
13248
+ {
13249
+ key: "react/require-render-return",
13250
+ source: "builtin-react",
13251
+ severity: "error"
13252
+ },
13253
+ {
13254
+ key: "react/no-unknown-property",
13255
+ source: "builtin-react",
13256
+ severity: "warn"
13257
+ },
13258
+ {
13259
+ key: "jsx-a11y/alt-text",
13260
+ source: "builtin-a11y",
13261
+ severity: "error"
13262
+ },
13263
+ {
13264
+ key: "jsx-a11y/anchor-is-valid",
13265
+ source: "builtin-a11y",
13266
+ severity: "warn"
13267
+ },
13268
+ {
13269
+ key: "jsx-a11y/click-events-have-key-events",
13270
+ source: "builtin-a11y",
13271
+ severity: "warn"
13272
+ },
13273
+ {
13274
+ key: "jsx-a11y/no-static-element-interactions",
13275
+ source: "builtin-a11y",
13276
+ severity: "warn"
13277
+ },
13278
+ {
13279
+ key: "jsx-a11y/role-has-required-aria-props",
13280
+ source: "builtin-a11y",
13281
+ severity: "error"
13282
+ },
13283
+ {
13284
+ key: "jsx-a11y/no-autofocus",
13285
+ source: "builtin-a11y",
13286
+ severity: "warn"
13287
+ },
13288
+ {
13289
+ key: "jsx-a11y/heading-has-content",
13290
+ source: "builtin-a11y",
13291
+ severity: "warn"
13292
+ },
13293
+ {
13294
+ key: "jsx-a11y/html-has-lang",
13295
+ source: "builtin-a11y",
13296
+ severity: "warn"
13297
+ },
13298
+ {
13299
+ key: "jsx-a11y/no-redundant-roles",
13300
+ source: "builtin-a11y",
13301
+ severity: "warn"
13302
+ },
13303
+ {
13304
+ key: "jsx-a11y/scope",
13305
+ source: "builtin-a11y",
13306
+ severity: "warn"
13307
+ },
13308
+ {
13309
+ key: "jsx-a11y/tabindex-no-positive",
13310
+ source: "builtin-a11y",
13311
+ severity: "warn"
13312
+ },
13313
+ {
13314
+ key: "jsx-a11y/label-has-associated-control",
13315
+ source: "builtin-a11y",
13316
+ severity: "warn"
13317
+ },
13318
+ {
13319
+ key: "jsx-a11y/no-distracting-elements",
13320
+ source: "builtin-a11y",
13321
+ severity: "error"
13322
+ },
13323
+ {
13324
+ key: "jsx-a11y/iframe-has-title",
13325
+ source: "builtin-a11y",
13326
+ severity: "warn"
13327
+ }
13328
+ ];
13329
+ const RULES = [...REACT_DOCTOR_RULES, ...EXTERNAL_RULES];
13330
+ const RECOMMENDED_RULES = toRuleMap(collectReactDoctorRulesByFramework("global"));
13331
+ const NEXTJS_RULES = toRuleMap(collectReactDoctorRulesByFramework("nextjs"));
13332
+ const REACT_NATIVE_RULES = toRuleMap(collectReactDoctorRulesByFramework("react-native"));
13333
+ const TANSTACK_START_RULES = toRuleMap(collectReactDoctorRulesByFramework("tanstack-start"));
13334
+ const TANSTACK_QUERY_RULES = toRuleMap(collectReactDoctorRulesByFramework("tanstack-query"));
13335
+ const ALL_REACT_DOCTOR_RULES = toRuleMap(REACT_DOCTOR_RULES);
13336
+ const ALL_REACT_DOCTOR_RULE_KEYS = new Set(REACT_DOCTOR_RULES.map((rule) => rule.key));
11699
13337
  const FRAMEWORK_SPECIFIC_RULE_KEYS = collectFrameworkSpecificRuleKeys();
13338
+ const REACT_COMPILER_RULES = toRuleMap(collectExternalRulesBySource("react-compiler"));
13339
+ const YOU_MIGHT_NOT_NEED_EFFECT_RULES = toRuleMap(collectExternalRulesBySource("you-might-not-need-effect"));
13340
+ const BUILTIN_REACT_RULES = toRuleMap(collectExternalRulesBySource("builtin-react"));
13341
+ const BUILTIN_A11Y_RULES = toRuleMap(collectExternalRulesBySource("builtin-a11y"));
11700
13342
  //#endregion
11701
13343
  //#region src/index.ts
11702
13344
  var src_default = plugin;
11703
13345
  //#endregion
11704
- export { ALL_REACT_DOCTOR_RULE_KEYS, FRAMEWORK_SPECIFIC_RULE_KEYS, GLOBAL_REACT_DOCTOR_RULES, MOTION_LIBRARY_PACKAGES, NEXTJS_RULES, REACT_NATIVE_RULES, TANSTACK_QUERY_RULES, TANSTACK_START_RULES, src_default as default };
13346
+ export { ALL_REACT_DOCTOR_RULES, ALL_REACT_DOCTOR_RULE_KEYS, BUILTIN_A11Y_RULES, BUILTIN_REACT_RULES, EXTERNAL_RULES, FRAMEWORK_SPECIFIC_RULE_KEYS, MOTION_LIBRARY_PACKAGES, NEXTJS_RULES, REACT_COMPILER_RULES, REACT_DOCTOR_RULES, REACT_NATIVE_RULES, RECOMMENDED_RULES, RULES, TANSTACK_QUERY_RULES, TANSTACK_START_RULES, YOU_MIGHT_NOT_NEED_EFFECT_RULES, src_default as default };
11705
13347
 
11706
13348
  //# sourceMappingURL=index.js.map