Skip to content

Commit

Permalink
fix(51222): Go-to-definition on return statements should jump to the …
Browse files Browse the repository at this point in the history
…containing function declaration (#51227)

* fix(51222): add go-to-definition return statement to containing function

* add additional tests
  • Loading branch information
a-tarasyuk committed Oct 19, 2022
1 parent 2dff34e commit 245a02c
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/services/goToDefinition.ts
Expand Up @@ -26,6 +26,12 @@ namespace ts.GoToDefinition {
return label ? [createDefinitionInfoFromName(typeChecker, label, ScriptElementKind.label, node.text, /*containerName*/ undefined!)] : undefined; // TODO: GH#18217
}

if (node.kind === SyntaxKind.ReturnKeyword) {
const functionDeclaration = findAncestor(node.parent, n =>
isClassStaticBlockDeclaration(n) ? "quit" : isFunctionLikeDeclaration(n)) as FunctionLikeDeclaration;
return functionDeclaration ? [createDefinitionFromSignatureDeclaration(typeChecker, functionDeclaration)] : undefined;
}

if (isStaticModifier(node) && isClassStaticBlockDeclaration(node.parent)) {
const classDecl = node.parent.parent;
const { symbol, failedAliasResolution } = getSymbol(classDecl, typeChecker, stopAtAlias);
Expand Down
7 changes: 7 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn1.ts
@@ -0,0 +1,7 @@
/// <reference path="fourslash.ts" />

////function /*end*/foo() {
//// [|/*start*/return|] 10;
////}

verify.goToDefinition("start", "end");
9 changes: 9 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn2.ts
@@ -0,0 +1,9 @@
/// <reference path="fourslash.ts" />

////function foo() {
//// return /*end*/() => {
//// [|/*start*/return|] 10;
//// }
////}

verify.goToDefinition("start", "end");
9 changes: 9 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn3.ts
@@ -0,0 +1,9 @@
/// <reference path="fourslash.ts" />

////class C {
//// /*end*/m() {
//// [|/*start*/return|] 1;
//// }
////}

verify.goToDefinition("start", "end");
5 changes: 5 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn4.ts
@@ -0,0 +1,5 @@
/// <reference path="fourslash.ts" />

////[|/*start*/return|];

verify.goToDefinition("start", []);
9 changes: 9 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn5.ts
@@ -0,0 +1,9 @@
/// <reference path="fourslash.ts" />

////function foo() {
//// class Foo {
//// static { [|/*start*/return|]; }
//// }
////}

verify.goToDefinition("start", []);
9 changes: 9 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn6.ts
@@ -0,0 +1,9 @@
/// <reference path="fourslash.ts" />

////function foo() {
//// return /*end*/function () {
//// [|/*start*/return|] 10;
//// }
////}

verify.goToDefinition("start", "end");
9 changes: 9 additions & 0 deletions tests/cases/fourslash/goToDefinitionReturn7.ts
@@ -0,0 +1,9 @@
/// <reference path="fourslash.ts" />

////function foo(a: string, b: string): string;
////function foo(a: number, b: number): number;
////function /*end*/foo(a: any, b: any): any {
//// [|/*start*/return|] a + b;
////}

verify.goToDefinition("start", "end");

0 comments on commit 245a02c

Please sign in to comment.