@@ -552,6 +552,27 @@ const oldStyleRule = (context: Rule.RuleContext) => ({});
552552
553553let 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
556577rule = 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