Skip to content

Commit 2171429

Browse files
committed
Fix visitEachChild for signatures
1 parent c6bf6a2 commit 2171429

File tree

4 files changed

+28
-7
lines changed

4 files changed

+28
-7
lines changed

src/compiler/factory.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,18 @@ namespace ts {
368368
: node;
369369
}
370370

371+
export function createParenthesizedType(type: TypeNode) {
372+
const node = <ParenthesizedTypeNode>createSynthesizedNode(SyntaxKind.ParenthesizedType);
373+
node.type = type;
374+
return node;
375+
}
376+
377+
export function updateParenthesizedType(node: ParenthesizedTypeNode, type: TypeNode) {
378+
return node.type !== type
379+
? updateNode(createParenthesizedType(type), node)
380+
: node;
381+
}
382+
371383
export function createTypeLiteralNode(members: TypeElement[]) {
372384
const typeLiteralNode = createSynthesizedNode(SyntaxKind.TypeLiteral) as TypeLiteralNode;
373385
typeLiteralNode.members = createNodeArray(members);

src/compiler/visitor.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,31 +242,31 @@ namespace ts {
242242
case SyntaxKind.FunctionType:
243243
return updateFunctionTypeNode(<FunctionTypeNode>node,
244244
nodesVisitor((<FunctionTypeNode>node).typeParameters, visitor, isTypeParameter),
245-
visitParameterList((<FunctionTypeNode>node).parameters, visitor, context, nodesVisitor),
245+
nodesVisitor((<FunctionTypeNode>node).parameters, visitor, isParameterDeclaration),
246246
visitNode((<FunctionTypeNode>node).type, visitor, isTypeNode));
247247

248248
case SyntaxKind.ConstructorType:
249249
return updateConstructorTypeNode(<ConstructorTypeNode>node,
250250
nodesVisitor((<ConstructorTypeNode>node).typeParameters, visitor, isTypeParameter),
251-
visitParameterList((<ConstructorTypeNode>node).parameters, visitor, context, nodesVisitor),
251+
nodesVisitor((<ConstructorTypeNode>node).parameters, visitor, isParameterDeclaration),
252252
visitNode((<ConstructorTypeNode>node).type, visitor, isTypeNode));
253253

254254
case SyntaxKind.CallSignature:
255255
return updateCallSignatureDeclaration(<CallSignatureDeclaration>node,
256256
nodesVisitor((<CallSignatureDeclaration>node).typeParameters, visitor, isTypeParameter),
257-
visitParameterList((<CallSignatureDeclaration>node).parameters, visitor, context, nodesVisitor),
257+
nodesVisitor((<CallSignatureDeclaration>node).parameters, visitor, isParameterDeclaration),
258258
visitNode((<CallSignatureDeclaration>node).type, visitor, isTypeNode));
259259

260260
case SyntaxKind.ConstructSignature:
261261
return updateConstructSignatureDeclaration(<ConstructSignatureDeclaration>node,
262262
nodesVisitor((<ConstructSignatureDeclaration>node).typeParameters, visitor, isTypeParameter),
263-
visitParameterList((<ConstructSignatureDeclaration>node).parameters, visitor, context, nodesVisitor),
263+
nodesVisitor((<ConstructSignatureDeclaration>node).parameters, visitor, isParameterDeclaration),
264264
visitNode((<ConstructSignatureDeclaration>node).type, visitor, isTypeNode));
265265

266266
case SyntaxKind.MethodSignature:
267267
return updateMethodSignature(<MethodSignature>node,
268268
nodesVisitor((<MethodSignature>node).typeParameters, visitor, isTypeParameter),
269-
visitParameterList((<MethodSignature>node).parameters, visitor, context, nodesVisitor),
269+
nodesVisitor((<MethodSignature>node).parameters, visitor, isParameterDeclaration),
270270
visitNode((<MethodSignature>node).type, visitor, isTypeNode),
271271
visitNode((<MethodSignature>node).name, visitor, isPropertyName),
272272
visitNode((<MethodSignature>node).questionToken, tokenVisitor, isToken));
@@ -275,7 +275,7 @@ namespace ts {
275275
return updateIndexSignatureDeclaration(<IndexSignatureDeclaration>node,
276276
nodesVisitor((<IndexSignatureDeclaration>node).decorators, visitor, isDecorator),
277277
nodesVisitor((<IndexSignatureDeclaration>node).modifiers, visitor, isModifier),
278-
visitParameterList((<IndexSignatureDeclaration>node).parameters, visitor, context, nodesVisitor),
278+
nodesVisitor((<IndexSignatureDeclaration>node).parameters, visitor, isParameterDeclaration),
279279
visitNode((<IndexSignatureDeclaration>node).type, visitor, isTypeNode));
280280

281281
case SyntaxKind.Parameter:
@@ -322,7 +322,8 @@ namespace ts {
322322
nodesVisitor((<UnionOrIntersectionTypeNode>node).types, visitor, isTypeNode));
323323

324324
case SyntaxKind.ParenthesizedType:
325-
throw Debug.fail("not implemented.");
325+
return updateParenthesizedType(<ParenthesizedTypeNode>node,
326+
visitNode((<ParenthesizedTypeNode>node).type, visitor, isTypeNode));
326327

327328
case SyntaxKind.TypeOperator:
328329
return updateTypeOperatorNode(<TypeOperatorNode>node, visitNode((<TypeOperatorNode>node).type, visitor, isTypeNode));

src/harness/unittests/transform.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,12 @@ namespace ts {
3939
return file => file;
4040
}
4141
]);
42+
43+
// https://github.com/Microsoft/TypeScript/issues/15192
44+
transformsCorrectly("types", `let a: () => void`, [
45+
context => file => visitNode(file, function visitor(node: Node): VisitResult<Node> {
46+
return visitEachChild(node, visitor, context);
47+
})
48+
]);
4249
});
4350
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
let a: () => void;

0 commit comments

Comments
 (0)