From 9c562f867dc18aa279de0c479b3e9dcca350ed85 Mon Sep 17 00:00:00 2001 From: Richard Knoll Date: Tue, 6 Sep 2016 17:14:21 -0700 Subject: [PATCH] Handle multiple return statements that implement interface --- src/services/services.ts | 10 +++++++--- .../cases/fourslash/goToImplementationInterface_02.ts | 7 +++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 013e093336e..b287bd735cd 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -6417,11 +6417,15 @@ namespace ts { return [getReferenceEntryFromNode(parent.initializer)]; } else if (isFunctionLike(parent) && parent.type === containingTypeReference && parent.body && parent.body.kind === SyntaxKind.Block) { - return [forEachReturnStatement(parent.body, (returnStatement) => { + let result: ReferenceEntry[]; + + forEachReturnStatement(parent.body, (returnStatement) => { if (returnStatement.expression && isImplementationExpression(returnStatement.expression)) { - return getReferenceEntryFromNode(returnStatement.expression); + (result || (result = [])).push(getReferenceEntryFromNode(returnStatement.expression)); } - })]; + }); + + return result; } else if (isTypeAssertionExpression(parent) && isImplementationExpression(parent.expression)) { return [getReferenceEntryFromNode(parent.expression)]; diff --git a/tests/cases/fourslash/goToImplementationInterface_02.ts b/tests/cases/fourslash/goToImplementationInterface_02.ts index b22de0e266e..af7f188ffa4 100644 --- a/tests/cases/fourslash/goToImplementationInterface_02.ts +++ b/tests/cases/fourslash/goToImplementationInterface_02.ts @@ -4,7 +4,14 @@ //// interface Fo/*interface_definition*/o { hello: () => void } //// +//// let x: number = 9; +//// //// function createFoo(): Foo { +//// if (x === 2) { +//// return [|{ +//// hello() {} +//// }|]; +//// } //// return [|{ //// hello() {} //// }|];