Skip to content

Commit b165d47

Browse files
authored
fix: correct Rule typings (#20199)
* fix: correct `Rule` typings * fix: further typing improvements * Revert "fix: further typing improvements" This reverts commit 0a5aae4. * test: add type test * test: ensure `JSRuleDefinition#create` returns a `RuleListener`
1 parent 637216b commit b165d47

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

lib/types/index.d.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -640,16 +640,16 @@ export namespace Rule {
640640
LangOptions: Linter.LanguageOptions;
641641
Code: SourceCode;
642642
RuleOptions: any[];
643-
Visitor: NodeListener;
643+
Visitor: RuleListener;
644644
Node: JSSyntaxElement;
645645
MessageIds: string;
646646
ExtRuleDocs: {};
647647
}> {
648-
create(context: RuleContext): NodeListener;
648+
create(context: RuleContext): RuleListener;
649649
}
650650

651651
type NodeTypes = ESTree.Node["type"];
652-
interface NodeListener extends RuleVisitor {
652+
interface NodeListener {
653653
ArrayExpression?:
654654
| ((node: ESTree.ArrayExpression & NodeParentExtension) => void)
655655
| undefined;
@@ -1124,6 +1124,16 @@ export namespace Rule {
11241124

11251125
onCodePathSegmentEnd?(segment: CodePathSegment, node: Node): void;
11261126

1127+
onUnreachableCodePathSegmentStart?(
1128+
segment: CodePathSegment,
1129+
node: Node,
1130+
): void;
1131+
1132+
onUnreachableCodePathSegmentEnd?(
1133+
segment: CodePathSegment,
1134+
node: Node,
1135+
): void;
1136+
11271137
onCodePathSegmentLoop?(
11281138
fromSegment: CodePathSegment,
11291139
toSegment: CodePathSegment,
@@ -1222,7 +1232,7 @@ export type JSRuleDefinition<
12221232
{
12231233
LangOptions: Linter.LanguageOptions;
12241234
Code: SourceCode;
1225-
Visitor: Rule.NodeListener;
1235+
Visitor: Rule.RuleListener;
12261236
Node: JSSyntaxElement;
12271237
},
12281238
Options

tests/lib/types/types.test.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -807,6 +807,8 @@ rule = {
807807
},
808808
onCodePathSegmentStart(segment, node) {},
809809
onCodePathSegmentEnd(segment, node) {},
810+
onUnreachableCodePathSegmentStart(segment, node) {},
811+
onUnreachableCodePathSegmentEnd(segment, node) {},
810812
onCodePathSegmentLoop(fromSegment, toSegment, node) {},
811813
IfStatement(node) {
812814
node.parent;
@@ -969,6 +971,27 @@ type DeprecatedRuleContextKeys =
969971
},
970972
});
971973

974+
(): JSRuleDefinition => ({
975+
create() {
976+
return {
977+
onCodePathStart(codePath, node) {},
978+
onCodePathSegmentStart(segment, node) {},
979+
onCodePathSegmentLoop(fromSegment, toSegment, node) {},
980+
Program(node) {},
981+
"Program:exit"(node) {},
982+
} satisfies Rule.RuleListener;
983+
},
984+
});
985+
986+
(): JSRuleDefinition => ({
987+
// @ts-expect-error invalid return type
988+
create() {
989+
return {
990+
foo: null,
991+
};
992+
},
993+
});
994+
972995
// #endregion
973996

974997
// #region Linter

0 commit comments

Comments
 (0)