@pobammer-ts/small-rules 2.14.0 → 2.16.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HowManySmall
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -6,14 +6,17 @@
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/@pobammer-ts/small-rules?logo=npm&color=cb3837)](https://www.npmjs.com/package/@pobammer-ts/small-rules)
8
8
  [![npm downloads](https://img.shields.io/npm/dm/@pobammer-ts/small-rules?logo=npm&color=cb3837)](https://www.npmjs.com/package/@pobammer-ts/small-rules)
9
- [![Rules](https://img.shields.io/badge/rules-87-blueviolet)](https://docs.howmanysmall.com/small-rules/rules/)
9
+ [![Rules](https://img.shields.io/badge/rules-109-blueviolet)](https://docs.howmanysmall.com/small-rules/rules/)
10
10
  [![CI](https://github.com/pobammer-ts/small-rules/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/pobammer-ts/small-rules/actions/workflows/ci.yaml)
11
11
  [![License](https://img.shields.io/npm/l/@pobammer-ts/small-rules?color=blue)](https://github.com/pobammer-ts/small-rules/blob/main/LICENSE)
12
12
 
13
13
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0%E2%80%938.0-3178c6?logo=typescript)](https://www.typescriptlang.org/)
14
14
  [![Node.js](https://img.shields.io/badge/Node.js-%5E20.19%20%7C%20%E2%89%A522.12-339933?logo=node.js)](https://nodejs.org)
15
15
  [![Oxlint](https://img.shields.io/badge/linter-Oxlint-f9801b?logo=oxlint)](https://oxc.rs)
16
- [![Biome](https://img.shields.io/badge/code%20style-Biome-609d6c?logo=biome)](https://biomejs.dev)
16
+ [![ESLint](https://img.shields.io/badge/linter-ESLint-4B32C3?logo=eslint)](https://eslint.org)
17
+ [![Biome](https://img.shields.io/badge/formatter-Biome-609d6c?logo=biome)](https://biomejs.dev)
18
+ [![oxfmt](https://img.shields.io/badge/formatter-oxfmt-f9801b?logo=oxlint)](https://github.com/oxc-project/oxc)
19
+ [![knip](https://img.shields.io/badge/code%20quality-knip-f97316?logo=knip)](https://knip.dev)
17
20
 
18
21
  </div>
19
22
 
@@ -50,3 +53,6 @@ Browse the [**full rule catalog →**](https://docs.howmanysmall.com/small-rules
50
53
  ## License
51
54
 
52
55
  MIT © HowManySmall
56
+
57
+ Includes MIT-licensed code from [dmmulroy/anti-slop](https://github.com/dmmulroy/anti-slop).
58
+ See [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).
@@ -0,0 +1,105 @@
1
+ <!-- Generated by `node --run generate:third-party-notices`. Do not edit by hand. -->
2
+ <!-- Source of truth: scripts/utilities/vendored-notices.ts -->
3
+
4
+ # Third-Party Notices
5
+
6
+ `@pobammer-ts/small-rules` incorporates material from the third-party projects listed
7
+ below. The original copyright notices and the license terms under which that material
8
+ was received are reproduced here.
9
+
10
+ This file is distributed in the published npm package. The same notices are embedded in
11
+ `dist/index.js`.
12
+
13
+ ---
14
+
15
+ ## 1. `anti-slop`
16
+
17
+ - **Source:** <https://github.com/dmmulroy/anti-slop>
18
+ - **Vendored commit:** `446268e5d15baa968eaec669ff65358d36ae6259`
19
+ - **Copyright:** Copyright (c) 2026 Dillon Mulroy
20
+ - **License:** MIT
21
+
22
+ Vendored into `src/rules/anti-slop/`, adapted rather than verbatim:
23
+
24
+ | This project | Upstream |
25
+ | --- | --- |
26
+ | `no-chained-type-assertions.ts` | `src/rules/no-chained-type-assertions.ts` |
27
+ | `no-conditional-empty-object-spread.ts` | `src/rules/no-conditional-empty-object-spread.ts` |
28
+ | `no-known-value-widening.ts` | `src/rules/no-known-value-widening.ts` |
29
+ | `no-module-mocking.ts` | `src/rules/no-module-mocking.ts` |
30
+ | `no-object-parameters.ts` | `src/rules/no-object-parameters.ts` |
31
+ | `no-reflect-apply.ts` | `src/rules/no-reflect-apply.ts` |
32
+ | `no-reflect-get.ts` | `src/rules/no-reflect-get.ts` |
33
+ | `no-runtime-typeof.ts` | `src/rules/no-runtime-typeof.ts` |
34
+ | `no-shape-in-symbol-names.ts` | `src/rules/no-shape-in-symbol-names.ts` |
35
+ | `no-unknown-parameters.ts` | `src/rules/no-unknown-parameters.ts` |
36
+ | `no-unknown-returns.ts` | `src/rules/no-unknown-returns.ts` |
37
+ | `no-unknown-type-aliases.ts` | `src/rules/no-unknown-type-aliases.ts` |
38
+ | `no-unsafe-dictionary-type.ts` | `src/rules/no-unsafe-dictionary-type.ts` |
39
+ | `no-widen-then-assert.ts` | `src/rules/no-widen-then-assert.ts` |
40
+ | `require-safety-comment-for-type-assertion.ts` | `src/rules/require-safety-comment-for-type-assertion.ts` |
41
+
42
+ ```text
43
+ MIT License
44
+
45
+ Copyright (c) 2026 Dillon Mulroy
46
+
47
+ Permission is hereby granted, free of charge, to any person obtaining a copy
48
+ of this software and associated documentation files (the "Software"), to deal
49
+ in the Software without restriction, including without limitation the rights
50
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
51
+ copies of the Software, and to permit persons to whom the Software is
52
+ furnished to do so, subject to the following conditions:
53
+
54
+ The above copyright notice and this permission notice shall be included in all
55
+ copies or substantial portions of the Software.
56
+
57
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
58
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
59
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
60
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
61
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
62
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
63
+ SOFTWARE.
64
+ ```
65
+
66
+ ---
67
+
68
+ ## 2. `anti-slop shared helpers`
69
+
70
+ - **Source:** <https://github.com/dmmulroy/anti-slop>
71
+ - **Vendored commit:** `446268e5d15baa968eaec669ff65358d36ae6259`
72
+ - **Copyright:** Copyright (c) 2026 Dillon Mulroy
73
+ - **License:** MIT
74
+
75
+ Vendored into `src/utilities/anti-slop/`, adapted rather than verbatim:
76
+
77
+ | This project | Upstream |
78
+ | --- | --- |
79
+ | `dictionary-types.ts` | `src/shared/dictionary-types.ts` |
80
+ | `lexical-type-parameters.ts` | `src/shared/lexical-type-parameters.ts` |
81
+ | `reflect-method.ts` | `src/shared/reflect-method.ts` |
82
+
83
+ ```text
84
+ MIT License
85
+
86
+ Copyright (c) 2026 Dillon Mulroy
87
+
88
+ Permission is hereby granted, free of charge, to any person obtaining a copy
89
+ of this software and associated documentation files (the "Software"), to deal
90
+ in the Software without restriction, including without limitation the rights
91
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
92
+ copies of the Software, and to permit persons to whom the Software is
93
+ furnished to do so, subject to the following conditions:
94
+
95
+ The above copyright notice and this permission notice shall be included in all
96
+ copies or substantial portions of the Software.
97
+
98
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
99
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
100
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
101
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
102
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
103
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
104
+ SOFTWARE.
105
+ ```
package/dist/index.d.ts CHANGED
@@ -1,3 +1,66 @@
1
+ /*!
2
+ * This bundle includes code from the following third-party projects.
3
+ * Full notices: https://github.com/howmanysmall/small-rules/blob/main/THIRD-PARTY-NOTICES.md
4
+ *
5
+ * anti-slop <https://github.com/dmmulroy/anti-slop>
6
+ * Copyright (c) 2026 Dillon Mulroy
7
+ * SPDX-License-Identifier: MIT
8
+ *
9
+ * MIT License
10
+ *
11
+ * Copyright (c) 2026 Dillon Mulroy
12
+ *
13
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ * of this software and associated documentation files (the "Software"), to deal
15
+ * in the Software without restriction, including without limitation the rights
16
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ * copies of the Software, and to permit persons to whom the Software is
18
+ * furnished to do so, subject to the following conditions:
19
+ *
20
+ * The above copyright notice and this permission notice shall be included in all
21
+ * copies or substantial portions of the Software.
22
+ *
23
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ * SOFTWARE.
30
+ *
31
+ * anti-slop shared helpers <https://github.com/dmmulroy/anti-slop>
32
+ * Copyright (c) 2026 Dillon Mulroy
33
+ * SPDX-License-Identifier: MIT
34
+ *
35
+ * MIT License
36
+ *
37
+ * Copyright (c) 2026 Dillon Mulroy
38
+ *
39
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
40
+ * of this software and associated documentation files (the "Software"), to deal
41
+ * in the Software without restriction, including without limitation the rights
42
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
43
+ * copies of the Software, and to permit persons to whom the Software is
44
+ * furnished to do so, subject to the following conditions:
45
+ *
46
+ * The above copyright notice and this permission notice shall be included in all
47
+ * copies or substantial portions of the Software.
48
+ *
49
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
52
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
53
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
54
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55
+ * SOFTWARE.
56
+ */
57
+ //#region src/rules/react/no-useless-use-memo.d.ts
58
+ declare const enum DependencyMode {
59
+ Aggressive = "aggressive",
60
+ EmptyOrOmitted = "empty-or-omitted",
61
+ NonUpdating = "non-updating"
62
+ }
63
+ //#endregion
1
64
  //#region src/index.d.ts
2
65
  declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
3
66
  "array-type-generic": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "useGenericArrayType", undefined>;
@@ -221,21 +284,21 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
221
284
  };
222
285
  readonly hooks: {
223
286
  readonly default: {
224
- dependenciesIndex: number;
225
287
  name: string;
288
+ dependenciesIndex: number;
226
289
  }[];
227
290
  readonly description: "Effect hooks checked by default; configured entries are added to this set.";
228
291
  readonly items: {
229
292
  readonly additionalProperties: false;
230
293
  readonly properties: {
231
- readonly dependenciesIndex: {
232
- readonly description: "Index of the dependencies array for validation";
233
- readonly type: "number";
234
- };
235
294
  readonly name: {
236
295
  readonly description: "The name of the hook";
237
296
  readonly type: "string";
238
297
  };
298
+ readonly dependenciesIndex: {
299
+ readonly description: "Index of the dependencies array for validation";
300
+ readonly type: "number";
301
+ };
239
302
  };
240
303
  readonly required: readonly ["name"];
241
304
  readonly type: "object";
@@ -251,6 +314,18 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
251
314
  };
252
315
  readonly type: "object";
253
316
  }], "unmemoizedDependency", undefined>;
317
+ "no-adjust-state-on-prop-change": import("oxlint-plugin-utilities").CreateRule<readonly [{
318
+ readonly additionalProperties: false;
319
+ readonly properties: {
320
+ readonly environment: {
321
+ readonly default: "roblox-ts";
322
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
323
+ readonly enum: readonly ["roblox-ts", "standard"];
324
+ readonly type: "string";
325
+ };
326
+ };
327
+ readonly type: "object";
328
+ }], "avoidAdjustingStateWhenAPropChanges", undefined>;
254
329
  "no-array-constructor-elements": import("oxlint-plugin-utilities").CreateRule<readonly [{
255
330
  readonly additionalProperties: false;
256
331
  readonly properties: {
@@ -360,6 +435,19 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
360
435
  readonly type: "object";
361
436
  }], "noAsyncInSystem", undefined>;
362
437
  "no-cascading-set-state": import("oxlint-plugin-utilities").CreateRule<undefined, "cascadingSetState", undefined>;
438
+ "no-chain-state-updates": import("oxlint-plugin-utilities").CreateRule<readonly [{
439
+ readonly additionalProperties: false;
440
+ readonly properties: {
441
+ readonly environment: {
442
+ readonly default: "roblox-ts";
443
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
444
+ readonly enum: readonly ["roblox-ts", "standard"];
445
+ readonly type: "string";
446
+ };
447
+ };
448
+ readonly type: "object";
449
+ }], "avoidChainingStateUpdates", undefined>;
450
+ "no-chained-type-assertions": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "chained", undefined>;
363
451
  "no-color3-constructor": import("oxlint-plugin-utilities").CreateRule<readonly [{
364
452
  readonly additionalProperties: false;
365
453
  readonly properties: {
@@ -382,6 +470,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
382
470
  };
383
471
  readonly type: "object";
384
472
  }], "commentedCode", undefined>;
473
+ "no-conditional-empty-object-spread": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "avoid", undefined>;
385
474
  "no-constant-condition-with-break": import("oxlint-plugin-utilities").CreateRule<readonly [{
386
475
  readonly additionalProperties: false;
387
476
  readonly properties: {
@@ -397,7 +486,31 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
397
486
  readonly type: "object";
398
487
  }], "unexpected", undefined>;
399
488
  "no-dead-store": import("oxlint-plugin-utilities").CreateRule<readonly [], "deadStore", undefined>;
489
+ "no-derived-state": import("oxlint-plugin-utilities").CreateRule<readonly [{
490
+ readonly additionalProperties: false;
491
+ readonly properties: {
492
+ readonly environment: {
493
+ readonly default: "roblox-ts";
494
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
495
+ readonly enum: readonly ["roblox-ts", "standard"];
496
+ readonly type: "string";
497
+ };
498
+ };
499
+ readonly type: "object";
500
+ }], "avoidDerivedState", undefined>;
400
501
  "no-error": import("oxlint-plugin-utilities").CreateRule<readonly [], "noError", readonly []>;
502
+ "no-event-handler": import("oxlint-plugin-utilities").CreateRule<readonly [{
503
+ readonly additionalProperties: false;
504
+ readonly properties: {
505
+ readonly environment: {
506
+ readonly default: "roblox-ts";
507
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
508
+ readonly enum: readonly ["roblox-ts", "standard"];
509
+ readonly type: "string";
510
+ };
511
+ };
512
+ readonly type: "object";
513
+ }], "avoidEventHandler" | "avoidPropHandler", undefined>;
401
514
  "no-events-in-events-callback": import("oxlint-plugin-utilities").CreateRule<readonly [{
402
515
  readonly additionalProperties: false;
403
516
  readonly properties: {
@@ -413,6 +526,18 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
413
526
  readonly required: readonly ["eventsImportPaths"];
414
527
  readonly type: "object";
415
528
  }], "preferFunctions", undefined>;
529
+ "no-external-store-subscription": import("oxlint-plugin-utilities").CreateRule<readonly [{
530
+ readonly additionalProperties: false;
531
+ readonly properties: {
532
+ readonly environment: {
533
+ readonly default: "roblox-ts";
534
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
535
+ readonly enum: readonly ["roblox-ts", "standard"];
536
+ readonly type: "string";
537
+ };
538
+ };
539
+ readonly type: "object";
540
+ }], "avoidExternalStoreSubscription", undefined>;
416
541
  "no-filter-map-chain": import("oxlint-plugin-utilities").CreateRule<readonly [], "avoidFilterMapChain", undefined>;
417
542
  "no-floating-point-equality": import("oxlint-plugin-utilities").CreateRule<readonly [], "exactFloatComparison", undefined>;
418
543
  "no-giant-component": import("oxlint-plugin-utilities").CreateRule<undefined, "giantComponent", undefined>;
@@ -495,6 +620,18 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
495
620
  };
496
621
  readonly type: "object";
497
622
  }], "noDecrement" | "noIncrement", undefined>;
623
+ "no-initialize-state": import("oxlint-plugin-utilities").CreateRule<readonly [{
624
+ readonly additionalProperties: false;
625
+ readonly properties: {
626
+ readonly environment: {
627
+ readonly default: "roblox-ts";
628
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
629
+ readonly enum: readonly ["roblox-ts", "standard"];
630
+ readonly type: "string";
631
+ };
632
+ };
633
+ readonly type: "object";
634
+ }], "avoidInitializingState", undefined>;
498
635
  "no-inline-property-on-memo-component": import("oxlint-plugin-utilities").CreateRule<undefined, "inlineProperty", undefined>;
499
636
  "no-instance-methods-without-this": import("oxlint-plugin-utilities").CreateRule<readonly [{
500
637
  readonly additionalProperties: false;
@@ -517,7 +654,9 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
517
654
  };
518
655
  readonly type: "object";
519
656
  }], "noInstanceMethodWithoutThis", undefined>;
657
+ "no-known-value-widening": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "widening", undefined>;
520
658
  "no-loop-iterable-mutation": import("oxlint-plugin-utilities").CreateRule<readonly [], "noLoopIterableMutation", undefined>;
659
+ "no-module-mocking": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "moduleMock", undefined>;
521
660
  "no-native-properties-spread": import("oxlint-plugin-utilities").CreateRule<readonly [], "noElementSpread" | "noNativePropertiesSpread", undefined>;
522
661
  "no-new-instance-in-use-memo": import("oxlint-plugin-utilities").CreateRule<readonly [{
523
662
  readonly additionalProperties: false;
@@ -545,6 +684,31 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
545
684
  };
546
685
  readonly type: "object";
547
686
  }], "noNewInUseMemo", undefined>;
687
+ "no-object-parameters": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "objectParameter", undefined>;
688
+ "no-pass-data-to-parent": import("oxlint-plugin-utilities").CreateRule<readonly [{
689
+ readonly additionalProperties: false;
690
+ readonly properties: {
691
+ readonly environment: {
692
+ readonly default: "roblox-ts";
693
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
694
+ readonly enum: readonly ["roblox-ts", "standard"];
695
+ readonly type: "string";
696
+ };
697
+ };
698
+ readonly type: "object";
699
+ }], "avoidPassingDataToParentInComponent" | "avoidPassingDataToParentInHook", undefined>;
700
+ "no-pass-live-state-to-parent": import("oxlint-plugin-utilities").CreateRule<readonly [{
701
+ readonly additionalProperties: false;
702
+ readonly properties: {
703
+ readonly environment: {
704
+ readonly default: "roblox-ts";
705
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
706
+ readonly enum: readonly ["roblox-ts", "standard"];
707
+ readonly type: "string";
708
+ };
709
+ };
710
+ readonly type: "object";
711
+ }], "avoidPassingLiveStateToParentInComponent" | "avoidPassingLiveStateToParentInHook", undefined>;
548
712
  "no-print": import("oxlint-plugin-utilities").CreateRule<readonly [], "noPrint", readonly []>;
549
713
  "no-recursive": import("oxlint-plugin-utilities").CreateRule<readonly [{
550
714
  readonly additionalProperties: false;
@@ -552,7 +716,21 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
552
716
  readonly type: "object";
553
717
  }], "noRecursive", undefined>;
554
718
  "no-redundant-aspect-ratio-constraint": import("oxlint-plugin-utilities").CreateRule<readonly [], "redundantAspectRatioConstraint", undefined>;
719
+ "no-reflect-apply": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "reflectApply", undefined>;
720
+ "no-reflect-get": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "reflectGet", undefined>;
555
721
  "no-render-helper-functions": import("oxlint-plugin-utilities").CreateRule<readonly [], "noRenderHelper", undefined>;
722
+ "no-reset-all-state-on-prop-change": import("oxlint-plugin-utilities").CreateRule<readonly [{
723
+ readonly additionalProperties: false;
724
+ readonly properties: {
725
+ readonly environment: {
726
+ readonly default: "roblox-ts";
727
+ readonly description: "The React environment: 'roblox-ts' uses @rbxts/react, 'standard' uses react.";
728
+ readonly enum: readonly ["roblox-ts", "standard"];
729
+ readonly type: "string";
730
+ };
731
+ };
732
+ readonly type: "object";
733
+ }], "avoidResettingAllStateWhenAPropChanges", undefined>;
556
734
  "no-restricted-property-assignment": import("oxlint-plugin-utilities").CreateRule<readonly [{
557
735
  readonly additionalProperties: false;
558
736
  readonly properties: {
@@ -593,6 +771,20 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
593
771
  readonly required: readonly ["restrictions"];
594
772
  readonly type: "object";
595
773
  }], "restricted" | "restrictedCustom", undefined>;
774
+ "no-runtime-typeof": import("oxlint-plugin-utilities").CreateOnceRule<readonly [{
775
+ readonly additionalProperties: false;
776
+ readonly properties: {
777
+ readonly allowInTypeGuards: {
778
+ readonly default: false;
779
+ readonly description: "Allow `typeof` inside functions whose return type is a type predicate (`value is T`) or an assertion predicate (`asserts value is T`).";
780
+ readonly type: "boolean";
781
+ };
782
+ };
783
+ readonly type: "object";
784
+ }], "runtimeTypeof", readonly [{
785
+ readonly allowInTypeGuards: false;
786
+ }]>;
787
+ "no-shape-in-symbol-names": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "forbiddenSymbolName", undefined>;
596
788
  "no-spec-file-extension": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noSpecFileExtension", undefined>;
597
789
  "no-static-react-create-element": import("oxlint-plugin-utilities").CreateRule<readonly [{
598
790
  readonly additionalProperties: false;
@@ -610,6 +802,10 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
610
802
  "no-task-wait": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noPromiseDelayAwait" | "noTaskWait", undefined>;
611
803
  "no-trivial-assertions": import("oxlint-plugin-utilities").CreateRule<readonly [], "freshIdentity" | "freshPredicate" | "issue", undefined>;
612
804
  "no-underscore-react-props": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noUnderscoreReactProperty", undefined>;
805
+ "no-unknown-parameters": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "unknownParameter", undefined>;
806
+ "no-unknown-returns": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "unknownReturn", undefined>;
807
+ "no-unknown-type-aliases": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "unknownAlias", undefined>;
808
+ "no-unsafe-dictionary-type": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "unsafeDictionary", undefined>;
613
809
  "no-unused-imports": import("oxlint-plugin-utilities").CreateRule<readonly [{
614
810
  readonly additionalProperties: false;
615
811
  readonly properties: {
@@ -768,9 +964,9 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
768
964
  readonly additionalProperties: false;
769
965
  readonly properties: {
770
966
  readonly dependencyMode: {
771
- readonly default: "non-updating";
967
+ readonly default: DependencyMode.NonUpdating;
772
968
  readonly description: "Dependency-array mode used to decide whether a memoized value is static.";
773
- readonly enum: readonly ["empty-or-omitted", "non-updating", "aggressive"];
969
+ readonly enum: readonly [DependencyMode.EmptyOrOmitted, DependencyMode.Aggressive, DependencyMode.NonUpdating];
774
970
  readonly type: "string";
775
971
  };
776
972
  readonly environment: {
@@ -824,6 +1020,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
824
1020
  }], "uselessSpring", undefined>;
825
1021
  "no-variadic-spread": import("oxlint-plugin-utilities").CreateOnceRule<readonly [], "noVariadicSpread", undefined>;
826
1022
  "no-warn": import("oxlint-plugin-utilities").CreateRule<readonly [], "noWarn", readonly []>;
1023
+ "no-widen-then-assert": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "widenThenAssert", undefined>;
827
1024
  "only-type-imports": import("oxlint-plugin-utilities").CreateRule<readonly [], "onlyTypeImports", undefined>;
828
1025
  "prefer-class-properties": import("oxlint-plugin-utilities").CreateRule<readonly [{
829
1026
  readonly enum: readonly ["always", "never"];
@@ -1035,7 +1232,12 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1035
1232
  readonly additionalProperties: {
1036
1233
  readonly type: "string";
1037
1234
  };
1038
- readonly default: Record<string, string>;
1235
+ readonly default: {
1236
+ args: string;
1237
+ char: string;
1238
+ dt: string;
1239
+ plr: string;
1240
+ };
1039
1241
  readonly defaultLabel: "default shorthands";
1040
1242
  readonly description: "Shorthand names and the full names they should expand to.";
1041
1243
  readonly type: "object";
@@ -1080,27 +1282,27 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1080
1282
  };
1081
1283
  readonly hooks: {
1082
1284
  readonly default: readonly [{
1083
- readonly allowAsync: false;
1084
1285
  readonly name: "useEffect";
1085
- }, {
1086
1286
  readonly allowAsync: false;
1087
- readonly name: "useLayoutEffect";
1088
1287
  }, {
1288
+ readonly name: "useLayoutEffect";
1089
1289
  readonly allowAsync: false;
1290
+ }, {
1090
1291
  readonly name: "useInsertionEffect";
1292
+ readonly allowAsync: false;
1091
1293
  }];
1092
1294
  readonly description: "Hook configuration objects with name and allowAsync settings.";
1093
1295
  readonly items: {
1094
1296
  readonly additionalProperties: false;
1095
1297
  readonly properties: {
1096
- readonly allowAsync: {
1097
- readonly description: "Whether async functions are allowed for this hook";
1098
- readonly type: "boolean";
1099
- };
1100
1298
  readonly name: {
1101
1299
  readonly description: "Hook name to check";
1102
1300
  readonly type: "string";
1103
1301
  };
1302
+ readonly allowAsync: {
1303
+ readonly description: "Whether async functions are allowed for this hook";
1304
+ readonly type: "boolean";
1305
+ };
1104
1306
  };
1105
1307
  readonly required: readonly ["name", "allowAsync"];
1106
1308
  readonly type: "object";
@@ -1109,7 +1311,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1109
1311
  };
1110
1312
  readonly inlineFunctionDeclarations: {
1111
1313
  readonly default: false;
1112
- readonly description: "Convert effect callbacks that reference a named function declaration into inline named function expressions (standard and sloptor modes only), keeping the effect body visible to dependency analysis.";
1314
+ readonly description: "Convert effect callbacks that reference a named function declaration into inline named function expressions (standard and sloptor modes only), keeping the effect body visible to dependency analysis. When the declaration is only referenced by the effect and is not exported or commented, the fix also removes the now-unused declaration.";
1113
1315
  readonly type: "boolean";
1114
1316
  };
1115
1317
  readonly sloptor: {
@@ -1254,6 +1456,7 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1254
1456
  };
1255
1457
  readonly type: "object";
1256
1458
  }], "directContextExport" | "directMemoExport" | "missingContextDisplayName" | "missingMemoDisplayName", undefined>;
1459
+ "require-safety-comment-for-type-assertion": import("oxlint-plugin-utilities").CreateOnceRule<undefined, "missingSafetyComment", undefined>;
1257
1460
  "require-switch-case-braces": import("oxlint-plugin-utilities").CreateRule<readonly [{
1258
1461
  readonly additionalProperties: false;
1259
1462
  readonly properties: {
@@ -1277,11 +1480,6 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1277
1480
  }, {
1278
1481
  readonly additionalProperties: false;
1279
1482
  readonly properties: {
1280
- readonly from: {
1281
- readonly description: "Where the error class is declared";
1282
- readonly enum: readonly ["file", "library", "package"];
1283
- readonly type: "string";
1284
- };
1285
1483
  readonly name: {
1286
1484
  readonly anyOf: readonly [{
1287
1485
  readonly type: "string";
@@ -1293,6 +1491,11 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1293
1491
  }];
1294
1492
  readonly description: "Name(s) of the error class";
1295
1493
  };
1494
+ readonly from: {
1495
+ readonly description: "Where the error class is declared";
1496
+ readonly enum: readonly ["file", "library", "package"];
1497
+ readonly type: "string";
1498
+ };
1296
1499
  readonly package: {
1297
1500
  readonly description: "Package the error class is imported from (required when from is 'package')";
1298
1501
  readonly type: "string";
@@ -1341,6 +1544,10 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1341
1544
  readonly items: {
1342
1545
  readonly additionalProperties: false;
1343
1546
  readonly properties: {
1547
+ readonly name: {
1548
+ readonly description: "The name of the hook";
1549
+ readonly type: "string";
1550
+ };
1344
1551
  readonly closureIndex: {
1345
1552
  readonly description: "Index of the closure argument for dependency validation";
1346
1553
  readonly type: "number";
@@ -1349,10 +1556,6 @@ declare const smallRules: import("oxlint-plugin-utilities").Plugin<{
1349
1556
  readonly description: "Index of the dependencies array for validation";
1350
1557
  readonly type: "number";
1351
1558
  };
1352
- readonly name: {
1353
- readonly description: "The name of the hook";
1354
- readonly type: "string";
1355
- };
1356
1559
  readonly stableResult: {
1357
1560
  readonly description: "Specify stable results: true (whole result), number (array index), number[] (multiple indices), or string[] (object properties)";
1358
1561
  readonly oneOf: readonly [{