Skip to content

Commit 9c562f8

Browse files
committed
Handle multiple return statements that implement interface
1 parent 66f30c9 commit 9c562f8

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

src/services/services.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6417,11 +6417,15 @@ namespace ts {
64176417
return [getReferenceEntryFromNode(parent.initializer)];
64186418
}
64196419
else if (isFunctionLike(parent) && parent.type === containingTypeReference && parent.body && parent.body.kind === SyntaxKind.Block) {
6420-
return [forEachReturnStatement(<Block>parent.body, (returnStatement) => {
6420+
let result: ReferenceEntry[];
6421+
6422+
forEachReturnStatement(<Block>parent.body, (returnStatement) => {
64216423
if (returnStatement.expression && isImplementationExpression(returnStatement.expression)) {
6422-
return getReferenceEntryFromNode(returnStatement.expression);
6424+
(result || (result = [])).push(getReferenceEntryFromNode(returnStatement.expression));
64236425
}
6424-
})];
6426+
});
6427+
6428+
return result;
64256429
}
64266430
else if (isTypeAssertionExpression(parent) && isImplementationExpression(parent.expression)) {
64276431
return [getReferenceEntryFromNode(parent.expression)];

tests/cases/fourslash/goToImplementationInterface_02.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,14 @@
44

55
//// interface Fo/*interface_definition*/o { hello: () => void }
66
////
7+
//// let x: number = 9;
8+
////
79
//// function createFoo(): Foo {
10+
//// if (x === 2) {
11+
//// return [|{
12+
//// hello() {}
13+
//// }|];
14+
//// }
815
//// return [|{
916
//// hello() {}
1017
//// }|];

0 commit comments

Comments
 (0)