oxlint-plugin-react-doctor 0.2.9 → 0.2.11

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.
Files changed (3) hide show
  1. package/dist/index.d.ts +665 -11
  2. package/dist/index.js +2246 -629
  3. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -82,10 +82,17 @@ interface ScopeAnalysis {
82
82
  //#region src/plugin/utils/rule-context.d.ts
83
83
  interface BaseRuleContext {
84
84
  report: (descriptor: ReportDescriptor) => void;
85
- getFilename?: () => string;
85
+ readonly filename?: string;
86
+ /**
87
+ * @deprecated Rules use `context.filename`. Read only as a fallback by
88
+ * `wrapWithSemanticContext`; ESLint implements it as a `this`-bound class
89
+ * method, so it must be called on the host context, never a detached
90
+ * reference.
91
+ */
92
+ getFilename?: () => string | undefined;
86
93
  readonly settings?: Readonly<Record<string, unknown>>;
87
94
  }
88
- interface RuleContext extends BaseRuleContext {
95
+ interface RuleContext extends Omit<BaseRuleContext, "getFilename"> {
89
96
  readonly scopes: ScopeAnalysis;
90
97
  readonly cfg: ControlFlowAnalysis;
91
98
  }
@@ -97,7 +104,7 @@ interface RuleVisitors {
97
104
  //#endregion
98
105
  //#region src/plugin/utils/rule.d.ts
99
106
  type RuleSeverity = "error" | "warn";
100
- type RuleFramework = "global" | "nextjs" | "react-native" | "tanstack-start" | "tanstack-query";
107
+ type RuleFramework = "global" | "nextjs" | "react-native" | "tanstack-start" | "tanstack-query" | "preact";
101
108
  interface Rule {
102
109
  id: string;
103
110
  severity: RuleSeverity;
@@ -130,6 +137,23 @@ type OxlintRuleSeverity = RuleSeverity | "off";
130
137
  //#endregion
131
138
  //#region src/rules.d.ts
132
139
  declare const REACT_DOCTOR_RULES: readonly [{
140
+ readonly key: "react-doctor/activity-wraps-effect-heavy-subtree";
141
+ readonly id: "activity-wraps-effect-heavy-subtree";
142
+ readonly source: "react-doctor";
143
+ readonly originallyExternal: false;
144
+ readonly rule: {
145
+ readonly framework: "global";
146
+ readonly category: "State & Effects";
147
+ readonly id: string;
148
+ readonly severity: RuleSeverity;
149
+ readonly requires?: ReadonlyArray<string>;
150
+ readonly disabledBy?: ReadonlyArray<string>;
151
+ readonly tags?: ReadonlyArray<string>;
152
+ readonly defaultEnabled?: boolean;
153
+ readonly recommendation?: string;
154
+ readonly create: (context: RuleContext) => RuleVisitors;
155
+ };
156
+ }, {
133
157
  readonly key: "react-doctor/advanced-event-handler-refs";
134
158
  readonly id: "advanced-event-handler-refs";
135
159
  readonly source: "react-doctor";
@@ -724,6 +748,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
724
748
  readonly recommendation?: string;
725
749
  readonly create: (context: RuleContext) => RuleVisitors;
726
750
  };
751
+ }, {
752
+ readonly key: "react-doctor/hooks-no-nan-in-deps";
753
+ readonly id: "hooks-no-nan-in-deps";
754
+ readonly source: "react-doctor";
755
+ readonly originallyExternal: false;
756
+ readonly rule: {
757
+ readonly framework: "global";
758
+ readonly category: "State & Effects";
759
+ readonly id: string;
760
+ readonly severity: RuleSeverity;
761
+ readonly requires?: ReadonlyArray<string>;
762
+ readonly disabledBy?: ReadonlyArray<string>;
763
+ readonly tags?: ReadonlyArray<string>;
764
+ readonly defaultEnabled?: boolean;
765
+ readonly recommendation?: string;
766
+ readonly create: (context: RuleContext) => RuleVisitors;
767
+ };
727
768
  }, {
728
769
  readonly key: "react-doctor/html-has-lang";
729
770
  readonly id: "html-has-lang";
@@ -741,6 +782,57 @@ declare const REACT_DOCTOR_RULES: readonly [{
741
782
  readonly recommendation?: string;
742
783
  readonly create: (context: RuleContext) => RuleVisitors;
743
784
  };
785
+ }, {
786
+ readonly key: "react-doctor/html-no-invalid-paragraph-child";
787
+ readonly id: "html-no-invalid-paragraph-child";
788
+ readonly source: "react-doctor";
789
+ readonly originallyExternal: false;
790
+ readonly rule: {
791
+ readonly framework: "global";
792
+ readonly category: "Correctness";
793
+ readonly id: string;
794
+ readonly severity: RuleSeverity;
795
+ readonly requires?: ReadonlyArray<string>;
796
+ readonly disabledBy?: ReadonlyArray<string>;
797
+ readonly tags?: ReadonlyArray<string>;
798
+ readonly defaultEnabled?: boolean;
799
+ readonly recommendation?: string;
800
+ readonly create: (context: RuleContext) => RuleVisitors;
801
+ };
802
+ }, {
803
+ readonly key: "react-doctor/html-no-invalid-table-nesting";
804
+ readonly id: "html-no-invalid-table-nesting";
805
+ readonly source: "react-doctor";
806
+ readonly originallyExternal: false;
807
+ readonly rule: {
808
+ readonly framework: "global";
809
+ readonly category: "Correctness";
810
+ readonly id: string;
811
+ readonly severity: RuleSeverity;
812
+ readonly requires?: ReadonlyArray<string>;
813
+ readonly disabledBy?: ReadonlyArray<string>;
814
+ readonly tags?: ReadonlyArray<string>;
815
+ readonly defaultEnabled?: boolean;
816
+ readonly recommendation?: string;
817
+ readonly create: (context: RuleContext) => RuleVisitors;
818
+ };
819
+ }, {
820
+ readonly key: "react-doctor/html-no-nested-interactive";
821
+ readonly id: "html-no-nested-interactive";
822
+ readonly source: "react-doctor";
823
+ readonly originallyExternal: false;
824
+ readonly rule: {
825
+ readonly framework: "global";
826
+ readonly category: "Correctness";
827
+ readonly id: string;
828
+ readonly severity: RuleSeverity;
829
+ readonly requires?: ReadonlyArray<string>;
830
+ readonly disabledBy?: ReadonlyArray<string>;
831
+ readonly tags?: ReadonlyArray<string>;
832
+ readonly defaultEnabled?: boolean;
833
+ readonly recommendation?: string;
834
+ readonly create: (context: RuleContext) => RuleVisitors;
835
+ };
744
836
  }, {
745
837
  readonly key: "react-doctor/iframe-has-title";
746
838
  readonly id: "iframe-has-title";
@@ -809,6 +901,74 @@ declare const REACT_DOCTOR_RULES: readonly [{
809
901
  readonly recommendation?: string;
810
902
  readonly create: (context: RuleContext) => RuleVisitors;
811
903
  };
904
+ }, {
905
+ readonly key: "react-doctor/jotai-derived-atom-returns-fresh-object";
906
+ readonly id: "jotai-derived-atom-returns-fresh-object";
907
+ readonly source: "react-doctor";
908
+ readonly originallyExternal: false;
909
+ readonly rule: {
910
+ readonly framework: "global";
911
+ readonly category: "State & Effects";
912
+ readonly id: string;
913
+ readonly severity: RuleSeverity;
914
+ readonly requires?: ReadonlyArray<string>;
915
+ readonly disabledBy?: ReadonlyArray<string>;
916
+ readonly tags?: ReadonlyArray<string>;
917
+ readonly defaultEnabled?: boolean;
918
+ readonly recommendation?: string;
919
+ readonly create: (context: RuleContext) => RuleVisitors;
920
+ };
921
+ }, {
922
+ readonly key: "react-doctor/jotai-select-atom-in-render-body";
923
+ readonly id: "jotai-select-atom-in-render-body";
924
+ readonly source: "react-doctor";
925
+ readonly originallyExternal: false;
926
+ readonly rule: {
927
+ readonly framework: "global";
928
+ readonly category: "State & Effects";
929
+ readonly id: string;
930
+ readonly severity: RuleSeverity;
931
+ readonly requires?: ReadonlyArray<string>;
932
+ readonly disabledBy?: ReadonlyArray<string>;
933
+ readonly tags?: ReadonlyArray<string>;
934
+ readonly defaultEnabled?: boolean;
935
+ readonly recommendation?: string;
936
+ readonly create: (context: RuleContext) => RuleVisitors;
937
+ };
938
+ }, {
939
+ readonly key: "react-doctor/jotai-tq-use-raw-query-atom";
940
+ readonly id: "jotai-tq-use-raw-query-atom";
941
+ readonly source: "react-doctor";
942
+ readonly originallyExternal: false;
943
+ readonly rule: {
944
+ readonly framework: "global";
945
+ readonly category: "State & Effects";
946
+ readonly id: string;
947
+ readonly severity: RuleSeverity;
948
+ readonly requires?: ReadonlyArray<string>;
949
+ readonly disabledBy?: ReadonlyArray<string>;
950
+ readonly tags?: ReadonlyArray<string>;
951
+ readonly defaultEnabled?: boolean;
952
+ readonly recommendation?: string;
953
+ readonly create: (context: RuleContext) => RuleVisitors;
954
+ };
955
+ }, {
956
+ readonly key: "react-doctor/js-async-reduce-without-awaited-acc";
957
+ readonly id: "js-async-reduce-without-awaited-acc";
958
+ readonly source: "react-doctor";
959
+ readonly originallyExternal: false;
960
+ readonly rule: {
961
+ readonly framework: "global";
962
+ readonly category: "Performance";
963
+ readonly id: string;
964
+ readonly severity: RuleSeverity;
965
+ readonly requires?: ReadonlyArray<string>;
966
+ readonly disabledBy?: ReadonlyArray<string>;
967
+ readonly tags?: ReadonlyArray<string>;
968
+ readonly defaultEnabled?: boolean;
969
+ readonly recommendation?: string;
970
+ readonly create: (context: RuleContext) => RuleVisitors;
971
+ };
812
972
  }, {
813
973
  readonly key: "react-doctor/js-batch-dom-css";
814
974
  readonly id: "js-batch-dom-css";
@@ -3478,6 +3638,91 @@ declare const REACT_DOCTOR_RULES: readonly [{
3478
3638
  readonly recommendation?: string;
3479
3639
  readonly create: (context: RuleContext) => RuleVisitors;
3480
3640
  };
3641
+ }, {
3642
+ readonly key: "react-doctor/preact-no-children-length";
3643
+ readonly id: "preact-no-children-length";
3644
+ readonly source: "react-doctor";
3645
+ readonly originallyExternal: false;
3646
+ readonly rule: {
3647
+ readonly framework: "preact";
3648
+ readonly category: "Preact";
3649
+ readonly id: string;
3650
+ readonly severity: RuleSeverity;
3651
+ readonly requires?: ReadonlyArray<string>;
3652
+ readonly disabledBy?: ReadonlyArray<string>;
3653
+ readonly tags?: ReadonlyArray<string>;
3654
+ readonly defaultEnabled?: boolean;
3655
+ readonly recommendation?: string;
3656
+ readonly create: (context: RuleContext) => RuleVisitors;
3657
+ };
3658
+ }, {
3659
+ readonly key: "react-doctor/preact-no-react-hooks-import";
3660
+ readonly id: "preact-no-react-hooks-import";
3661
+ readonly source: "react-doctor";
3662
+ readonly originallyExternal: false;
3663
+ readonly rule: {
3664
+ readonly framework: "preact";
3665
+ readonly category: "Preact";
3666
+ readonly id: string;
3667
+ readonly severity: RuleSeverity;
3668
+ readonly requires?: ReadonlyArray<string>;
3669
+ readonly disabledBy?: ReadonlyArray<string>;
3670
+ readonly tags?: ReadonlyArray<string>;
3671
+ readonly defaultEnabled?: boolean;
3672
+ readonly recommendation?: string;
3673
+ readonly create: (context: RuleContext) => RuleVisitors;
3674
+ };
3675
+ }, {
3676
+ readonly key: "react-doctor/preact-no-render-arguments";
3677
+ readonly id: "preact-no-render-arguments";
3678
+ readonly source: "react-doctor";
3679
+ readonly originallyExternal: false;
3680
+ readonly rule: {
3681
+ readonly framework: "preact";
3682
+ readonly category: "Preact";
3683
+ readonly id: string;
3684
+ readonly severity: RuleSeverity;
3685
+ readonly requires?: ReadonlyArray<string>;
3686
+ readonly disabledBy?: ReadonlyArray<string>;
3687
+ readonly tags?: ReadonlyArray<string>;
3688
+ readonly defaultEnabled?: boolean;
3689
+ readonly recommendation?: string;
3690
+ readonly create: (context: RuleContext) => RuleVisitors;
3691
+ };
3692
+ }, {
3693
+ readonly key: "react-doctor/preact-prefer-ondblclick";
3694
+ readonly id: "preact-prefer-ondblclick";
3695
+ readonly source: "react-doctor";
3696
+ readonly originallyExternal: false;
3697
+ readonly rule: {
3698
+ readonly framework: "preact";
3699
+ readonly category: "Preact";
3700
+ readonly id: string;
3701
+ readonly severity: RuleSeverity;
3702
+ readonly requires?: ReadonlyArray<string>;
3703
+ readonly disabledBy?: ReadonlyArray<string>;
3704
+ readonly tags?: ReadonlyArray<string>;
3705
+ readonly defaultEnabled?: boolean;
3706
+ readonly recommendation?: string;
3707
+ readonly create: (context: RuleContext) => RuleVisitors;
3708
+ };
3709
+ }, {
3710
+ readonly key: "react-doctor/preact-prefer-oninput";
3711
+ readonly id: "preact-prefer-oninput";
3712
+ readonly source: "react-doctor";
3713
+ readonly originallyExternal: false;
3714
+ readonly rule: {
3715
+ readonly framework: "preact";
3716
+ readonly category: "Preact";
3717
+ readonly id: string;
3718
+ readonly severity: RuleSeverity;
3719
+ readonly requires?: ReadonlyArray<string>;
3720
+ readonly disabledBy?: ReadonlyArray<string>;
3721
+ readonly tags?: ReadonlyArray<string>;
3722
+ readonly defaultEnabled?: boolean;
3723
+ readonly recommendation?: string;
3724
+ readonly create: (context: RuleContext) => RuleVisitors;
3725
+ };
3481
3726
  }, {
3482
3727
  readonly key: "react-doctor/prefer-dynamic-import";
3483
3728
  readonly id: "prefer-dynamic-import";
@@ -3529,6 +3774,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
3529
3774
  readonly recommendation?: string;
3530
3775
  readonly create: (context: RuleContext) => RuleVisitors;
3531
3776
  };
3777
+ }, {
3778
+ readonly key: "react-doctor/prefer-html-dialog";
3779
+ readonly id: "prefer-html-dialog";
3780
+ readonly source: "react-doctor";
3781
+ readonly originallyExternal: false;
3782
+ readonly rule: {
3783
+ readonly framework: "global";
3784
+ readonly category: "Accessibility";
3785
+ readonly id: string;
3786
+ readonly severity: RuleSeverity;
3787
+ readonly requires?: ReadonlyArray<string>;
3788
+ readonly disabledBy?: ReadonlyArray<string>;
3789
+ readonly tags?: ReadonlyArray<string>;
3790
+ readonly defaultEnabled?: boolean;
3791
+ readonly recommendation?: string;
3792
+ readonly create: (context: RuleContext) => RuleVisitors;
3793
+ };
3532
3794
  }, {
3533
3795
  readonly key: "react-doctor/prefer-tag-over-role";
3534
3796
  readonly id: "prefer-tag-over-role";
@@ -4141,6 +4403,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
4141
4403
  readonly recommendation?: string;
4142
4404
  readonly create: (context: RuleContext) => RuleVisitors;
4143
4405
  };
4406
+ }, {
4407
+ readonly key: "react-doctor/rn-list-missing-estimated-item-size";
4408
+ readonly id: "rn-list-missing-estimated-item-size";
4409
+ readonly source: "react-doctor";
4410
+ readonly originallyExternal: false;
4411
+ readonly rule: {
4412
+ readonly framework: "react-native";
4413
+ readonly category: "React Native";
4414
+ readonly tags: readonly string[];
4415
+ readonly id: string;
4416
+ readonly severity: RuleSeverity;
4417
+ readonly requires?: ReadonlyArray<string>;
4418
+ readonly disabledBy?: ReadonlyArray<string>;
4419
+ readonly defaultEnabled?: boolean;
4420
+ readonly recommendation?: string;
4421
+ readonly create: (context: RuleContext) => RuleVisitors;
4422
+ };
4144
4423
  }, {
4145
4424
  readonly key: "react-doctor/rn-list-recyclable-without-types";
4146
4425
  readonly id: "rn-list-recyclable-without-types";
@@ -4311,6 +4590,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
4311
4590
  readonly recommendation?: string;
4312
4591
  readonly create: (context: RuleContext) => RuleVisitors;
4313
4592
  };
4593
+ }, {
4594
+ readonly key: "react-doctor/rn-no-renderitem-key";
4595
+ readonly id: "rn-no-renderitem-key";
4596
+ readonly source: "react-doctor";
4597
+ readonly originallyExternal: false;
4598
+ readonly rule: {
4599
+ readonly framework: "react-native";
4600
+ readonly category: "React Native";
4601
+ readonly tags: readonly string[];
4602
+ readonly id: string;
4603
+ readonly severity: RuleSeverity;
4604
+ readonly requires?: ReadonlyArray<string>;
4605
+ readonly disabledBy?: ReadonlyArray<string>;
4606
+ readonly defaultEnabled?: boolean;
4607
+ readonly recommendation?: string;
4608
+ readonly create: (context: RuleContext) => RuleVisitors;
4609
+ };
4314
4610
  }, {
4315
4611
  readonly key: "react-doctor/rn-no-scroll-state";
4316
4612
  readonly id: "rn-no-scroll-state";
@@ -4414,8 +4710,8 @@ declare const REACT_DOCTOR_RULES: readonly [{
4414
4710
  readonly create: (context: RuleContext) => RuleVisitors;
4415
4711
  };
4416
4712
  }, {
4417
- readonly key: "react-doctor/rn-prefer-reanimated";
4418
- readonly id: "rn-prefer-reanimated";
4713
+ readonly key: "react-doctor/rn-prefer-pressable-over-gesture-detector";
4714
+ readonly id: "rn-prefer-pressable-over-gesture-detector";
4419
4715
  readonly source: "react-doctor";
4420
4716
  readonly originallyExternal: false;
4421
4717
  readonly rule: {
@@ -4431,8 +4727,8 @@ declare const REACT_DOCTOR_RULES: readonly [{
4431
4727
  readonly create: (context: RuleContext) => RuleVisitors;
4432
4728
  };
4433
4729
  }, {
4434
- readonly key: "react-doctor/rn-pressable-shared-value-mutation";
4435
- readonly id: "rn-pressable-shared-value-mutation";
4730
+ readonly key: "react-doctor/rn-prefer-reanimated";
4731
+ readonly id: "rn-prefer-reanimated";
4436
4732
  readonly source: "react-doctor";
4437
4733
  readonly originallyExternal: false;
4438
4734
  readonly rule: {
@@ -4448,8 +4744,8 @@ declare const REACT_DOCTOR_RULES: readonly [{
4448
4744
  readonly create: (context: RuleContext) => RuleVisitors;
4449
4745
  };
4450
4746
  }, {
4451
- readonly key: "react-doctor/rn-scrollview-dynamic-padding";
4452
- readonly id: "rn-scrollview-dynamic-padding";
4747
+ readonly key: "react-doctor/rn-pressable-shared-value-mutation";
4748
+ readonly id: "rn-pressable-shared-value-mutation";
4453
4749
  readonly source: "react-doctor";
4454
4750
  readonly originallyExternal: false;
4455
4751
  readonly rule: {
@@ -4465,7 +4761,41 @@ declare const REACT_DOCTOR_RULES: readonly [{
4465
4761
  readonly create: (context: RuleContext) => RuleVisitors;
4466
4762
  };
4467
4763
  }, {
4468
- readonly key: "react-doctor/rn-style-prefer-boxshadow";
4764
+ readonly key: "react-doctor/rn-scrollview-dynamic-padding";
4765
+ readonly id: "rn-scrollview-dynamic-padding";
4766
+ readonly source: "react-doctor";
4767
+ readonly originallyExternal: false;
4768
+ readonly rule: {
4769
+ readonly framework: "react-native";
4770
+ readonly category: "React Native";
4771
+ readonly tags: readonly string[];
4772
+ readonly id: string;
4773
+ readonly severity: RuleSeverity;
4774
+ readonly requires?: ReadonlyArray<string>;
4775
+ readonly disabledBy?: ReadonlyArray<string>;
4776
+ readonly defaultEnabled?: boolean;
4777
+ readonly recommendation?: string;
4778
+ readonly create: (context: RuleContext) => RuleVisitors;
4779
+ };
4780
+ }, {
4781
+ readonly key: "react-doctor/rn-scrollview-flex-in-content-container";
4782
+ readonly id: "rn-scrollview-flex-in-content-container";
4783
+ readonly source: "react-doctor";
4784
+ readonly originallyExternal: false;
4785
+ readonly rule: {
4786
+ readonly framework: "react-native";
4787
+ readonly category: "React Native";
4788
+ readonly tags: readonly string[];
4789
+ readonly id: string;
4790
+ readonly severity: RuleSeverity;
4791
+ readonly requires?: ReadonlyArray<string>;
4792
+ readonly disabledBy?: ReadonlyArray<string>;
4793
+ readonly defaultEnabled?: boolean;
4794
+ readonly recommendation?: string;
4795
+ readonly create: (context: RuleContext) => RuleVisitors;
4796
+ };
4797
+ }, {
4798
+ readonly key: "react-doctor/rn-style-prefer-boxshadow";
4469
4799
  readonly id: "rn-style-prefer-boxshadow";
4470
4800
  readonly source: "react-doctor";
4471
4801
  readonly originallyExternal: false;
@@ -5092,6 +5422,23 @@ declare const EXTERNAL_RULES: readonly [{
5092
5422
  readonly severity: "error";
5093
5423
  }];
5094
5424
  declare const RULES: readonly [{
5425
+ readonly key: "react-doctor/activity-wraps-effect-heavy-subtree";
5426
+ readonly id: "activity-wraps-effect-heavy-subtree";
5427
+ readonly source: "react-doctor";
5428
+ readonly originallyExternal: false;
5429
+ readonly rule: {
5430
+ readonly framework: "global";
5431
+ readonly category: "State & Effects";
5432
+ readonly id: string;
5433
+ readonly severity: RuleSeverity;
5434
+ readonly requires?: ReadonlyArray<string>;
5435
+ readonly disabledBy?: ReadonlyArray<string>;
5436
+ readonly tags?: ReadonlyArray<string>;
5437
+ readonly defaultEnabled?: boolean;
5438
+ readonly recommendation?: string;
5439
+ readonly create: (context: RuleContext) => RuleVisitors;
5440
+ };
5441
+ }, {
5095
5442
  readonly key: "react-doctor/advanced-event-handler-refs";
5096
5443
  readonly id: "advanced-event-handler-refs";
5097
5444
  readonly source: "react-doctor";
@@ -5686,6 +6033,23 @@ declare const RULES: readonly [{
5686
6033
  readonly recommendation?: string;
5687
6034
  readonly create: (context: RuleContext) => RuleVisitors;
5688
6035
  };
6036
+ }, {
6037
+ readonly key: "react-doctor/hooks-no-nan-in-deps";
6038
+ readonly id: "hooks-no-nan-in-deps";
6039
+ readonly source: "react-doctor";
6040
+ readonly originallyExternal: false;
6041
+ readonly rule: {
6042
+ readonly framework: "global";
6043
+ readonly category: "State & Effects";
6044
+ readonly id: string;
6045
+ readonly severity: RuleSeverity;
6046
+ readonly requires?: ReadonlyArray<string>;
6047
+ readonly disabledBy?: ReadonlyArray<string>;
6048
+ readonly tags?: ReadonlyArray<string>;
6049
+ readonly defaultEnabled?: boolean;
6050
+ readonly recommendation?: string;
6051
+ readonly create: (context: RuleContext) => RuleVisitors;
6052
+ };
5689
6053
  }, {
5690
6054
  readonly key: "react-doctor/html-has-lang";
5691
6055
  readonly id: "html-has-lang";
@@ -5703,6 +6067,57 @@ declare const RULES: readonly [{
5703
6067
  readonly recommendation?: string;
5704
6068
  readonly create: (context: RuleContext) => RuleVisitors;
5705
6069
  };
6070
+ }, {
6071
+ readonly key: "react-doctor/html-no-invalid-paragraph-child";
6072
+ readonly id: "html-no-invalid-paragraph-child";
6073
+ readonly source: "react-doctor";
6074
+ readonly originallyExternal: false;
6075
+ readonly rule: {
6076
+ readonly framework: "global";
6077
+ readonly category: "Correctness";
6078
+ readonly id: string;
6079
+ readonly severity: RuleSeverity;
6080
+ readonly requires?: ReadonlyArray<string>;
6081
+ readonly disabledBy?: ReadonlyArray<string>;
6082
+ readonly tags?: ReadonlyArray<string>;
6083
+ readonly defaultEnabled?: boolean;
6084
+ readonly recommendation?: string;
6085
+ readonly create: (context: RuleContext) => RuleVisitors;
6086
+ };
6087
+ }, {
6088
+ readonly key: "react-doctor/html-no-invalid-table-nesting";
6089
+ readonly id: "html-no-invalid-table-nesting";
6090
+ readonly source: "react-doctor";
6091
+ readonly originallyExternal: false;
6092
+ readonly rule: {
6093
+ readonly framework: "global";
6094
+ readonly category: "Correctness";
6095
+ readonly id: string;
6096
+ readonly severity: RuleSeverity;
6097
+ readonly requires?: ReadonlyArray<string>;
6098
+ readonly disabledBy?: ReadonlyArray<string>;
6099
+ readonly tags?: ReadonlyArray<string>;
6100
+ readonly defaultEnabled?: boolean;
6101
+ readonly recommendation?: string;
6102
+ readonly create: (context: RuleContext) => RuleVisitors;
6103
+ };
6104
+ }, {
6105
+ readonly key: "react-doctor/html-no-nested-interactive";
6106
+ readonly id: "html-no-nested-interactive";
6107
+ readonly source: "react-doctor";
6108
+ readonly originallyExternal: false;
6109
+ readonly rule: {
6110
+ readonly framework: "global";
6111
+ readonly category: "Correctness";
6112
+ readonly id: string;
6113
+ readonly severity: RuleSeverity;
6114
+ readonly requires?: ReadonlyArray<string>;
6115
+ readonly disabledBy?: ReadonlyArray<string>;
6116
+ readonly tags?: ReadonlyArray<string>;
6117
+ readonly defaultEnabled?: boolean;
6118
+ readonly recommendation?: string;
6119
+ readonly create: (context: RuleContext) => RuleVisitors;
6120
+ };
5706
6121
  }, {
5707
6122
  readonly key: "react-doctor/iframe-has-title";
5708
6123
  readonly id: "iframe-has-title";
@@ -5771,6 +6186,74 @@ declare const RULES: readonly [{
5771
6186
  readonly recommendation?: string;
5772
6187
  readonly create: (context: RuleContext) => RuleVisitors;
5773
6188
  };
6189
+ }, {
6190
+ readonly key: "react-doctor/jotai-derived-atom-returns-fresh-object";
6191
+ readonly id: "jotai-derived-atom-returns-fresh-object";
6192
+ readonly source: "react-doctor";
6193
+ readonly originallyExternal: false;
6194
+ readonly rule: {
6195
+ readonly framework: "global";
6196
+ readonly category: "State & Effects";
6197
+ readonly id: string;
6198
+ readonly severity: RuleSeverity;
6199
+ readonly requires?: ReadonlyArray<string>;
6200
+ readonly disabledBy?: ReadonlyArray<string>;
6201
+ readonly tags?: ReadonlyArray<string>;
6202
+ readonly defaultEnabled?: boolean;
6203
+ readonly recommendation?: string;
6204
+ readonly create: (context: RuleContext) => RuleVisitors;
6205
+ };
6206
+ }, {
6207
+ readonly key: "react-doctor/jotai-select-atom-in-render-body";
6208
+ readonly id: "jotai-select-atom-in-render-body";
6209
+ readonly source: "react-doctor";
6210
+ readonly originallyExternal: false;
6211
+ readonly rule: {
6212
+ readonly framework: "global";
6213
+ readonly category: "State & Effects";
6214
+ readonly id: string;
6215
+ readonly severity: RuleSeverity;
6216
+ readonly requires?: ReadonlyArray<string>;
6217
+ readonly disabledBy?: ReadonlyArray<string>;
6218
+ readonly tags?: ReadonlyArray<string>;
6219
+ readonly defaultEnabled?: boolean;
6220
+ readonly recommendation?: string;
6221
+ readonly create: (context: RuleContext) => RuleVisitors;
6222
+ };
6223
+ }, {
6224
+ readonly key: "react-doctor/jotai-tq-use-raw-query-atom";
6225
+ readonly id: "jotai-tq-use-raw-query-atom";
6226
+ readonly source: "react-doctor";
6227
+ readonly originallyExternal: false;
6228
+ readonly rule: {
6229
+ readonly framework: "global";
6230
+ readonly category: "State & Effects";
6231
+ readonly id: string;
6232
+ readonly severity: RuleSeverity;
6233
+ readonly requires?: ReadonlyArray<string>;
6234
+ readonly disabledBy?: ReadonlyArray<string>;
6235
+ readonly tags?: ReadonlyArray<string>;
6236
+ readonly defaultEnabled?: boolean;
6237
+ readonly recommendation?: string;
6238
+ readonly create: (context: RuleContext) => RuleVisitors;
6239
+ };
6240
+ }, {
6241
+ readonly key: "react-doctor/js-async-reduce-without-awaited-acc";
6242
+ readonly id: "js-async-reduce-without-awaited-acc";
6243
+ readonly source: "react-doctor";
6244
+ readonly originallyExternal: false;
6245
+ readonly rule: {
6246
+ readonly framework: "global";
6247
+ readonly category: "Performance";
6248
+ readonly id: string;
6249
+ readonly severity: RuleSeverity;
6250
+ readonly requires?: ReadonlyArray<string>;
6251
+ readonly disabledBy?: ReadonlyArray<string>;
6252
+ readonly tags?: ReadonlyArray<string>;
6253
+ readonly defaultEnabled?: boolean;
6254
+ readonly recommendation?: string;
6255
+ readonly create: (context: RuleContext) => RuleVisitors;
6256
+ };
5774
6257
  }, {
5775
6258
  readonly key: "react-doctor/js-batch-dom-css";
5776
6259
  readonly id: "js-batch-dom-css";
@@ -8440,6 +8923,91 @@ declare const RULES: readonly [{
8440
8923
  readonly recommendation?: string;
8441
8924
  readonly create: (context: RuleContext) => RuleVisitors;
8442
8925
  };
8926
+ }, {
8927
+ readonly key: "react-doctor/preact-no-children-length";
8928
+ readonly id: "preact-no-children-length";
8929
+ readonly source: "react-doctor";
8930
+ readonly originallyExternal: false;
8931
+ readonly rule: {
8932
+ readonly framework: "preact";
8933
+ readonly category: "Preact";
8934
+ readonly id: string;
8935
+ readonly severity: RuleSeverity;
8936
+ readonly requires?: ReadonlyArray<string>;
8937
+ readonly disabledBy?: ReadonlyArray<string>;
8938
+ readonly tags?: ReadonlyArray<string>;
8939
+ readonly defaultEnabled?: boolean;
8940
+ readonly recommendation?: string;
8941
+ readonly create: (context: RuleContext) => RuleVisitors;
8942
+ };
8943
+ }, {
8944
+ readonly key: "react-doctor/preact-no-react-hooks-import";
8945
+ readonly id: "preact-no-react-hooks-import";
8946
+ readonly source: "react-doctor";
8947
+ readonly originallyExternal: false;
8948
+ readonly rule: {
8949
+ readonly framework: "preact";
8950
+ readonly category: "Preact";
8951
+ readonly id: string;
8952
+ readonly severity: RuleSeverity;
8953
+ readonly requires?: ReadonlyArray<string>;
8954
+ readonly disabledBy?: ReadonlyArray<string>;
8955
+ readonly tags?: ReadonlyArray<string>;
8956
+ readonly defaultEnabled?: boolean;
8957
+ readonly recommendation?: string;
8958
+ readonly create: (context: RuleContext) => RuleVisitors;
8959
+ };
8960
+ }, {
8961
+ readonly key: "react-doctor/preact-no-render-arguments";
8962
+ readonly id: "preact-no-render-arguments";
8963
+ readonly source: "react-doctor";
8964
+ readonly originallyExternal: false;
8965
+ readonly rule: {
8966
+ readonly framework: "preact";
8967
+ readonly category: "Preact";
8968
+ readonly id: string;
8969
+ readonly severity: RuleSeverity;
8970
+ readonly requires?: ReadonlyArray<string>;
8971
+ readonly disabledBy?: ReadonlyArray<string>;
8972
+ readonly tags?: ReadonlyArray<string>;
8973
+ readonly defaultEnabled?: boolean;
8974
+ readonly recommendation?: string;
8975
+ readonly create: (context: RuleContext) => RuleVisitors;
8976
+ };
8977
+ }, {
8978
+ readonly key: "react-doctor/preact-prefer-ondblclick";
8979
+ readonly id: "preact-prefer-ondblclick";
8980
+ readonly source: "react-doctor";
8981
+ readonly originallyExternal: false;
8982
+ readonly rule: {
8983
+ readonly framework: "preact";
8984
+ readonly category: "Preact";
8985
+ readonly id: string;
8986
+ readonly severity: RuleSeverity;
8987
+ readonly requires?: ReadonlyArray<string>;
8988
+ readonly disabledBy?: ReadonlyArray<string>;
8989
+ readonly tags?: ReadonlyArray<string>;
8990
+ readonly defaultEnabled?: boolean;
8991
+ readonly recommendation?: string;
8992
+ readonly create: (context: RuleContext) => RuleVisitors;
8993
+ };
8994
+ }, {
8995
+ readonly key: "react-doctor/preact-prefer-oninput";
8996
+ readonly id: "preact-prefer-oninput";
8997
+ readonly source: "react-doctor";
8998
+ readonly originallyExternal: false;
8999
+ readonly rule: {
9000
+ readonly framework: "preact";
9001
+ readonly category: "Preact";
9002
+ readonly id: string;
9003
+ readonly severity: RuleSeverity;
9004
+ readonly requires?: ReadonlyArray<string>;
9005
+ readonly disabledBy?: ReadonlyArray<string>;
9006
+ readonly tags?: ReadonlyArray<string>;
9007
+ readonly defaultEnabled?: boolean;
9008
+ readonly recommendation?: string;
9009
+ readonly create: (context: RuleContext) => RuleVisitors;
9010
+ };
8443
9011
  }, {
8444
9012
  readonly key: "react-doctor/prefer-dynamic-import";
8445
9013
  readonly id: "prefer-dynamic-import";
@@ -8491,6 +9059,23 @@ declare const RULES: readonly [{
8491
9059
  readonly recommendation?: string;
8492
9060
  readonly create: (context: RuleContext) => RuleVisitors;
8493
9061
  };
9062
+ }, {
9063
+ readonly key: "react-doctor/prefer-html-dialog";
9064
+ readonly id: "prefer-html-dialog";
9065
+ readonly source: "react-doctor";
9066
+ readonly originallyExternal: false;
9067
+ readonly rule: {
9068
+ readonly framework: "global";
9069
+ readonly category: "Accessibility";
9070
+ readonly id: string;
9071
+ readonly severity: RuleSeverity;
9072
+ readonly requires?: ReadonlyArray<string>;
9073
+ readonly disabledBy?: ReadonlyArray<string>;
9074
+ readonly tags?: ReadonlyArray<string>;
9075
+ readonly defaultEnabled?: boolean;
9076
+ readonly recommendation?: string;
9077
+ readonly create: (context: RuleContext) => RuleVisitors;
9078
+ };
8494
9079
  }, {
8495
9080
  readonly key: "react-doctor/prefer-tag-over-role";
8496
9081
  readonly id: "prefer-tag-over-role";
@@ -9103,6 +9688,23 @@ declare const RULES: readonly [{
9103
9688
  readonly recommendation?: string;
9104
9689
  readonly create: (context: RuleContext) => RuleVisitors;
9105
9690
  };
9691
+ }, {
9692
+ readonly key: "react-doctor/rn-list-missing-estimated-item-size";
9693
+ readonly id: "rn-list-missing-estimated-item-size";
9694
+ readonly source: "react-doctor";
9695
+ readonly originallyExternal: false;
9696
+ readonly rule: {
9697
+ readonly framework: "react-native";
9698
+ readonly category: "React Native";
9699
+ readonly tags: readonly string[];
9700
+ readonly id: string;
9701
+ readonly severity: RuleSeverity;
9702
+ readonly requires?: ReadonlyArray<string>;
9703
+ readonly disabledBy?: ReadonlyArray<string>;
9704
+ readonly defaultEnabled?: boolean;
9705
+ readonly recommendation?: string;
9706
+ readonly create: (context: RuleContext) => RuleVisitors;
9707
+ };
9106
9708
  }, {
9107
9709
  readonly key: "react-doctor/rn-list-recyclable-without-types";
9108
9710
  readonly id: "rn-list-recyclable-without-types";
@@ -9273,6 +9875,23 @@ declare const RULES: readonly [{
9273
9875
  readonly recommendation?: string;
9274
9876
  readonly create: (context: RuleContext) => RuleVisitors;
9275
9877
  };
9878
+ }, {
9879
+ readonly key: "react-doctor/rn-no-renderitem-key";
9880
+ readonly id: "rn-no-renderitem-key";
9881
+ readonly source: "react-doctor";
9882
+ readonly originallyExternal: false;
9883
+ readonly rule: {
9884
+ readonly framework: "react-native";
9885
+ readonly category: "React Native";
9886
+ readonly tags: readonly string[];
9887
+ readonly id: string;
9888
+ readonly severity: RuleSeverity;
9889
+ readonly requires?: ReadonlyArray<string>;
9890
+ readonly disabledBy?: ReadonlyArray<string>;
9891
+ readonly defaultEnabled?: boolean;
9892
+ readonly recommendation?: string;
9893
+ readonly create: (context: RuleContext) => RuleVisitors;
9894
+ };
9276
9895
  }, {
9277
9896
  readonly key: "react-doctor/rn-no-scroll-state";
9278
9897
  readonly id: "rn-no-scroll-state";
@@ -9375,6 +9994,23 @@ declare const RULES: readonly [{
9375
9994
  readonly recommendation?: string;
9376
9995
  readonly create: (context: RuleContext) => RuleVisitors;
9377
9996
  };
9997
+ }, {
9998
+ readonly key: "react-doctor/rn-prefer-pressable-over-gesture-detector";
9999
+ readonly id: "rn-prefer-pressable-over-gesture-detector";
10000
+ readonly source: "react-doctor";
10001
+ readonly originallyExternal: false;
10002
+ readonly rule: {
10003
+ readonly framework: "react-native";
10004
+ readonly category: "React Native";
10005
+ readonly tags: readonly string[];
10006
+ readonly id: string;
10007
+ readonly severity: RuleSeverity;
10008
+ readonly requires?: ReadonlyArray<string>;
10009
+ readonly disabledBy?: ReadonlyArray<string>;
10010
+ readonly defaultEnabled?: boolean;
10011
+ readonly recommendation?: string;
10012
+ readonly create: (context: RuleContext) => RuleVisitors;
10013
+ };
9378
10014
  }, {
9379
10015
  readonly key: "react-doctor/rn-prefer-reanimated";
9380
10016
  readonly id: "rn-prefer-reanimated";
@@ -9426,6 +10062,23 @@ declare const RULES: readonly [{
9426
10062
  readonly recommendation?: string;
9427
10063
  readonly create: (context: RuleContext) => RuleVisitors;
9428
10064
  };
10065
+ }, {
10066
+ readonly key: "react-doctor/rn-scrollview-flex-in-content-container";
10067
+ readonly id: "rn-scrollview-flex-in-content-container";
10068
+ readonly source: "react-doctor";
10069
+ readonly originallyExternal: false;
10070
+ readonly rule: {
10071
+ readonly framework: "react-native";
10072
+ readonly category: "React Native";
10073
+ readonly tags: readonly string[];
10074
+ readonly id: string;
10075
+ readonly severity: RuleSeverity;
10076
+ readonly requires?: ReadonlyArray<string>;
10077
+ readonly disabledBy?: ReadonlyArray<string>;
10078
+ readonly defaultEnabled?: boolean;
10079
+ readonly recommendation?: string;
10080
+ readonly create: (context: RuleContext) => RuleVisitors;
10081
+ };
9429
10082
  }, {
9430
10083
  readonly key: "react-doctor/rn-style-prefer-boxshadow";
9431
10084
  readonly id: "rn-style-prefer-boxshadow";
@@ -10057,6 +10710,7 @@ declare const NEXTJS_RULES: Record<string, OxlintRuleSeverity>;
10057
10710
  declare const REACT_NATIVE_RULES: Record<string, OxlintRuleSeverity>;
10058
10711
  declare const TANSTACK_START_RULES: Record<string, OxlintRuleSeverity>;
10059
10712
  declare const TANSTACK_QUERY_RULES: Record<string, OxlintRuleSeverity>;
10713
+ declare const PREACT_RULES: Record<string, OxlintRuleSeverity>;
10060
10714
  declare const ALL_REACT_DOCTOR_RULES: Record<string, OxlintRuleSeverity>;
10061
10715
  declare const ALL_REACT_DOCTOR_RULE_KEYS: ReadonlySet<string>;
10062
10716
  declare const FRAMEWORK_SPECIFIC_RULE_KEYS: ReadonlySet<string>;
@@ -10070,5 +10724,5 @@ declare const REACT_NATIVE_DEPENDENCY_NAMES: ReadonlySet<string>;
10070
10724
  declare const REACT_NATIVE_DEPENDENCY_PREFIXES: ReadonlyArray<string>;
10071
10725
  declare const isReactNativeDependencyName: (dependencyName: string) => boolean;
10072
10726
  //#endregion
10073
- export { ALL_REACT_DOCTOR_RULES, ALL_REACT_DOCTOR_RULE_KEYS, EXTERNAL_RULES, type EsTreeNode, FRAMEWORK_SPECIFIC_RULE_KEYS, MOTION_LIBRARY_PACKAGES, NEXTJS_RULES, type OxlintRuleSeverity, REACT_COMPILER_RULES, REACT_DOCTOR_RULES, REACT_NATIVE_DEPENDENCY_NAMES, REACT_NATIVE_DEPENDENCY_PREFIXES, REACT_NATIVE_RULES, RECOMMENDED_RULES, RULES, type Rule, type RuleFramework, type RulePlugin, type RuleSeverity, type RuleVisitors, TANSTACK_QUERY_RULES, TANSTACK_START_RULES, plugin as default, isReactNativeDependencyName };
10727
+ export { ALL_REACT_DOCTOR_RULES, ALL_REACT_DOCTOR_RULE_KEYS, EXTERNAL_RULES, type EsTreeNode, FRAMEWORK_SPECIFIC_RULE_KEYS, MOTION_LIBRARY_PACKAGES, NEXTJS_RULES, type OxlintRuleSeverity, PREACT_RULES, REACT_COMPILER_RULES, REACT_DOCTOR_RULES, REACT_NATIVE_DEPENDENCY_NAMES, REACT_NATIVE_DEPENDENCY_PREFIXES, REACT_NATIVE_RULES, RECOMMENDED_RULES, RULES, type Rule, type RuleFramework, type RulePlugin, type RuleSeverity, type RuleVisitors, TANSTACK_QUERY_RULES, TANSTACK_START_RULES, plugin as default, isReactNativeDependencyName };
10074
10728
  //# sourceMappingURL=index.d.ts.map