diff --git a/tsc/internal/fourslash/tests/callHierarchyFile_test.go b/tsc/internal/fourslash/tests/callHierarchyFile_test.go index b2e6d4a57614d..8db0d8be12cb1 100644 --- a/tsc/internal/fourslash/tests/callHierarchyFile_test.go +++ b/tsc/internal/fourslash/tests/callHierarchyFile_test.go @@ -10,7 +10,8 @@ import ( func TestCallHierarchyFile(t *testing.T) { t.Parallel() defer testutil.RecoverAndFail(t, "Panic on fourslash test") - const content = `foo(); + const content = `// @Filename: /src/callers.ts +foo(); function /**/foo() { }` f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) diff --git a/tsc/internal/ls/callhierarchy.go b/tsc/internal/ls/callhierarchy.go index cea1d95ee8301..b31b52a1c5469 100644 --- a/tsc/internal/ls/callhierarchy.go +++ b/tsc/internal/ls/callhierarchy.go @@ -18,6 +18,7 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/printer" "github.com/microsoft/TypeScript/tsc/internal/scanner" "github.com/microsoft/TypeScript/tsc/internal/spanmap" + "github.com/microsoft/TypeScript/tsc/internal/tspath" ) type CallHierarchyDeclaration = *ast.Node @@ -161,7 +162,7 @@ func getSymbolOfCallHierarchyDeclaration(c *checker.Checker, node *ast.Node) *as func getCallHierarchyItemName(program *compiler.Program, node *ast.Node) (text string, pos int, end int) { if ast.IsSourceFile(node) { sourceFile := node.AsSourceFile() - return sourceFile.FileName(), 0, 0 + return tspath.GetBaseFileName(sourceFile.OriginalFileName()), 0, 0 } if (ast.IsFunctionDeclaration(node) || ast.IsClassDeclaration(node)) && node.Name() == nil { @@ -502,6 +503,13 @@ func (l *LanguageService) createCallHierarchyItem(program *compiler.Program, nod sourceFile := ast.GetSourceFileOfNode(node) nameText, namePos, nameEnd := getCallHierarchyItemName(program, node) containerName := getCallHierarchyItemContainerName(program, node) + if ast.IsSourceFile(node) { + containerName = relativePathFromDirectory( + program.GetCurrentDirectory(), + tspath.GetDirectoryPath(sourceFile.OriginalFileName()), + l.UseCaseSensitiveFileNames(), + ) + } kind := getSymbolKindFromNode(node) diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousClassNoCrash2.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousClassNoCrash2.callHierarchy.txt index 969e7ab9fb7bb..14a62dcbdc504 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousClassNoCrash2.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousClassNoCrash2.callHierarchy.txt @@ -1,5 +1,5 @@ // === Call Hierarchy === -╭ name: /main.ts +╭ name: main.ts ├ kind: file ├ file: /main.ts ├ span: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousFunctionNoCrash2.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousFunctionNoCrash2.callHierarchy.txt index 95f7368f85bad..0939a783c7914 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousFunctionNoCrash2.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyAnonymousFunctionNoCrash2.callHierarchy.txt @@ -1,5 +1,5 @@ // === Call Hierarchy === -╭ name: /main.ts +╭ name: main.ts ├ kind: file ├ file: /main.ts ├ span: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt index bfa14daf2ef18..57e534a1ab4aa 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyCallExpressionByConstNamedFunctionExpression.callHierarchy.txt @@ -42,7 +42,7 @@ │ │ │ ^^^ │ ╰ ╰ │ ╭ from: -│ │ ╭ name: /callHierarchyCallExpressionByConstNamedFunctionExpression.ts +│ │ ╭ name: callHierarchyCallExpressionByConstNamedFunctionExpression.ts │ │ ├ kind: file │ │ ├ file: /callHierarchyCallExpressionByConstNamedFunctionExpression.ts │ │ ├ span: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyExportEqualsFunction.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyExportEqualsFunction.callHierarchy.txt index 3e85787a8935c..38640b1796259 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyExportEqualsFunction.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyExportEqualsFunction.callHierarchy.txt @@ -1,5 +1,5 @@ // === Call Hierarchy === -╭ name: /other.ts +╭ name: other.ts ├ kind: module ├ file: /other.ts ├ span: diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyFile.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyFile.callHierarchy.txt index be23e82ae334d..d4c0c70b10acf 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyFile.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyFile.callHierarchy.txt @@ -1,26 +1,27 @@ // === Call Hierarchy === ╭ name: foo ├ kind: function -├ file: /callHierarchyFile.ts +├ file: /src/callers.ts ├ span: -│ ╭ /callHierarchyFile.ts:2:1-3:2 +│ ╭ /src/callers.ts:2:1-3:2 │ │ 2: function foo() { │ │ ^^^^^^^^^^^^^^^^ │ │ 3: } │ │ ^ │ ╰ ├ selectionSpan: -│ ╭ /callHierarchyFile.ts:2:10-2:13 +│ ╭ /src/callers.ts:2:10-2:13 │ │ 2: function foo() { │ │ ^^^ │ ╰ ├ incoming: │ ╭ from: -│ │ ╭ name: /callHierarchyFile.ts +│ │ ╭ name: callers.ts │ │ ├ kind: file -│ │ ├ file: /callHierarchyFile.ts +│ │ ├ containerName: src +│ │ ├ file: /src/callers.ts │ │ ├ span: -│ │ │ ╭ /callHierarchyFile.ts:1:1-3:2 +│ │ │ ╭ /src/callers.ts:1:1-3:2 │ │ │ │ 1: foo(); │ │ │ │ ^^^^^^ │ │ │ │ 2: function foo() { @@ -29,13 +30,13 @@ │ │ │ │ ^ │ │ │ ╰ │ │ ├ selectionSpan: -│ │ │ ╭ /callHierarchyFile.ts:1:1-1:1 +│ │ │ ╭ /src/callers.ts:1:1-1:1 │ │ │ │ 1: foo(); │ │ │ │ < │ │ │ ╰ │ │ ╰ incoming: none │ ├ fromSpans: -│ │ ╭ /callHierarchyFile.ts:1:1-1:4 +│ │ ╭ /src/callers.ts:1:1-1:4 │ │ │ 1: foo(); │ │ │ ^^^ │ ╰ ╰ diff --git a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInterfaceMethod.callHierarchy.txt b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInterfaceMethod.callHierarchy.txt index 4cdbb8c53b9c0..6ff5b0750af1f 100644 --- a/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInterfaceMethod.callHierarchy.txt +++ b/tsc/testdata/baselines/reference/fourslash/callHierarchy/callHierarchyInterfaceMethod.callHierarchy.txt @@ -14,7 +14,7 @@ │ ╰ ├ incoming: │ ╭ from: -│ │ ╭ name: /callHierarchyInterfaceMethod.ts +│ │ ╭ name: callHierarchyInterfaceMethod.ts │ │ ├ kind: file │ │ ├ file: /callHierarchyInterfaceMethod.ts │ │ ├ span: