@@ -7,14 +7,17 @@ import { isNode } from './ast';
7
7
* A visitor is provided to visit, it contains the collection of
8
8
* relevant functions to be called during the visitor's traversal.
9
9
*/
10
- export type ASTVisitor =
11
- | EnterLeave < ASTVisitFn < ASTNode >>
12
- | ShapeMap <
13
- ASTKindToNode ,
14
- < Node > (Node) => ASTVisitFn < Node > | EnterLeave< ASTVisitFn < Node > > ,
15
- > ;
16
- type EnterLeave < T > = { | + enter ? : T , + leave ?: T | } ;
17
- type ShapeMap< O , F > = $Shape< $ObjMap < O , F > > ;
10
+ export type ASTVisitor = $Shape < EnterLeaveVisitor < ASTNode > & KindVisitor > ;
11
+
12
+ type KindVisitor = $ObjMap <
13
+ ASTKindToNode ,
14
+ < Node > (Node) => ASTVisitFn < Node > | EnterLeaveVisitor< Node > ,
15
+ > ;
16
+
17
+ type EnterLeaveVisitor < TVisitedNode : ASTNode > = { |
18
+ + enter ?: ASTVisitFn < TVisitedNode > ,
19
+ + leave ?: ASTVisitFn < TVisitedNode > ,
20
+ | } ;
18
21
19
22
/**
20
23
* A visitor is comprised of visit functions, which are called on each node
@@ -389,7 +392,6 @@ export function getVisitFn(
389
392
return kindSpecificVisitor ;
390
393
}
391
394
} else {
392
- // $FlowFixMe[prop-missing]
393
395
const specificVisitor = isLeaving ? visitor . leave : visitor . enter ;
394
396
if ( specificVisitor ) {
395
397
// { enter() {}, leave() {} }
0 commit comments