Skip to content

Commit f78838b

Browse files
authored
test: add CodePath type coverage (#20904)
1 parent 61b0add commit f78838b

1 file changed

Lines changed: 97 additions & 14 deletions

File tree

‎tests/lib/types/types.test.ts‎

Lines changed: 97 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -552,6 +552,27 @@ const oldStyleRule = (context: Rule.RuleContext) => ({});
552552

553553
let rule: Rule.RuleModule;
554554

555+
"program" satisfies Rule.CodePathOrigin;
556+
"function" satisfies Rule.CodePathOrigin;
557+
"class-field-initializer" satisfies Rule.CodePathOrigin;
558+
"class-static-block" satisfies Rule.CodePathOrigin;
559+
// @ts-expect-error Invalid code path origin
560+
"script" satisfies Rule.CodePathOrigin;
561+
562+
const codePathSegmentTraversalCallback: Rule.CodePathSegmentTraversalCallback =
563+
function (segment, controller) {
564+
this satisfies Rule.CodePath;
565+
segment.id satisfies string;
566+
segment.nextSegments satisfies Rule.CodePathSegment[];
567+
segment.prevSegments satisfies Rule.CodePathSegment[];
568+
segment.allNextSegments satisfies Rule.CodePathSegment[];
569+
segment.allPrevSegments satisfies Rule.CodePathSegment[];
570+
segment.reachable satisfies boolean;
571+
controller satisfies Rule.CodePathSegmentTraversalController;
572+
controller.skip();
573+
controller.break();
574+
};
575+
555576
// @ts-expect-error
556577
rule = oldStyleRule;
557578

@@ -805,36 +826,82 @@ rule = {
805826

806827
return {
807828
onCodePathStart(codePath, node) {
808-
const origin: Rule.CodePathOrigin = codePath.origin;
829+
codePath.id satisfies string;
830+
codePath.origin satisfies Rule.CodePathOrigin;
831+
codePath.initialSegment satisfies Rule.CodePathSegment;
832+
codePath.finalSegments satisfies Rule.CodePathSegment[];
833+
codePath.returnedSegments satisfies Rule.CodePathSegment[];
834+
codePath.thrownSegments satisfies Rule.CodePathSegment[];
835+
codePath.upper satisfies Rule.CodePath | null;
836+
codePath.childCodePaths satisfies Rule.CodePath[];
837+
node satisfies Rule.Node;
838+
809839
const traversalOptions: Rule.CodePathTraversalOptions = {
810840
first: codePath.initialSegment,
811841
last: codePath.finalSegments[0],
812842
};
843+
const traversalOptionsWithUndefined: Rule.CodePathTraversalOptions =
844+
{
845+
first: undefined,
846+
last: undefined,
847+
};
813848

814-
codePath.traverseSegments((segment, controller) => {
815-
segment.allNextSegments satisfies Rule.CodePathSegment[];
816-
segment.allPrevSegments satisfies Rule.CodePathSegment[];
817-
controller.skip();
818-
controller.break();
819-
});
820-
849+
codePath.traverseSegments(codePathSegmentTraversalCallback);
821850
codePath.traverseSegments(
822851
traversalOptions,
823852
function (segment, controller) {
824853
this satisfies Rule.CodePath;
854+
segment.id satisfies string;
855+
segment.nextSegments satisfies Rule.CodePathSegment[];
856+
segment.prevSegments satisfies Rule.CodePathSegment[];
857+
segment.allNextSegments satisfies Rule.CodePathSegment[];
858+
segment.allPrevSegments satisfies Rule.CodePathSegment[];
825859
segment.reachable satisfies boolean;
826860
controller.skip();
827861
},
828862
);
863+
codePath.traverseSegments(
864+
traversalOptionsWithUndefined,
865+
codePathSegmentTraversalCallback,
866+
);
867+
868+
// @ts-expect-error Options cannot be passed without a callback
869+
codePath.traverseSegments({});
870+
codePath.traverseSegments(
871+
{
872+
// @ts-expect-error `first` must be a code path segment
873+
first: codePath,
874+
// @ts-expect-error `last` must be a code path segment
875+
last: codePath,
876+
},
877+
codePathSegmentTraversalCallback,
878+
);
829879
},
830880
onCodePathEnd(codePath, node) {
831-
const origin: Rule.CodePathOrigin = codePath.origin;
881+
codePath satisfies Rule.CodePath;
882+
node satisfies Rule.Node;
883+
},
884+
onCodePathSegmentStart(segment, node) {
885+
segment satisfies Rule.CodePathSegment;
886+
node satisfies Rule.Node;
887+
},
888+
onCodePathSegmentEnd(segment, node) {
889+
segment satisfies Rule.CodePathSegment;
890+
node satisfies Rule.Node;
891+
},
892+
onUnreachableCodePathSegmentStart(segment, node) {
893+
segment satisfies Rule.CodePathSegment;
894+
node satisfies Rule.Node;
895+
},
896+
onUnreachableCodePathSegmentEnd(segment, node) {
897+
segment satisfies Rule.CodePathSegment;
898+
node satisfies Rule.Node;
899+
},
900+
onCodePathSegmentLoop(fromSegment, toSegment, node) {
901+
fromSegment satisfies Rule.CodePathSegment;
902+
toSegment satisfies Rule.CodePathSegment;
903+
node satisfies Rule.Node;
832904
},
833-
onCodePathSegmentStart(segment, node) {},
834-
onCodePathSegmentEnd(segment, node) {},
835-
onUnreachableCodePathSegmentStart(segment, node) {},
836-
onUnreachableCodePathSegmentEnd(segment, node) {},
837-
onCodePathSegmentLoop(fromSegment, toSegment, node) {},
838905
IfStatement(node) {
839906
node.parent;
840907
},
@@ -1003,10 +1070,26 @@ type DeprecatedRuleContextKeys =
10031070
codePath; // $ExpectType CodePath
10041071
node; // $ExpectType Node
10051072
},
1073+
onCodePathEnd(codePath, node) {
1074+
codePath; // $ExpectType CodePath
1075+
node; // $ExpectType Node
1076+
},
10061077
onCodePathSegmentStart(segment, node) {
10071078
segment; // $ExpectType CodePathSegment
10081079
node; // $ExpectType Node
10091080
},
1081+
onCodePathSegmentEnd(segment, node) {
1082+
segment; // $ExpectType CodePathSegment
1083+
node; // $ExpectType Node
1084+
},
1085+
onUnreachableCodePathSegmentStart(segment, node) {
1086+
segment; // $ExpectType CodePathSegment
1087+
node; // $ExpectType Node
1088+
},
1089+
onUnreachableCodePathSegmentEnd(segment, node) {
1090+
segment; // $ExpectType CodePathSegment
1091+
node; // $ExpectType Node
1092+
},
10101093
onCodePathSegmentLoop(fromSegment, toSegment, node) {
10111094
fromSegment; // $ExpectType CodePathSegment
10121095
toSegment; // $ExpectType CodePathSegment

0 commit comments

Comments
 (0)