From 1250f978ce01cd8b94e2dd622f19e6acf52810bc Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sat, 13 Mar 2021 13:36:53 +0200 Subject: [PATCH] ASTVisitor: use type intersection instead of type union --- src/language/visitor.d.ts | 16 +++++++--------- src/language/visitor.js | 20 +++++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/language/visitor.d.ts b/src/language/visitor.d.ts index 69261912799..8c48dba2601 100644 --- a/src/language/visitor.d.ts +++ b/src/language/visitor.d.ts @@ -6,17 +6,15 @@ import { ASTNode, ASTKindToNode } from './ast'; * A visitor is provided to visit, it contains the collection of * relevant functions to be called during the visitor's traversal. */ -export type ASTVisitor = EnterLeave> | ShapeMapVisitor; +export type ASTVisitor = EnterLeaveVisitor & KindVisitor; -interface EnterLeave { - readonly enter?: T; - readonly leave?: T; -} +type KindVisitor = { + readonly [K in keyof ASTKindToNode]?: ASTVisitFn | EnterLeaveVisitor; +}; -type ShapeMapVisitor = { - [K in keyof ASTKindToNode]?: - | ASTVisitFn - | EnterLeave>; +type EnterLeaveVisitor = { + readonly enter?: ASTVisitFn; + readonly leave?: ASTVisitFn; }; /** diff --git a/src/language/visitor.js b/src/language/visitor.js index b8eac406133..582aaf4423f 100644 --- a/src/language/visitor.js +++ b/src/language/visitor.js @@ -7,14 +7,17 @@ import { isNode } from './ast'; * A visitor is provided to visit, it contains the collection of * relevant functions to be called during the visitor's traversal. */ -export type ASTVisitor = - | EnterLeave> - | ShapeMap< - ASTKindToNode, - (Node) => ASTVisitFn | EnterLeave>, - >; -type EnterLeave = {| +enter?: T, +leave?: T |}; -type ShapeMap = $Shape<$ObjMap>; +export type ASTVisitor = $Shape & KindVisitor>; + +type KindVisitor = $ObjMap< + ASTKindToNode, + (Node) => ASTVisitFn | EnterLeaveVisitor, +>; + +type EnterLeaveVisitor = {| + +enter?: ASTVisitFn, + +leave?: ASTVisitFn, +|}; /** * A visitor is comprised of visit functions, which are called on each node @@ -389,7 +392,6 @@ export function getVisitFn( return kindSpecificVisitor; } } else { - // $FlowFixMe[prop-missing] const specificVisitor = isLeaving ? visitor.leave : visitor.enter; if (specificVisitor) { // { enter() {}, leave() {} }