@@ -92,7 +92,7 @@ namespace ts {
9292 *
9393 * @param node The node to visit.
9494 */
95- function visitWithStack ( node : Node , visitor : ( node : Node ) => Node ) : Node {
95+ function visitWithStack ( node : Node , visitor : ( node : Node ) => OneOrMany < Node > ) : OneOrMany < Node > {
9696 // Save state
9797 const savedCurrentNamespace = currentNamespace ;
9898 const savedCurrentScope = currentScope ;
@@ -102,23 +102,23 @@ namespace ts {
102102 // Handle state changes before visiting a node.
103103 onBeforeVisitNode ( node ) ;
104104
105- node = visitor ( node ) ;
105+ const visited = visitor ( node ) ;
106106
107107 // Restore state
108108 currentNamespace = savedCurrentNamespace ;
109109 currentScope = savedCurrentScope ;
110110 currentParent = savedCurrentParent ;
111111 currentNode = savedCurrentNode ;
112112
113- return node ;
113+ return visited ;
114114 }
115115
116116 /**
117117 * General-purpose node visitor.
118118 *
119119 * @param node The node to visit.
120120 */
121- function visitor ( node : Node ) : Node {
121+ function visitor ( node : Node ) : OneOrMany < Node > {
122122 return visitWithStack ( node , visitorWorker ) ;
123123 }
124124
@@ -127,14 +127,14 @@ namespace ts {
127127 *
128128 * @param node The node to visit.
129129 */
130- function visitorWorker ( node : Node ) : Node {
130+ function visitorWorker ( node : Node ) : OneOrMany < Node > {
131131 if ( node . transformFlags & TransformFlags . TypeScript ) {
132132 // This node is explicitly marked as TypeScript, so we should transform the node.
133- node = visitTypeScript ( node ) ;
133+ return visitTypeScript ( node ) ;
134134 }
135135 else if ( node . transformFlags & TransformFlags . ContainsTypeScript ) {
136136 // This node contains TypeScript, so we should visit its children.
137- node = visitEachChild ( node , visitor , context ) ;
137+ return visitEachChild ( node , visitor , context ) ;
138138 }
139139
140140 return node ;
@@ -145,7 +145,7 @@ namespace ts {
145145 *
146146 * @param node The node to visit.
147147 */
148- function namespaceElementVisitor ( node : Node ) : Node {
148+ function namespaceElementVisitor ( node : Node ) : OneOrMany < Node > {
149149 return visitWithStack ( node , namespaceElementVisitorWorker ) ;
150150 }
151151
@@ -154,15 +154,15 @@ namespace ts {
154154 *
155155 * @param node The node to visit.
156156 */
157- function namespaceElementVisitorWorker ( node : Node ) : Node {
157+ function namespaceElementVisitorWorker ( node : Node ) : OneOrMany < Node > {
158158 if ( node . transformFlags & TransformFlags . TypeScript || isExported ( node ) ) {
159159 // This node is explicitly marked as TypeScript, or is exported at the namespace
160160 // level, so we should transform the node.
161- node = visitTypeScript ( node ) ;
161+ return visitTypeScript ( node ) ;
162162 }
163163 else if ( node . transformFlags & TransformFlags . ContainsTypeScript ) {
164164 // This node contains TypeScript, so we should visit its children.
165- node = visitEachChild ( node , visitor , context ) ;
165+ return visitEachChild ( node , visitor , context ) ;
166166 }
167167
168168 return node ;
@@ -173,7 +173,7 @@ namespace ts {
173173 *
174174 * @param node The node to visit.
175175 */
176- function classElementVisitor ( node : Node ) {
176+ function classElementVisitor ( node : Node ) : OneOrMany < Node > {
177177 return visitWithStack ( node , classElementVisitorWorker ) ;
178178 }
179179
@@ -182,7 +182,7 @@ namespace ts {
182182 *
183183 * @param node The node to visit.
184184 */
185- function classElementVisitorWorker ( node : Node ) {
185+ function classElementVisitorWorker ( node : Node ) : OneOrMany < Node > {
186186 switch ( node . kind ) {
187187 case SyntaxKind . Constructor :
188188 // TypeScript constructors are transformed in `transformClassDeclaration`.
@@ -212,7 +212,7 @@ namespace ts {
212212 *
213213 * @param node The node to visit.
214214 */
215- function visitTypeScript ( node : Node ) : Node {
215+ function visitTypeScript ( node : Node ) : OneOrMany < Node > {
216216 if ( hasModifier ( node , ModifierFlags . Ambient ) ) {
217217 // TypeScript ambient declarations are elided.
218218 return undefined ;
0 commit comments