@pobammer-ts/small-rules 2.6.0 → 2.8.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 CHANGED
@@ -8,7 +8,7 @@ A collection of [Oxlint](https://oxc.rs)-native rules for linting [roblox-ts](ht
8
8
  ni -D @pobammer-ts/small-rules
9
9
  ```
10
10
 
11
- This package is an [Oxlint plugin](https://oxc.rs/docs/guide/usage/plugins) and must be used with [Oxlint](https://oxc.rs) v1.69.0 or later. It also requires TypeScript 6 and Node.js `^20.19.0` / `>=22.12.0`.
11
+ This package is an [Oxlint plugin](https://oxc.rs/docs/guide/usage/plugins) and must be used with [Oxlint](https://oxc.rs) v1.69.0 or later. It supports TypeScript versions from 5 up to, but not including, 8 and requires Node.js `^20.19.0` or `>=22.12.0`.
12
12
 
13
13
  ## Configuration
14
14
 
@@ -28,7 +28,7 @@ All rules are namespaced under the `small-rules/` prefix. Pick the subset that f
28
28
 
29
29
  ## Rules
30
30
 
31
- Full rule documentation is forthcoming alongside the project docs site.
31
+ Browse the [complete rule catalog](https://howmanysmall.github.io/small-rules/rules/) for source-backed descriptions, configuration, diagnostics, and examples.
32
32
 
33
33
  ## License
34
34
 
package/dist/index.d.ts CHANGED
@@ -36,6 +36,9 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
36
36
  readonly additionalProperties: false;
37
37
  readonly properties: {
38
38
  readonly bannedTypes: {
39
+ readonly default: {
40
+ readonly Omit: "Except";
41
+ };
39
42
  readonly description: "Array of banned type names or an object mapping banned type names to preferred replacement names.";
40
43
  readonly oneOf: readonly [{
41
44
  readonly items: {
@@ -55,8 +58,9 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
55
58
  "directive-disable-enable-pair": import("oxlint-plugin-utilities").CreateRule<readonly [{
56
59
  readonly additionalProperties: false;
57
60
  readonly properties: {
58
- allowWholeFile: {
59
- type: "boolean";
61
+ readonly allowWholeFile: {
62
+ readonly description: "Allow a disable directive that covers the entire file.";
63
+ readonly type: "boolean";
60
64
  };
61
65
  };
62
66
  readonly type: "object";
@@ -76,6 +80,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
76
80
  readonly additionalProperties: false;
77
81
  readonly properties: {
78
82
  readonly allow: {
83
+ readonly description: "Directive kinds that are still allowed in block comments.";
79
84
  readonly items: {
80
85
  type: "string";
81
86
  };
@@ -89,6 +94,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
89
94
  readonly additionalProperties: false;
90
95
  readonly properties: {
91
96
  readonly ignore: {
97
+ readonly description: "Directive kinds that do not require a description.";
92
98
  readonly items: {
93
99
  type: "string";
94
100
  };
@@ -102,24 +108,28 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
102
108
  readonly additionalProperties: false;
103
109
  readonly properties: {
104
110
  readonly baseThreshold: {
111
+ readonly default: number;
112
+ readonly description: "Minimum complexity score before missing Ianitor.Check<T> annotations are reported.";
105
113
  readonly minimum: 1;
106
114
  readonly type: "number";
107
115
  };
108
116
  readonly errorThreshold: {
117
+ readonly default: number;
118
+ readonly description: "Complexity score used to cap recursive analysis before reporting is determined.";
109
119
  readonly minimum: 1;
110
120
  readonly type: "number";
111
121
  };
112
122
  readonly interfacePenalty: {
123
+ readonly default: number;
124
+ readonly description: "Complexity penalty applied when an Ianitor validator builds an interface-like shape.";
113
125
  readonly minimum: 1;
114
126
  readonly type: "number";
115
127
  };
116
128
  readonly performanceMode: {
129
+ readonly default: boolean;
130
+ readonly description: "Whether repeated type nodes are cached during complexity analysis.";
117
131
  readonly type: "boolean";
118
132
  };
119
- readonly warnThreshold: {
120
- readonly minimum: 1;
121
- readonly type: "number";
122
- };
123
133
  };
124
134
  readonly type: "object";
125
135
  }], "complexInterfaceNeedsCheck" | "missingIanitorCheckType", undefined>;
@@ -133,7 +143,11 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
133
143
  readonly type: "string";
134
144
  };
135
145
  readonly hooks: {
136
- readonly description: "Array of effect hook entries to check for memoized dependencies";
146
+ readonly default: {
147
+ dependenciesIndex: number;
148
+ name: string;
149
+ }[];
150
+ readonly description: "Effect hooks checked by default; configured entries are added to this set.";
137
151
  readonly items: {
138
152
  readonly additionalProperties: false;
139
153
  readonly properties: {
@@ -183,6 +197,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
183
197
  readonly properties: {
184
198
  readonly allowAutofix: {
185
199
  readonly default: false;
200
+ readonly description: "Allow the fixer to replace safe append assignments with array.push(value).";
186
201
  readonly type: "boolean";
187
202
  };
188
203
  readonly environment: {
@@ -238,6 +253,32 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
238
253
  };
239
254
  readonly type: "array";
240
255
  };
256
+ readonly synchronousCallbacks: {
257
+ readonly items: {
258
+ readonly additionalProperties: false;
259
+ readonly properties: {
260
+ readonly callbackArgumentIndexes: {
261
+ readonly items: {
262
+ readonly minimum: 0;
263
+ readonly type: "integer";
264
+ };
265
+ readonly minItems: 1;
266
+ readonly type: "array";
267
+ readonly uniqueItems: true;
268
+ };
269
+ readonly calleePath: {
270
+ readonly items: {
271
+ readonly type: "string";
272
+ };
273
+ readonly minItems: 1;
274
+ readonly type: "array";
275
+ };
276
+ };
277
+ readonly required: readonly ["callbackArgumentIndexes", "calleePath"];
278
+ readonly type: "object";
279
+ };
280
+ readonly type: "array";
281
+ };
241
282
  };
242
283
  readonly type: "object";
243
284
  }], "noAsyncInSystem", undefined>;
@@ -247,6 +288,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
247
288
  readonly properties: {
248
289
  readonly reportUnknownComponents: {
249
290
  readonly default: true;
291
+ readonly description: "Report new Color3(...) calls when one or more components are not numeric literals.";
250
292
  readonly type: "boolean";
251
293
  };
252
294
  };
@@ -267,6 +309,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
267
309
  readonly additionalProperties: false;
268
310
  readonly properties: {
269
311
  readonly loopExitCalls: {
312
+ readonly description: "Call expressions that count as intentional loop exits inside constant loops.";
270
313
  readonly items: {
271
314
  readonly minLength: 1;
272
315
  readonly type: "string";
@@ -281,6 +324,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
281
324
  readonly additionalProperties: false;
282
325
  readonly properties: {
283
326
  readonly eventsImportPaths: {
327
+ readonly description: "Import paths that identify Events objects whose callbacks should be checked.";
284
328
  readonly items: {
285
329
  readonly minLength: 1;
286
330
  readonly type: "string";
@@ -291,6 +335,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
291
335
  readonly required: readonly ["eventsImportPaths"];
292
336
  readonly type: "object";
293
337
  }], "preferFunctions", undefined>;
338
+ "no-filter-map-chain": import("oxlint-plugin-utilities").CreateRule<readonly [], "avoidFilterMapChain", undefined>;
294
339
  "no-giant-component": import("oxlint-plugin-utilities").CreateRule<undefined, "giantComponent", undefined>;
295
340
  "no-god-components": import("oxlint-plugin-utilities").CreateRule<readonly [{
296
341
  readonly additionalProperties: false;
@@ -301,6 +346,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
301
346
  readonly type: "boolean";
302
347
  };
303
348
  readonly ignoreComponents: {
349
+ readonly default: readonly [];
304
350
  readonly description: "Component names to ignore.";
305
351
  readonly items: {
306
352
  readonly type: "string";
@@ -364,6 +410,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
364
410
  readonly properties: {
365
411
  readonly allowAutofix: {
366
412
  readonly default: false;
413
+ readonly description: "Allow the fixer to replace standalone ++ and -- statements and for-loop updates.";
367
414
  readonly type: "boolean";
368
415
  };
369
416
  };
@@ -396,6 +443,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
396
443
  readonly additionalProperties: false;
397
444
  readonly properties: {
398
445
  readonly constructors: {
446
+ readonly default: readonly string[];
399
447
  readonly description: "Constructor identifiers that should be disallowed inside useMemo callbacks.";
400
448
  readonly items: {
401
449
  readonly type: "string";
@@ -470,6 +518,8 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
470
518
  readonly additionalProperties: false;
471
519
  readonly properties: {
472
520
  environment: {
521
+ default: string;
522
+ description: string;
473
523
  enum: readonly ["roblox-ts", "standard"];
474
524
  type: string;
475
525
  };
@@ -478,7 +528,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
478
528
  }], "useJsx", undefined>;
479
529
  "no-table-create-map": import("oxlint-plugin-utilities").CreateRule<readonly [], "avoidConstructThenMap", undefined>;
480
530
  "no-task-wait": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noPromiseDelayAwait" | "noTaskWait", undefined>;
481
- "no-underscore-react-props": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noUnderscoreReactProp", undefined>;
531
+ "no-underscore-react-props": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noUnderscoreReactProperty", undefined>;
482
532
  "no-unused-imports": import("oxlint-plugin-utilities").CreateRule<readonly [{
483
533
  readonly additionalProperties: false;
484
534
  readonly properties: {
@@ -495,6 +545,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
495
545
  readonly properties: {
496
546
  readonly environment: {
497
547
  readonly default: "roblox-ts";
548
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
498
549
  readonly enum: readonly ["roblox-ts", "standard"];
499
550
  readonly type: "string";
500
551
  };
@@ -507,6 +558,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
507
558
  readonly properties: {
508
559
  readonly ignoreCallPatterns: {
509
560
  readonly default: readonly string[];
561
+ readonly description: "Regular expression patterns for call expressions that should be ignored.";
510
562
  readonly items: {
511
563
  readonly type: "string";
512
564
  };
@@ -527,6 +579,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
527
579
  };
528
580
  readonly hooks: {
529
581
  readonly default: readonly ["useEffect", "useLayoutEffect", "useInsertionEffect"];
582
+ readonly description: "Effect hook names checked for avoidable effect patterns.";
530
583
  readonly items: {
531
584
  readonly type: "string";
532
585
  };
@@ -534,6 +587,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
534
587
  };
535
588
  readonly propertyCallbackPrefixes: {
536
589
  readonly default: readonly ["on"];
590
+ readonly description: "Property name prefixes treated as event callback props.";
537
591
  readonly items: {
538
592
  readonly type: "string";
539
593
  };
@@ -549,58 +603,72 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
549
603
  };
550
604
  readonly reportAdjustState: {
551
605
  readonly default: true;
606
+ readonly description: "Report effects that only adjust state after render.";
552
607
  readonly type: "boolean";
553
608
  };
554
609
  readonly reportDerivedState: {
555
610
  readonly default: true;
611
+ readonly description: "Report effects that copy derived values into state.";
556
612
  readonly type: "boolean";
557
613
  };
558
614
  readonly reportDuplicateDeps: {
559
615
  readonly default: true;
616
+ readonly description: "Report duplicate entries in effect dependency arrays.";
560
617
  readonly type: "boolean";
561
618
  };
562
619
  readonly reportEffectChain: {
563
620
  readonly default: true;
621
+ readonly description: "Report effects that only trigger another effect through state.";
564
622
  readonly type: "boolean";
565
623
  };
566
624
  readonly reportEmptyEffect: {
567
625
  readonly default: true;
626
+ readonly description: "Report effects whose callback body is empty.";
568
627
  readonly type: "boolean";
569
628
  };
570
629
  readonly reportEventFlag: {
571
630
  readonly default: true;
631
+ readonly description: "Report effects that react to event flags stored in state.";
572
632
  readonly type: "boolean";
573
633
  };
574
634
  readonly reportEventSpecificLogic: {
575
635
  readonly default: true;
636
+ readonly description: "Report effects that move event-specific logic out of the event callback.";
576
637
  readonly type: "boolean";
577
638
  };
578
639
  readonly reportExternalStore: {
579
640
  readonly default: true;
641
+ readonly description: "Report effects that mirror external store values into local state.";
580
642
  readonly type: "boolean";
581
643
  };
582
644
  readonly reportInitializeState: {
583
645
  readonly default: true;
646
+ readonly description: "Report effects that only initialize state after mount.";
584
647
  readonly type: "boolean";
585
648
  };
586
649
  readonly reportLogOnly: {
587
650
  readonly default: true;
651
+ readonly description: "Report effects that only log values.";
588
652
  readonly type: "boolean";
589
653
  };
590
654
  readonly reportMixedDerivedState: {
591
655
  readonly default: true;
656
+ readonly description: "Report effects that mix derived-state updates with other work.";
592
657
  readonly type: "boolean";
593
658
  };
594
659
  readonly reportNotifyParent: {
595
660
  readonly default: true;
661
+ readonly description: "Report effects that only notify a parent through a callback prop.";
596
662
  readonly type: "boolean";
597
663
  };
598
664
  readonly reportPassRefToParent: {
599
665
  readonly default: true;
666
+ readonly description: "Report effects that only pass a ref value to a parent callback.";
600
667
  readonly type: "boolean";
601
668
  };
602
669
  readonly reportResetState: {
603
670
  readonly default: true;
671
+ readonly description: "Report effects that reset local state when inputs change.";
604
672
  readonly type: "boolean";
605
673
  };
606
674
  readonly stateHooks: {
@@ -619,15 +687,19 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
619
687
  readonly properties: {
620
688
  readonly dependencyMode: {
621
689
  readonly default: "non-updating";
690
+ readonly description: "Dependency-array mode used to decide whether a memoized value is static.";
622
691
  readonly enum: readonly ["empty-or-omitted", "non-updating", "aggressive"];
623
692
  readonly type: "string";
624
693
  };
625
694
  readonly environment: {
626
695
  readonly default: "roblox-ts";
696
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
627
697
  readonly enum: readonly ["roblox-ts", "standard"];
628
698
  readonly type: "string";
629
699
  };
630
700
  readonly staticGlobalFactories: {
701
+ readonly default: readonly string[];
702
+ readonly description: "Global constructors and factories whose calls are treated as static values.";
631
703
  readonly items: {
632
704
  readonly type: "string";
633
705
  };
@@ -639,11 +711,13 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
639
711
  "no-useless-use-spring": import("oxlint-plugin-utilities").CreateRule<readonly [{
640
712
  readonly additionalProperties: false;
641
713
  readonly default: {
714
+ readonly springHooks: readonly string[];
642
715
  readonly staticGlobalFactories: readonly string[];
643
716
  readonly treatEmptyDepsAsViolation: true;
644
717
  };
645
718
  readonly properties: {
646
719
  readonly springHooks: {
720
+ readonly default: readonly string[];
647
721
  readonly description: "Hook identifiers that should be treated as spring hooks";
648
722
  readonly items: {
649
723
  readonly type: "string";
@@ -674,11 +748,31 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
674
748
  }], "unexpectedAssignment" | "unexpectedClassProperty", undefined>;
675
749
  "prefer-constant-dispatch": import("oxlint-plugin-utilities").CreateRule<readonly [], "preferConstantDispatch", undefined>;
676
750
  "prefer-context-stack": import("oxlint-plugin-utilities").CreateRule<readonly [], "preferContextStack", undefined>;
751
+ "prefer-direct-hook-imports": import("oxlint-plugin-utilities").CreateRule<readonly [{
752
+ readonly additionalProperties: false;
753
+ readonly properties: {
754
+ readonly allowedHooks: {
755
+ readonly description: "Hook names that are allowed to be called via React namespace.";
756
+ readonly items: {
757
+ readonly type: "string";
758
+ };
759
+ readonly type: "array";
760
+ };
761
+ readonly environment: {
762
+ default: string;
763
+ description: string;
764
+ enum: readonly ["roblox-ts", "standard"];
765
+ type: string;
766
+ };
767
+ };
768
+ readonly type: "object";
769
+ }], "preferDirectHookImport", undefined>;
677
770
  "prefer-early-return": import("oxlint-plugin-utilities").CreateRule<readonly [{
678
771
  readonly additionalProperties: false;
679
772
  readonly properties: {
680
773
  readonly maximumStatements: {
681
774
  readonly default: 1;
775
+ readonly description: "Maximum allowed statement count inside the guarded branch before reporting.";
682
776
  readonly minimum: 0;
683
777
  readonly type: "number";
684
778
  };
@@ -689,24 +783,34 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
689
783
  readonly additionalProperties: false;
690
784
  readonly properties: {
691
785
  readonly additionalAssertionFunctions: {
786
+ readonly default: readonly [];
787
+ readonly description: "Additional assertion function names counted as test assertions.";
692
788
  readonly items: {
693
789
  readonly type: "string";
694
790
  };
695
791
  readonly type: "array";
696
792
  };
697
793
  readonly additionalExpectCallNames: {
794
+ readonly default: readonly [];
795
+ readonly description: "Additional expect-like call names counted when checking assertion counts.";
698
796
  readonly items: {
699
797
  readonly type: "string";
700
798
  };
701
799
  readonly type: "array";
702
800
  };
703
801
  readonly onlyFunctionsWithAsyncKeyword: {
802
+ readonly default: false;
803
+ readonly description: "Only require assertion guards for test callbacks marked async.";
704
804
  readonly type: "boolean";
705
805
  };
706
806
  readonly onlyFunctionsWithExpectInCallback: {
807
+ readonly default: false;
808
+ readonly description: "Only require assertion guards when expect is called inside a nested callback.";
707
809
  readonly type: "boolean";
708
810
  };
709
811
  readonly onlyFunctionsWithExpectInLoop: {
812
+ readonly default: false;
813
+ readonly description: "Only require assertion guards when expect is called inside a loop.";
710
814
  readonly type: "boolean";
711
815
  };
712
816
  };
@@ -729,6 +833,12 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
729
833
  };
730
834
  readonly type: "array";
731
835
  };
836
+ readonly environment: {
837
+ default: string;
838
+ description: string;
839
+ enum: readonly ["roblox-ts", "standard"];
840
+ type: string;
841
+ };
732
842
  };
733
843
  readonly type: "object";
734
844
  }], "hoistableJsxElement", undefined>;
@@ -753,49 +863,70 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
753
863
  readonly additionalProperties: {
754
864
  readonly type: "boolean";
755
865
  };
866
+ readonly default: Record<string, boolean>;
867
+ readonly defaultLabel: "default allow list";
868
+ readonly description: "Names that should be allowed even when they match a discouraged abbreviation.";
756
869
  readonly type: "object";
757
870
  };
758
871
  readonly allowPropertyAccess: {
872
+ readonly default: string[];
873
+ readonly description: "Property names that may keep abbreviated member access.";
759
874
  readonly items: {
760
875
  readonly type: "string";
761
876
  };
762
877
  readonly type: "array";
763
878
  };
764
879
  readonly checkDefaultAndNamespaceImports: {
880
+ readonly default: "internal";
881
+ readonly description: "Whether default and namespace import local names should be checked.";
765
882
  readonly enum: readonly [false, true, "internal"];
766
883
  };
767
884
  readonly checkFilenames: {
885
+ readonly default: true;
886
+ readonly description: "Whether file names should be checked for abbreviations.";
768
887
  readonly type: "boolean";
769
888
  };
770
889
  readonly checkProperties: {
890
+ readonly default: false;
891
+ readonly description: "Whether object, member, and JSX property names should be checked.";
771
892
  readonly type: "boolean";
772
893
  };
773
894
  readonly checkShorthandImports: {
895
+ readonly default: "internal";
896
+ readonly description: "Whether renamed shorthand imports should be checked.";
774
897
  readonly enum: readonly [false, true, "internal"];
775
898
  };
776
899
  readonly checkShorthandProperties: {
900
+ readonly default: true;
901
+ readonly description: "Whether shorthand object property names should be checked.";
777
902
  readonly type: "boolean";
778
903
  };
779
904
  readonly checkVariables: {
905
+ readonly default: true;
906
+ readonly description: "Whether variable, function, class, and component names should be checked.";
780
907
  readonly type: "boolean";
781
908
  };
782
909
  readonly extendDefaultAllowList: {
910
+ readonly default: true;
911
+ readonly description: "Merge configured allowList entries with the default allow list.";
783
912
  readonly type: "boolean";
784
913
  };
785
914
  readonly extendDefaultReplacements: {
915
+ readonly default: true;
916
+ readonly description: "Merge configured replacements with the default replacement map.";
786
917
  readonly type: "boolean";
787
918
  };
788
919
  readonly ignore: {
920
+ readonly default: string[];
921
+ readonly description: "Names or regular expression patterns that should be ignored.";
789
922
  readonly items: {
790
- readonly oneOf: readonly [{
791
- readonly type: "object";
792
- }, {
793
- readonly type: "string";
794
- }];
923
+ readonly type: "string";
795
924
  };
796
925
  readonly type: "array";
797
926
  };
798
927
  readonly ignoreShorthands: {
928
+ readonly default: readonly [];
929
+ readonly description: "Shorthand names that should not be reported.";
799
930
  readonly items: {
800
931
  readonly type: "string";
801
932
  };
@@ -812,12 +943,18 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
812
943
  readonly type: "object";
813
944
  }];
814
945
  };
946
+ readonly default: Record<string, Record<string, boolean>>;
947
+ readonly defaultLabel: "default replacement map";
948
+ readonly description: "Replacement suggestions for discouraged names.";
815
949
  readonly type: "object";
816
950
  };
817
951
  readonly shorthands: {
818
952
  readonly additionalProperties: {
819
953
  readonly type: "string";
820
954
  };
955
+ readonly default: Record<string, string>;
956
+ readonly defaultLabel: "default shorthands";
957
+ readonly description: "Shorthand names and the full names they should expand to.";
821
958
  readonly type: "object";
822
959
  };
823
960
  };
@@ -843,6 +980,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
843
980
  readonly additionalProperties: {
844
981
  readonly type: "string";
845
982
  };
983
+ readonly description: "Class names mapped to the import source that must be instantiated at module scope.";
846
984
  readonly type: "object";
847
985
  };
848
986
  };
@@ -858,7 +996,17 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
858
996
  readonly type: "string";
859
997
  };
860
998
  readonly hooks: {
861
- readonly description: "Array of hook configuration objects with name and allowAsync settings";
999
+ readonly default: readonly [{
1000
+ readonly allowAsync: false;
1001
+ readonly name: "useEffect";
1002
+ }, {
1003
+ readonly allowAsync: false;
1004
+ readonly name: "useLayoutEffect";
1005
+ }, {
1006
+ readonly allowAsync: false;
1007
+ readonly name: "useInsertionEffect";
1008
+ }];
1009
+ readonly description: "Hook configuration objects with name and allowAsync settings.";
862
1010
  readonly items: {
863
1011
  readonly additionalProperties: false;
864
1012
  readonly properties: {
@@ -884,18 +1032,29 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
884
1032
  readonly properties: {
885
1033
  readonly allowConditionalClosers: {
886
1034
  readonly default: false;
1035
+ readonly description: "Allow closer calls that appear only on some conditional paths.";
887
1036
  readonly type: "boolean";
888
1037
  };
889
1038
  readonly allowMultipleOpeners: {
890
1039
  readonly default: true;
1040
+ readonly description: "Allow repeated opener calls before matching closer calls.";
891
1041
  readonly type: "boolean";
892
1042
  };
893
1043
  readonly maxNestingDepth: {
894
1044
  readonly default: 0;
1045
+ readonly description: "Maximum opener nesting depth before reporting; 0 disables the limit.";
895
1046
  readonly minimum: 0;
896
1047
  readonly type: "number";
897
1048
  };
898
1049
  readonly pairs: {
1050
+ readonly default: readonly [{
1051
+ readonly closer: "debug.profileend";
1052
+ readonly opener: "debug.profilebegin";
1053
+ readonly platform: "roblox";
1054
+ readonly requireSync: true;
1055
+ readonly yieldingFunctions: readonly ["task.wait", "wait", "*.WaitForChild", "*.*Async"];
1056
+ }];
1057
+ readonly description: "Opener and closer call pairs that must stay balanced.";
899
1058
  readonly items: {
900
1059
  readonly additionalProperties: false;
901
1060
  readonly properties: {
@@ -953,7 +1112,6 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
953
1112
  readonly type: "array";
954
1113
  };
955
1114
  };
956
- readonly required: readonly ["pairs"];
957
1115
  readonly type: "object";
958
1116
  }], "asyncViolation" | "conditionalOpener" | "maxNestingExceeded" | "multipleOpeners" | "robloxYieldViolation" | "unexpectedCloser" | "unpairedCloser" | "unpairedOpener" | "wrongOrder", undefined>;
959
1117
  "require-react-component-keys": import("oxlint-plugin-utilities").CreateRule<readonly [{
@@ -965,7 +1123,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
965
1123
  readonly type: "boolean";
966
1124
  };
967
1125
  readonly ignoreCallExpressions: {
968
- readonly default: readonly ["ReactTree.mount"];
1126
+ readonly default: readonly string[];
969
1127
  readonly description: "Function calls where JSX arguments don't need keys";
970
1128
  readonly items: {
971
1129
  readonly type: "string";
@@ -995,6 +1153,8 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
995
1153
  readonly additionalProperties: false;
996
1154
  readonly properties: {
997
1155
  environment: {
1156
+ default: string;
1157
+ description: string;
998
1158
  enum: readonly ["roblox-ts", "standard"];
999
1159
  type: string;
1000
1160
  };
@@ -1006,6 +1166,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1006
1166
  readonly properties: {
1007
1167
  readonly metric: {
1008
1168
  readonly default: "lines";
1169
+ readonly description: "Whether to report cases by line span or by statement count.";
1009
1170
  readonly enum: readonly ["lines", "statements"];
1010
1171
  readonly type: "string";
1011
1172
  };
@@ -1063,12 +1224,16 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1063
1224
  readonly additionalProperties: false;
1064
1225
  readonly properties: {
1065
1226
  readonly allow: {
1227
+ readonly default: readonly [];
1228
+ readonly description: "Regular expression patterns for imports allowed to cross component boundaries.";
1066
1229
  readonly items: {
1067
1230
  readonly type: "string";
1068
1231
  };
1069
1232
  readonly type: "array";
1070
1233
  };
1071
1234
  readonly maxDepth: {
1235
+ readonly default: 1;
1236
+ readonly description: "Maximum path depth allowed inside another component before reporting.";
1072
1237
  readonly type: "integer";
1073
1238
  };
1074
1239
  };
@@ -1078,6 +1243,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1078
1243
  readonly additionalProperties: false;
1079
1244
  readonly properties: {
1080
1245
  readonly hooks: {
1246
+ readonly default: readonly [];
1081
1247
  readonly description: "Array of custom hook entries to check for exhaustive dependencies";
1082
1248
  readonly items: {
1083
1249
  readonly additionalProperties: false;
@@ -1145,6 +1311,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1145
1311
  readonly additionalProperties: false;
1146
1312
  readonly properties: {
1147
1313
  readonly ignoreHooks: {
1314
+ readonly description: "Hook names that should be ignored even when they match the hook naming pattern.";
1148
1315
  readonly items: {
1149
1316
  readonly type: "string";
1150
1317
  };
@@ -1154,9 +1321,11 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1154
1321
  readonly additionalProperties: {
1155
1322
  readonly type: "boolean";
1156
1323
  };
1324
+ readonly description: "Import sources or namespace names mapped to whether their hooks should be checked.";
1157
1325
  readonly type: "object";
1158
1326
  };
1159
1327
  readonly onlyHooks: {
1328
+ readonly description: "If set, only these hook names are checked.";
1160
1329
  readonly items: {
1161
1330
  readonly type: "string";
1162
1331
  };