mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-05 08:11:30 -06:00
fix(51222): Go-to-definition on return statements should jump to the containing function declaration (#51227)
* fix(51222): add go-to-definition return statement to containing function * add additional tests
This commit is contained in:
parent
2dff34e8c4
commit
245a02cbed
@ -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);
|
||||
|
||||
7
tests/cases/fourslash/goToDefinitionReturn1.ts
Normal file
7
tests/cases/fourslash/goToDefinitionReturn1.ts
Normal file
@ -0,0 +1,7 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////function /*end*/foo() {
|
||||
//// [|/*start*/return|] 10;
|
||||
////}
|
||||
|
||||
verify.goToDefinition("start", "end");
|
||||
9
tests/cases/fourslash/goToDefinitionReturn2.ts
Normal file
9
tests/cases/fourslash/goToDefinitionReturn2.ts
Normal file
@ -0,0 +1,9 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////function foo() {
|
||||
//// return /*end*/() => {
|
||||
//// [|/*start*/return|] 10;
|
||||
//// }
|
||||
////}
|
||||
|
||||
verify.goToDefinition("start", "end");
|
||||
9
tests/cases/fourslash/goToDefinitionReturn3.ts
Normal file
9
tests/cases/fourslash/goToDefinitionReturn3.ts
Normal file
@ -0,0 +1,9 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////class C {
|
||||
//// /*end*/m() {
|
||||
//// [|/*start*/return|] 1;
|
||||
//// }
|
||||
////}
|
||||
|
||||
verify.goToDefinition("start", "end");
|
||||
5
tests/cases/fourslash/goToDefinitionReturn4.ts
Normal file
5
tests/cases/fourslash/goToDefinitionReturn4.ts
Normal file
@ -0,0 +1,5 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////[|/*start*/return|];
|
||||
|
||||
verify.goToDefinition("start", []);
|
||||
9
tests/cases/fourslash/goToDefinitionReturn5.ts
Normal file
9
tests/cases/fourslash/goToDefinitionReturn5.ts
Normal file
@ -0,0 +1,9 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////function foo() {
|
||||
//// class Foo {
|
||||
//// static { [|/*start*/return|]; }
|
||||
//// }
|
||||
////}
|
||||
|
||||
verify.goToDefinition("start", []);
|
||||
9
tests/cases/fourslash/goToDefinitionReturn6.ts
Normal file
9
tests/cases/fourslash/goToDefinitionReturn6.ts
Normal file
@ -0,0 +1,9 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
|
||||
////function foo() {
|
||||
//// return /*end*/function () {
|
||||
//// [|/*start*/return|] 10;
|
||||
//// }
|
||||
////}
|
||||
|
||||
verify.goToDefinition("start", "end");
|
||||
9
tests/cases/fourslash/goToDefinitionReturn7.ts
Normal file
9
tests/cases/fourslash/goToDefinitionReturn7.ts
Normal file
@ -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");
|
||||
Loading…
x
Reference in New Issue
Block a user