oxlint-plugin-react-doctor 0.2.9 → 0.2.11-dev.f036b0f

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 -45
  2. package/dist/index.js +2302 -790
  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";
@@ -3699,23 +3961,6 @@ declare const REACT_DOCTOR_RULES: readonly [{
3699
3961
  readonly recommendation?: string;
3700
3962
  readonly create: (context: RuleContext) => RuleVisitors;
3701
3963
  };
3702
- }, {
3703
- readonly key: "react-doctor/react-compiler-destructure-method";
3704
- readonly id: "react-compiler-destructure-method";
3705
- readonly source: "react-doctor";
3706
- readonly originallyExternal: false;
3707
- readonly rule: {
3708
- readonly framework: "global";
3709
- readonly category: "Architecture";
3710
- readonly id: string;
3711
- readonly severity: RuleSeverity;
3712
- readonly requires?: ReadonlyArray<string>;
3713
- readonly disabledBy?: ReadonlyArray<string>;
3714
- readonly tags?: ReadonlyArray<string>;
3715
- readonly defaultEnabled?: boolean;
3716
- readonly recommendation?: string;
3717
- readonly create: (context: RuleContext) => RuleVisitors;
3718
- };
3719
3964
  }, {
3720
3965
  readonly key: "react-doctor/react-compiler-no-manual-memoization";
3721
3966
  readonly id: "react-compiler-no-manual-memoization";
@@ -4141,6 +4386,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
4141
4386
  readonly recommendation?: string;
4142
4387
  readonly create: (context: RuleContext) => RuleVisitors;
4143
4388
  };
4389
+ }, {
4390
+ readonly key: "react-doctor/rn-list-missing-estimated-item-size";
4391
+ readonly id: "rn-list-missing-estimated-item-size";
4392
+ readonly source: "react-doctor";
4393
+ readonly originallyExternal: false;
4394
+ readonly rule: {
4395
+ readonly framework: "react-native";
4396
+ readonly category: "React Native";
4397
+ readonly tags: readonly string[];
4398
+ readonly id: string;
4399
+ readonly severity: RuleSeverity;
4400
+ readonly requires?: ReadonlyArray<string>;
4401
+ readonly disabledBy?: ReadonlyArray<string>;
4402
+ readonly defaultEnabled?: boolean;
4403
+ readonly recommendation?: string;
4404
+ readonly create: (context: RuleContext) => RuleVisitors;
4405
+ };
4144
4406
  }, {
4145
4407
  readonly key: "react-doctor/rn-list-recyclable-without-types";
4146
4408
  readonly id: "rn-list-recyclable-without-types";
@@ -4312,8 +4574,8 @@ declare const REACT_DOCTOR_RULES: readonly [{
4312
4574
  readonly create: (context: RuleContext) => RuleVisitors;
4313
4575
  };
4314
4576
  }, {
4315
- readonly key: "react-doctor/rn-no-scroll-state";
4316
- readonly id: "rn-no-scroll-state";
4577
+ readonly key: "react-doctor/rn-no-renderitem-key";
4578
+ readonly id: "rn-no-renderitem-key";
4317
4579
  readonly source: "react-doctor";
4318
4580
  readonly originallyExternal: false;
4319
4581
  readonly rule: {
@@ -4329,8 +4591,8 @@ declare const REACT_DOCTOR_RULES: readonly [{
4329
4591
  readonly create: (context: RuleContext) => RuleVisitors;
4330
4592
  };
4331
4593
  }, {
4332
- readonly key: "react-doctor/rn-no-scrollview-mapped-list";
4333
- readonly id: "rn-no-scrollview-mapped-list";
4594
+ readonly key: "react-doctor/rn-no-scroll-state";
4595
+ readonly id: "rn-no-scroll-state";
4334
4596
  readonly source: "react-doctor";
4335
4597
  readonly originallyExternal: false;
4336
4598
  readonly rule: {
@@ -4346,8 +4608,8 @@ declare const REACT_DOCTOR_RULES: readonly [{
4346
4608
  readonly create: (context: RuleContext) => RuleVisitors;
4347
4609
  };
4348
4610
  }, {
4349
- readonly key: "react-doctor/rn-no-single-element-style-array";
4350
- readonly id: "rn-no-single-element-style-array";
4611
+ readonly key: "react-doctor/rn-no-scrollview-mapped-list";
4612
+ readonly id: "rn-no-scrollview-mapped-list";
4351
4613
  readonly source: "react-doctor";
4352
4614
  readonly originallyExternal: false;
4353
4615
  readonly rule: {
@@ -4363,7 +4625,24 @@ declare const REACT_DOCTOR_RULES: readonly [{
4363
4625
  readonly create: (context: RuleContext) => RuleVisitors;
4364
4626
  };
4365
4627
  }, {
4366
- readonly key: "react-doctor/rn-prefer-content-inset-adjustment";
4628
+ readonly key: "react-doctor/rn-no-single-element-style-array";
4629
+ readonly id: "rn-no-single-element-style-array";
4630
+ readonly source: "react-doctor";
4631
+ readonly originallyExternal: false;
4632
+ readonly rule: {
4633
+ readonly framework: "react-native";
4634
+ readonly category: "React Native";
4635
+ readonly tags: readonly string[];
4636
+ readonly id: string;
4637
+ readonly severity: RuleSeverity;
4638
+ readonly requires?: ReadonlyArray<string>;
4639
+ readonly disabledBy?: ReadonlyArray<string>;
4640
+ readonly defaultEnabled?: boolean;
4641
+ readonly recommendation?: string;
4642
+ readonly create: (context: RuleContext) => RuleVisitors;
4643
+ };
4644
+ }, {
4645
+ readonly key: "react-doctor/rn-prefer-content-inset-adjustment";
4367
4646
  readonly id: "rn-prefer-content-inset-adjustment";
4368
4647
  readonly source: "react-doctor";
4369
4648
  readonly originallyExternal: false;
@@ -4413,6 +4692,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
4413
4692
  readonly recommendation?: string;
4414
4693
  readonly create: (context: RuleContext) => RuleVisitors;
4415
4694
  };
4695
+ }, {
4696
+ readonly key: "react-doctor/rn-prefer-pressable-over-gesture-detector";
4697
+ readonly id: "rn-prefer-pressable-over-gesture-detector";
4698
+ readonly source: "react-doctor";
4699
+ readonly originallyExternal: false;
4700
+ readonly rule: {
4701
+ readonly framework: "react-native";
4702
+ readonly category: "React Native";
4703
+ readonly tags: readonly string[];
4704
+ readonly id: string;
4705
+ readonly severity: RuleSeverity;
4706
+ readonly requires?: ReadonlyArray<string>;
4707
+ readonly disabledBy?: ReadonlyArray<string>;
4708
+ readonly defaultEnabled?: boolean;
4709
+ readonly recommendation?: string;
4710
+ readonly create: (context: RuleContext) => RuleVisitors;
4711
+ };
4416
4712
  }, {
4417
4713
  readonly key: "react-doctor/rn-prefer-reanimated";
4418
4714
  readonly id: "rn-prefer-reanimated";
@@ -4464,6 +4760,23 @@ declare const REACT_DOCTOR_RULES: readonly [{
4464
4760
  readonly recommendation?: string;
4465
4761
  readonly create: (context: RuleContext) => RuleVisitors;
4466
4762
  };
4763
+ }, {
4764
+ readonly key: "react-doctor/rn-scrollview-flex-in-content-container";
4765
+ readonly id: "rn-scrollview-flex-in-content-container";
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
+ };
4467
4780
  }, {
4468
4781
  readonly key: "react-doctor/rn-style-prefer-boxshadow";
4469
4782
  readonly id: "rn-style-prefer-boxshadow";
@@ -5092,6 +5405,23 @@ declare const EXTERNAL_RULES: readonly [{
5092
5405
  readonly severity: "error";
5093
5406
  }];
5094
5407
  declare const RULES: readonly [{
5408
+ readonly key: "react-doctor/activity-wraps-effect-heavy-subtree";
5409
+ readonly id: "activity-wraps-effect-heavy-subtree";
5410
+ readonly source: "react-doctor";
5411
+ readonly originallyExternal: false;
5412
+ readonly rule: {
5413
+ readonly framework: "global";
5414
+ readonly category: "State & Effects";
5415
+ readonly id: string;
5416
+ readonly severity: RuleSeverity;
5417
+ readonly requires?: ReadonlyArray<string>;
5418
+ readonly disabledBy?: ReadonlyArray<string>;
5419
+ readonly tags?: ReadonlyArray<string>;
5420
+ readonly defaultEnabled?: boolean;
5421
+ readonly recommendation?: string;
5422
+ readonly create: (context: RuleContext) => RuleVisitors;
5423
+ };
5424
+ }, {
5095
5425
  readonly key: "react-doctor/advanced-event-handler-refs";
5096
5426
  readonly id: "advanced-event-handler-refs";
5097
5427
  readonly source: "react-doctor";
@@ -5686,6 +6016,23 @@ declare const RULES: readonly [{
5686
6016
  readonly recommendation?: string;
5687
6017
  readonly create: (context: RuleContext) => RuleVisitors;
5688
6018
  };
6019
+ }, {
6020
+ readonly key: "react-doctor/hooks-no-nan-in-deps";
6021
+ readonly id: "hooks-no-nan-in-deps";
6022
+ readonly source: "react-doctor";
6023
+ readonly originallyExternal: false;
6024
+ readonly rule: {
6025
+ readonly framework: "global";
6026
+ readonly category: "State & Effects";
6027
+ readonly id: string;
6028
+ readonly severity: RuleSeverity;
6029
+ readonly requires?: ReadonlyArray<string>;
6030
+ readonly disabledBy?: ReadonlyArray<string>;
6031
+ readonly tags?: ReadonlyArray<string>;
6032
+ readonly defaultEnabled?: boolean;
6033
+ readonly recommendation?: string;
6034
+ readonly create: (context: RuleContext) => RuleVisitors;
6035
+ };
5689
6036
  }, {
5690
6037
  readonly key: "react-doctor/html-has-lang";
5691
6038
  readonly id: "html-has-lang";
@@ -5703,6 +6050,57 @@ declare const RULES: readonly [{
5703
6050
  readonly recommendation?: string;
5704
6051
  readonly create: (context: RuleContext) => RuleVisitors;
5705
6052
  };
6053
+ }, {
6054
+ readonly key: "react-doctor/html-no-invalid-paragraph-child";
6055
+ readonly id: "html-no-invalid-paragraph-child";
6056
+ readonly source: "react-doctor";
6057
+ readonly originallyExternal: false;
6058
+ readonly rule: {
6059
+ readonly framework: "global";
6060
+ readonly category: "Correctness";
6061
+ readonly id: string;
6062
+ readonly severity: RuleSeverity;
6063
+ readonly requires?: ReadonlyArray<string>;
6064
+ readonly disabledBy?: ReadonlyArray<string>;
6065
+ readonly tags?: ReadonlyArray<string>;
6066
+ readonly defaultEnabled?: boolean;
6067
+ readonly recommendation?: string;
6068
+ readonly create: (context: RuleContext) => RuleVisitors;
6069
+ };
6070
+ }, {
6071
+ readonly key: "react-doctor/html-no-invalid-table-nesting";
6072
+ readonly id: "html-no-invalid-table-nesting";
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-nested-interactive";
6089
+ readonly id: "html-no-nested-interactive";
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
+ };
5706
6104
  }, {
5707
6105
  readonly key: "react-doctor/iframe-has-title";
5708
6106
  readonly id: "iframe-has-title";
@@ -5771,6 +6169,74 @@ declare const RULES: readonly [{
5771
6169
  readonly recommendation?: string;
5772
6170
  readonly create: (context: RuleContext) => RuleVisitors;
5773
6171
  };
6172
+ }, {
6173
+ readonly key: "react-doctor/jotai-derived-atom-returns-fresh-object";
6174
+ readonly id: "jotai-derived-atom-returns-fresh-object";
6175
+ readonly source: "react-doctor";
6176
+ readonly originallyExternal: false;
6177
+ readonly rule: {
6178
+ readonly framework: "global";
6179
+ readonly category: "State & Effects";
6180
+ readonly id: string;
6181
+ readonly severity: RuleSeverity;
6182
+ readonly requires?: ReadonlyArray<string>;
6183
+ readonly disabledBy?: ReadonlyArray<string>;
6184
+ readonly tags?: ReadonlyArray<string>;
6185
+ readonly defaultEnabled?: boolean;
6186
+ readonly recommendation?: string;
6187
+ readonly create: (context: RuleContext) => RuleVisitors;
6188
+ };
6189
+ }, {
6190
+ readonly key: "react-doctor/jotai-select-atom-in-render-body";
6191
+ readonly id: "jotai-select-atom-in-render-body";
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-tq-use-raw-query-atom";
6208
+ readonly id: "jotai-tq-use-raw-query-atom";
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/js-async-reduce-without-awaited-acc";
6225
+ readonly id: "js-async-reduce-without-awaited-acc";
6226
+ readonly source: "react-doctor";
6227
+ readonly originallyExternal: false;
6228
+ readonly rule: {
6229
+ readonly framework: "global";
6230
+ readonly category: "Performance";
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
+ };
5774
6240
  }, {
5775
6241
  readonly key: "react-doctor/js-batch-dom-css";
5776
6242
  readonly id: "js-batch-dom-css";
@@ -8440,6 +8906,91 @@ declare const RULES: readonly [{
8440
8906
  readonly recommendation?: string;
8441
8907
  readonly create: (context: RuleContext) => RuleVisitors;
8442
8908
  };
8909
+ }, {
8910
+ readonly key: "react-doctor/preact-no-children-length";
8911
+ readonly id: "preact-no-children-length";
8912
+ readonly source: "react-doctor";
8913
+ readonly originallyExternal: false;
8914
+ readonly rule: {
8915
+ readonly framework: "preact";
8916
+ readonly category: "Preact";
8917
+ readonly id: string;
8918
+ readonly severity: RuleSeverity;
8919
+ readonly requires?: ReadonlyArray<string>;
8920
+ readonly disabledBy?: ReadonlyArray<string>;
8921
+ readonly tags?: ReadonlyArray<string>;
8922
+ readonly defaultEnabled?: boolean;
8923
+ readonly recommendation?: string;
8924
+ readonly create: (context: RuleContext) => RuleVisitors;
8925
+ };
8926
+ }, {
8927
+ readonly key: "react-doctor/preact-no-react-hooks-import";
8928
+ readonly id: "preact-no-react-hooks-import";
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-render-arguments";
8945
+ readonly id: "preact-no-render-arguments";
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-prefer-ondblclick";
8962
+ readonly id: "preact-prefer-ondblclick";
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-oninput";
8979
+ readonly id: "preact-prefer-oninput";
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
+ };
8443
8994
  }, {
8444
8995
  readonly key: "react-doctor/prefer-dynamic-import";
8445
8996
  readonly id: "prefer-dynamic-import";
@@ -8491,6 +9042,23 @@ declare const RULES: readonly [{
8491
9042
  readonly recommendation?: string;
8492
9043
  readonly create: (context: RuleContext) => RuleVisitors;
8493
9044
  };
9045
+ }, {
9046
+ readonly key: "react-doctor/prefer-html-dialog";
9047
+ readonly id: "prefer-html-dialog";
9048
+ readonly source: "react-doctor";
9049
+ readonly originallyExternal: false;
9050
+ readonly rule: {
9051
+ readonly framework: "global";
9052
+ readonly category: "Accessibility";
9053
+ readonly id: string;
9054
+ readonly severity: RuleSeverity;
9055
+ readonly requires?: ReadonlyArray<string>;
9056
+ readonly disabledBy?: ReadonlyArray<string>;
9057
+ readonly tags?: ReadonlyArray<string>;
9058
+ readonly defaultEnabled?: boolean;
9059
+ readonly recommendation?: string;
9060
+ readonly create: (context: RuleContext) => RuleVisitors;
9061
+ };
8494
9062
  }, {
8495
9063
  readonly key: "react-doctor/prefer-tag-over-role";
8496
9064
  readonly id: "prefer-tag-over-role";
@@ -8661,23 +9229,6 @@ declare const RULES: readonly [{
8661
9229
  readonly recommendation?: string;
8662
9230
  readonly create: (context: RuleContext) => RuleVisitors;
8663
9231
  };
8664
- }, {
8665
- readonly key: "react-doctor/react-compiler-destructure-method";
8666
- readonly id: "react-compiler-destructure-method";
8667
- readonly source: "react-doctor";
8668
- readonly originallyExternal: false;
8669
- readonly rule: {
8670
- readonly framework: "global";
8671
- readonly category: "Architecture";
8672
- readonly id: string;
8673
- readonly severity: RuleSeverity;
8674
- readonly requires?: ReadonlyArray<string>;
8675
- readonly disabledBy?: ReadonlyArray<string>;
8676
- readonly tags?: ReadonlyArray<string>;
8677
- readonly defaultEnabled?: boolean;
8678
- readonly recommendation?: string;
8679
- readonly create: (context: RuleContext) => RuleVisitors;
8680
- };
8681
9232
  }, {
8682
9233
  readonly key: "react-doctor/react-compiler-no-manual-memoization";
8683
9234
  readonly id: "react-compiler-no-manual-memoization";
@@ -9103,6 +9654,23 @@ declare const RULES: readonly [{
9103
9654
  readonly recommendation?: string;
9104
9655
  readonly create: (context: RuleContext) => RuleVisitors;
9105
9656
  };
9657
+ }, {
9658
+ readonly key: "react-doctor/rn-list-missing-estimated-item-size";
9659
+ readonly id: "rn-list-missing-estimated-item-size";
9660
+ readonly source: "react-doctor";
9661
+ readonly originallyExternal: false;
9662
+ readonly rule: {
9663
+ readonly framework: "react-native";
9664
+ readonly category: "React Native";
9665
+ readonly tags: readonly string[];
9666
+ readonly id: string;
9667
+ readonly severity: RuleSeverity;
9668
+ readonly requires?: ReadonlyArray<string>;
9669
+ readonly disabledBy?: ReadonlyArray<string>;
9670
+ readonly defaultEnabled?: boolean;
9671
+ readonly recommendation?: string;
9672
+ readonly create: (context: RuleContext) => RuleVisitors;
9673
+ };
9106
9674
  }, {
9107
9675
  readonly key: "react-doctor/rn-list-recyclable-without-types";
9108
9676
  readonly id: "rn-list-recyclable-without-types";
@@ -9273,6 +9841,23 @@ declare const RULES: readonly [{
9273
9841
  readonly recommendation?: string;
9274
9842
  readonly create: (context: RuleContext) => RuleVisitors;
9275
9843
  };
9844
+ }, {
9845
+ readonly key: "react-doctor/rn-no-renderitem-key";
9846
+ readonly id: "rn-no-renderitem-key";
9847
+ readonly source: "react-doctor";
9848
+ readonly originallyExternal: false;
9849
+ readonly rule: {
9850
+ readonly framework: "react-native";
9851
+ readonly category: "React Native";
9852
+ readonly tags: readonly string[];
9853
+ readonly id: string;
9854
+ readonly severity: RuleSeverity;
9855
+ readonly requires?: ReadonlyArray<string>;
9856
+ readonly disabledBy?: ReadonlyArray<string>;
9857
+ readonly defaultEnabled?: boolean;
9858
+ readonly recommendation?: string;
9859
+ readonly create: (context: RuleContext) => RuleVisitors;
9860
+ };
9276
9861
  }, {
9277
9862
  readonly key: "react-doctor/rn-no-scroll-state";
9278
9863
  readonly id: "rn-no-scroll-state";
@@ -9375,6 +9960,23 @@ declare const RULES: readonly [{
9375
9960
  readonly recommendation?: string;
9376
9961
  readonly create: (context: RuleContext) => RuleVisitors;
9377
9962
  };
9963
+ }, {
9964
+ readonly key: "react-doctor/rn-prefer-pressable-over-gesture-detector";
9965
+ readonly id: "rn-prefer-pressable-over-gesture-detector";
9966
+ readonly source: "react-doctor";
9967
+ readonly originallyExternal: false;
9968
+ readonly rule: {
9969
+ readonly framework: "react-native";
9970
+ readonly category: "React Native";
9971
+ readonly tags: readonly string[];
9972
+ readonly id: string;
9973
+ readonly severity: RuleSeverity;
9974
+ readonly requires?: ReadonlyArray<string>;
9975
+ readonly disabledBy?: ReadonlyArray<string>;
9976
+ readonly defaultEnabled?: boolean;
9977
+ readonly recommendation?: string;
9978
+ readonly create: (context: RuleContext) => RuleVisitors;
9979
+ };
9378
9980
  }, {
9379
9981
  readonly key: "react-doctor/rn-prefer-reanimated";
9380
9982
  readonly id: "rn-prefer-reanimated";
@@ -9426,6 +10028,23 @@ declare const RULES: readonly [{
9426
10028
  readonly recommendation?: string;
9427
10029
  readonly create: (context: RuleContext) => RuleVisitors;
9428
10030
  };
10031
+ }, {
10032
+ readonly key: "react-doctor/rn-scrollview-flex-in-content-container";
10033
+ readonly id: "rn-scrollview-flex-in-content-container";
10034
+ readonly source: "react-doctor";
10035
+ readonly originallyExternal: false;
10036
+ readonly rule: {
10037
+ readonly framework: "react-native";
10038
+ readonly category: "React Native";
10039
+ readonly tags: readonly string[];
10040
+ readonly id: string;
10041
+ readonly severity: RuleSeverity;
10042
+ readonly requires?: ReadonlyArray<string>;
10043
+ readonly disabledBy?: ReadonlyArray<string>;
10044
+ readonly defaultEnabled?: boolean;
10045
+ readonly recommendation?: string;
10046
+ readonly create: (context: RuleContext) => RuleVisitors;
10047
+ };
9429
10048
  }, {
9430
10049
  readonly key: "react-doctor/rn-style-prefer-boxshadow";
9431
10050
  readonly id: "rn-style-prefer-boxshadow";
@@ -10057,6 +10676,7 @@ declare const NEXTJS_RULES: Record<string, OxlintRuleSeverity>;
10057
10676
  declare const REACT_NATIVE_RULES: Record<string, OxlintRuleSeverity>;
10058
10677
  declare const TANSTACK_START_RULES: Record<string, OxlintRuleSeverity>;
10059
10678
  declare const TANSTACK_QUERY_RULES: Record<string, OxlintRuleSeverity>;
10679
+ declare const PREACT_RULES: Record<string, OxlintRuleSeverity>;
10060
10680
  declare const ALL_REACT_DOCTOR_RULES: Record<string, OxlintRuleSeverity>;
10061
10681
  declare const ALL_REACT_DOCTOR_RULE_KEYS: ReadonlySet<string>;
10062
10682
  declare const FRAMEWORK_SPECIFIC_RULE_KEYS: ReadonlySet<string>;
@@ -10070,5 +10690,5 @@ declare const REACT_NATIVE_DEPENDENCY_NAMES: ReadonlySet<string>;
10070
10690
  declare const REACT_NATIVE_DEPENDENCY_PREFIXES: ReadonlyArray<string>;
10071
10691
  declare const isReactNativeDependencyName: (dependencyName: string) => boolean;
10072
10692
  //#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 };
10693
+ 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
10694
  //# sourceMappingURL=index.d.ts.map