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/README.md +1 -1
- package/dist/index.d.ts +6463 -3
- package/dist/index.js +2268 -626
- package/package.json +2 -2
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
|
|
10622
|
-
|
|
10623
|
-
|
|
10624
|
-
|
|
10625
|
-
|
|
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
|
-
|
|
10633
|
-
|
|
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
|
-
|
|
10638
|
-
|
|
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
|
-
|
|
10643
|
-
|
|
10595
|
+
{
|
|
10596
|
+
key: "react-doctor/async-parallel",
|
|
10597
|
+
id: "async-parallel",
|
|
10598
|
+
source: "react-doctor",
|
|
10644
10599
|
framework: "global",
|
|
10645
|
-
category: "
|
|
10600
|
+
category: "Performance",
|
|
10601
|
+
severity: "warn",
|
|
10602
|
+
rule: {
|
|
10603
|
+
...asyncParallel,
|
|
10604
|
+
framework: "global",
|
|
10605
|
+
category: "Performance"
|
|
10606
|
+
}
|
|
10646
10607
|
},
|
|
10647
|
-
|
|
10648
|
-
|
|
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: "
|
|
10613
|
+
category: "Correctness",
|
|
10614
|
+
severity: "warn",
|
|
10615
|
+
rule: {
|
|
10616
|
+
...clientLocalstorageNoVersion,
|
|
10617
|
+
framework: "global",
|
|
10618
|
+
category: "Correctness"
|
|
10619
|
+
}
|
|
10651
10620
|
},
|
|
10652
|
-
|
|
10653
|
-
|
|
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: "
|
|
10626
|
+
category: "Performance",
|
|
10627
|
+
severity: "warn",
|
|
10628
|
+
rule: {
|
|
10629
|
+
...clientPassiveEventListeners,
|
|
10630
|
+
framework: "global",
|
|
10631
|
+
category: "Performance"
|
|
10632
|
+
}
|
|
10656
10633
|
},
|
|
10657
|
-
|
|
10658
|
-
|
|
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
|
-
|
|
10663
|
-
|
|
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
|
-
|
|
10668
|
-
|
|
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
|
-
|
|
10673
|
-
|
|
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
|
-
|
|
10678
|
-
|
|
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
|
-
|
|
10683
|
-
|
|
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
|
-
|
|
10688
|
-
|
|
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
|
-
|
|
10693
|
-
|
|
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
|
-
|
|
10698
|
-
|
|
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
|
-
|
|
10703
|
-
|
|
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
|
-
|
|
10708
|
-
|
|
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
|
-
|
|
10713
|
-
|
|
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
|
-
|
|
10718
|
-
|
|
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
|
-
|
|
10723
|
-
|
|
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
|
-
|
|
10728
|
-
|
|
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
|
-
|
|
10733
|
-
|
|
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
|
-
|
|
10738
|
-
|
|
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
|
-
|
|
10743
|
-
|
|
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
|
-
|
|
10748
|
-
|
|
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
|
-
|
|
10753
|
-
|
|
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
|
-
|
|
10758
|
-
|
|
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
|
-
|
|
10763
|
-
|
|
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
|
-
|
|
10768
|
-
|
|
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
|
-
|
|
10773
|
-
|
|
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
|
-
|
|
10778
|
-
|
|
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
|
-
|
|
10783
|
-
|
|
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
|
-
|
|
10788
|
-
|
|
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
|
-
|
|
10793
|
-
|
|
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
|
-
|
|
10798
|
-
|
|
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
|
-
|
|
10803
|
-
|
|
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
|
-
|
|
10808
|
-
|
|
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
|
-
|
|
10813
|
-
|
|
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
|
-
|
|
10818
|
-
|
|
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
|
-
|
|
10823
|
-
|
|
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
|
-
|
|
10828
|
-
|
|
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
|
-
|
|
10833
|
-
|
|
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
|
-
|
|
10838
|
-
|
|
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
|
-
|
|
10843
|
-
|
|
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
|
-
|
|
10848
|
-
|
|
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
|
-
|
|
10853
|
-
|
|
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
|
-
|
|
10858
|
-
|
|
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
|
-
|
|
10863
|
-
|
|
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
|
-
|
|
10868
|
-
|
|
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
|
-
|
|
10873
|
-
|
|
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
|
-
|
|
10878
|
-
|
|
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
|
-
|
|
10883
|
-
|
|
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
|
-
|
|
10888
|
-
|
|
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
|
-
|
|
10893
|
-
|
|
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
|
-
|
|
10898
|
-
|
|
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
|
-
|
|
10903
|
-
|
|
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
|
-
|
|
10908
|
-
|
|
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
|
-
|
|
10913
|
-
|
|
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
|
-
|
|
10918
|
-
|
|
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
|
-
|
|
10923
|
-
|
|
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
|
-
|
|
10928
|
-
|
|
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
|
-
|
|
10933
|
-
|
|
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
|
-
|
|
10938
|
-
|
|
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
|
-
|
|
10943
|
-
|
|
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
|
-
|
|
10948
|
-
|
|
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
|
-
|
|
10953
|
-
|
|
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
|
-
|
|
10958
|
-
|
|
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
|
-
|
|
10963
|
-
|
|
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
|
-
|
|
10968
|
-
|
|
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
|
-
|
|
10973
|
-
|
|
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
|
-
|
|
10978
|
-
|
|
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
|
-
|
|
10983
|
-
|
|
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
|
-
|
|
10988
|
-
|
|
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
|
-
|
|
10993
|
-
|
|
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
|
-
|
|
10998
|
-
|
|
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
|
-
|
|
11003
|
-
|
|
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
|
-
|
|
11008
|
-
|
|
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
|
-
|
|
11013
|
-
|
|
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
|
-
|
|
11018
|
-
|
|
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
|
-
|
|
11023
|
-
|
|
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
|
-
|
|
11028
|
-
|
|
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
|
-
|
|
11033
|
-
|
|
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
|
-
|
|
11038
|
-
|
|
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
|
-
|
|
11043
|
-
|
|
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
|
-
|
|
11048
|
-
|
|
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
|
-
|
|
11053
|
-
|
|
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
|
-
|
|
11058
|
-
|
|
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
|
-
|
|
11063
|
-
|
|
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
|
-
|
|
11068
|
-
|
|
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
|
-
|
|
11073
|
-
|
|
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
|
-
|
|
11078
|
-
|
|
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
|
-
|
|
11083
|
-
|
|
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
|
-
|
|
11088
|
-
|
|
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
|
-
|
|
11093
|
-
|
|
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
|
-
|
|
11098
|
-
|
|
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
|
-
|
|
11103
|
-
|
|
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
|
-
|
|
11108
|
-
|
|
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
|
-
|
|
11113
|
-
|
|
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
|
-
|
|
11118
|
-
|
|
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
|
-
|
|
11123
|
-
|
|
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
|
-
|
|
11128
|
-
|
|
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
|
-
|
|
11133
|
-
|
|
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
|
-
|
|
11138
|
-
|
|
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
|
-
|
|
11143
|
-
|
|
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
|
-
|
|
11148
|
-
|
|
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
|
-
|
|
11153
|
-
|
|
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
|
-
|
|
11158
|
-
|
|
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
|
-
|
|
11163
|
-
|
|
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
|
-
|
|
11168
|
-
|
|
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
|
-
|
|
11173
|
-
|
|
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
|
-
|
|
11178
|
-
|
|
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
|
-
|
|
11183
|
-
|
|
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
|
-
|
|
11188
|
-
|
|
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
|
-
|
|
11193
|
-
|
|
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
|
-
|
|
11198
|
-
|
|
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
|
-
|
|
11203
|
-
|
|
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
|
-
|
|
11208
|
-
|
|
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
|
-
|
|
11213
|
-
|
|
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
|
-
|
|
11218
|
-
|
|
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
|
-
|
|
11223
|
-
|
|
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
|
-
|
|
11228
|
-
|
|
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
|
-
|
|
11233
|
-
|
|
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
|
-
|
|
11238
|
-
|
|
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
|
-
|
|
11243
|
-
|
|
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
|
-
|
|
11248
|
-
|
|
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
|
-
|
|
11253
|
-
|
|
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
|
-
|
|
11258
|
-
|
|
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
|
-
|
|
11263
|
-
|
|
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
|
-
|
|
11268
|
-
|
|
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
|
-
|
|
11273
|
-
|
|
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
|
-
|
|
11278
|
-
|
|
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
|
-
|
|
11283
|
-
|
|
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
|
-
|
|
11288
|
-
|
|
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
|
-
|
|
11293
|
-
|
|
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
|
-
|
|
11298
|
-
|
|
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
|
-
|
|
11303
|
-
|
|
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
|
-
|
|
11308
|
-
|
|
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
|
-
|
|
11313
|
-
|
|
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
|
-
|
|
11318
|
-
|
|
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
|
-
|
|
11323
|
-
|
|
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
|
-
|
|
11328
|
-
|
|
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
|
-
|
|
11333
|
-
|
|
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
|
-
|
|
11338
|
-
|
|
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
|
-
|
|
11343
|
-
|
|
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
|
-
|
|
11348
|
-
|
|
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
|
-
|
|
11353
|
-
|
|
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
|
-
|
|
11358
|
-
|
|
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
|
-
|
|
11363
|
-
|
|
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
|
-
|
|
11368
|
-
|
|
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
|
-
|
|
11373
|
-
|
|
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
|
-
|
|
11378
|
-
|
|
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
|
-
|
|
11383
|
-
|
|
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
|
-
|
|
11388
|
-
|
|
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
|
-
|
|
11393
|
-
|
|
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
|
-
|
|
11398
|
-
|
|
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
|
-
|
|
11403
|
-
|
|
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
|
-
|
|
11408
|
-
|
|
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
|
-
|
|
11413
|
-
|
|
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
|
-
|
|
11418
|
-
|
|
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
|
-
|
|
11423
|
-
|
|
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
|
-
|
|
11428
|
-
|
|
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
|
-
|
|
11433
|
-
|
|
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
|
-
|
|
11438
|
-
|
|
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
|
-
|
|
11443
|
-
|
|
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
|
-
|
|
11448
|
-
|
|
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
|
-
|
|
11453
|
-
|
|
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
|
-
|
|
11458
|
-
|
|
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
|
-
|
|
11463
|
-
|
|
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
|
-
|
|
11468
|
-
|
|
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
|
-
|
|
11473
|
-
|
|
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
|
-
|
|
11478
|
-
|
|
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
|
-
|
|
11483
|
-
|
|
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
|
-
|
|
11488
|
-
|
|
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
|
-
|
|
11493
|
-
|
|
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
|
-
|
|
11498
|
-
|
|
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
|
-
|
|
11503
|
-
|
|
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
|
-
|
|
11508
|
-
|
|
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
|
-
|
|
11513
|
-
|
|
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
|
|
11682
|
-
const
|
|
11683
|
-
const
|
|
11684
|
-
|
|
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
|
|
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,
|
|
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
|