diff --git a/src/services/callHierarchy.ts b/src/services/callHierarchy.ts index 9934c91c88e..ca5a193e78f 100644 --- a/src/services/callHierarchy.ts +++ b/src/services/callHierarchy.ts @@ -249,6 +249,10 @@ namespace ts.CallHierarchy { } return undefined; } + // #39453 + if (isVariableDeclaration(location) && location.initializer && isConstNamedExpression(location.initializer)) { + return location.initializer; + } if (!followingSymbol) { let symbol = typeChecker.getSymbolAtLocation(location); if (symbol) { diff --git a/tests/baselines/reference/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt b/tests/baselines/reference/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt new file mode 100644 index 00000000000..470cec600f3 --- /dev/null +++ b/tests/baselines/reference/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt @@ -0,0 +1,107 @@ +╭ name: bar +├ kind: function +├ file: /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts +├ span: +│ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:5:13-7:2 +│ │ 5: const bar = function () { +│ │ ^^^^^^^^^^^^^ +│ │ 6: baz(); +│ │ ^^^^^^^^^^ +│ │ 7: } +│ │ ^ +│ ╰ +├ selectionSpan: +│ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:5:7-5:10 +│ │ 5: const bar = function () { +│ │ ^^^ +│ ╰ +├ incoming: +│ ╭ from: +│ │ ╭ name: foo +│ │ ├ kind: function +│ │ ├ file: /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts +│ │ ├ span: +│ │ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:1:1-3:2 +│ │ │ │ 1: function foo() { +│ │ │ │ ^^^^^^^^^^^^^^^^ +│ │ │ │ 2: bar(); +│ │ │ │ ^^^^^^^^^^ +│ │ │ │ 3: } +│ │ │ │ ^ +│ │ │ ╰ +│ │ ├ selectionSpan: +│ │ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:1:10-1:13 +│ │ │ │ 1: function foo() { +│ │ │ │ ^^^ +│ │ │ ╰ +│ │ ╰ incoming: none +│ ├ fromSpans: +│ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:2:5-2:8 +│ │ │ 2: bar(); +│ │ │ ^^^ +│ ╰ ╰ +│ ╭ from: +│ │ ╭ name: /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts +│ │ ├ kind: script +│ │ ├ file: /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts +│ │ ├ span: +│ │ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:1:1-12:6 +│ │ │ │ 1: function foo() { +│ │ │ │ ^^^^^^^^^^^^^^^^ +│ │ │ │ 2: bar(); +│ │ │ │ ^^^^^^^^^^ +│ │ │ │ 3: } +│ │ │ │ ^ +│ │ │ │ 4: +│ │ │ │ ^ +│ │ │ │ 5: const bar = function () { +│ │ │ │ ^^^^^^^^^^^^^^^^^^^^^^^^^ +│ │ │ │ 6: baz(); +│ │ │ │ ^^^^^^^^^^ +│ │ │ │ 7: } +│ │ │ │ ^ +│ │ │ │ 8: +│ │ │ │ ^ +│ │ │ │ 9: function baz() { +│ │ │ │ ^^^^^^^^^^^^^^^^ +│ │ │ │ 10: } +│ │ │ │ ^ +│ │ │ │ 11: +│ │ │ │ ^ +│ │ │ │ 12: bar() +│ │ │ │ ^^^^^ +│ │ │ ╰ +│ │ ├ selectionSpan: +│ │ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:1:1-1:1 +│ │ │ │ 1: function foo() { +│ │ │ │ < +│ │ │ ╰ +│ │ ╰ incoming: none +│ ├ fromSpans: +│ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:12:1-12:4 +│ │ │ 12: bar() +│ │ │ ^^^ +│ ╰ ╰ +├ outgoing: +│ ╭ to: +│ │ ╭ name: baz +│ │ ├ kind: function +│ │ ├ file: /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts +│ │ ├ span: +│ │ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:9:1-10:2 +│ │ │ │ 9: function baz() { +│ │ │ │ ^^^^^^^^^^^^^^^^ +│ │ │ │ 10: } +│ │ │ │ ^ +│ │ │ ╰ +│ │ ├ selectionSpan: +│ │ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:9:10-9:13 +│ │ │ │ 9: function baz() { +│ │ │ │ ^^^ +│ │ │ ╰ +│ │ ╰ outgoing: none +│ ├ fromSpans: +│ │ ╭ /tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts:6:5-6:8 +│ │ │ 6: baz(); +│ │ │ ^^^ +╰ ╰ ╰ diff --git a/tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts b/tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts new file mode 100644 index 00000000000..05057886f70 --- /dev/null +++ b/tests/cases/fourslash/callHierarchyCallExpressionByConstNamedFunctionExpression.ts @@ -0,0 +1,16 @@ +/// + +//// function foo() { +//// bar(); +//// } +//// +//// const bar = function () { +//// baz(); +//// } +//// +//// function baz() { +//// } +//// +//// /**/bar() +goTo.marker(); +verify.baselineCallHierarchy();