From 53a759095c321cffd5a0457a5593c3b31a302e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Thu, 20 Aug 2026 14:02:03 +0200 Subject: [PATCH] Fix go-to-type-definition for tuple aliases --- .../tests/goToTypeWithTupleTypes_test.go | 9 +++++++ tsc/internal/ls/definition.go | 8 ++++-- .../goToTypeWithTupleTypes1.baseline.jsonc | 26 ++++++++++++++++--- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/tsc/internal/fourslash/tests/goToTypeWithTupleTypes_test.go b/tsc/internal/fourslash/tests/goToTypeWithTupleTypes_test.go index b13e18b7f1a5f..f656bcc93c314 100644 --- a/tsc/internal/fourslash/tests/goToTypeWithTupleTypes_test.go +++ b/tsc/internal/fourslash/tests/goToTypeWithTupleTypes_test.go @@ -17,6 +17,15 @@ export let x/*1*/: [number, number] = [1, 2]; type DoubleTupleTrouble = [T, T]; export let y/*2*/: DoubleTupleTrouble = [1, 2]; + +type SpanMapping = [ + virtualStart: number, + virtualLength: number, + originalStart: number, + originalLength: number, +]; + +export let mapping/*3*/: SpanMapping; ` f, done := fourslash.NewFourslash(t, nil /*capabilities*/, content) defer done() diff --git a/tsc/internal/ls/definition.go b/tsc/internal/ls/definition.go index 29b48008199e1..9f95ac03d2990 100644 --- a/tsc/internal/ls/definition.go +++ b/tsc/internal/ls/definition.go @@ -522,8 +522,12 @@ func getTypeOfSymbolAtLocation(c *checker.Checker, symbol *ast.Symbol, node *ast func getDeclarationsFromType(t *checker.Type) []*ast.Node { var result []*ast.Node for _, t := range t.Distributed() { - if t.Symbol() != nil { - for _, decl := range t.Symbol().Declarations { + symbol := t.Symbol() + if symbol == nil { + symbol = t.Alias().Symbol() + } + if symbol != nil { + for _, decl := range symbol.Declarations { result = core.AppendIfUnique(result, decl) } } diff --git a/tsc/testdata/baselines/reference/fourslash/goToType/goToTypeWithTupleTypes1.baseline.jsonc b/tsc/testdata/baselines/reference/fourslash/goToType/goToTypeWithTupleTypes1.baseline.jsonc index baf09943a378a..dd67c9d5ae75f 100644 --- a/tsc/testdata/baselines/reference/fourslash/goToType/goToTypeWithTupleTypes1.baseline.jsonc +++ b/tsc/testdata/baselines/reference/fourslash/goToType/goToTypeWithTupleTypes1.baseline.jsonc @@ -5,8 +5,7 @@ // // type DoubleTupleTrouble = [T, T]; // -// export let y: DoubleTupleTrouble = [1, 2]; -// +// --- (line: 6) skipped --- @@ -15,7 +14,28 @@ // // export let x: [number, number] = [1, 2]; // -// type DoubleTupleTrouble = [T, T]; +// <|type [|DoubleTupleTrouble|] = [T, T];|> // // export let y/*GOTO TYPE*/: DoubleTupleTrouble = [1, 2]; +// +// type SpanMapping = [ +// virtualStart: number, +// --- (line: 10) skipped --- + + + +// === goToType === +// === /goToTypeWithTupleTypes1.ts === +// --- (line: 4) skipped --- +// +// export let y: DoubleTupleTrouble = [1, 2]; +// +// <|type [|SpanMapping|] = [ +// virtualStart: number, +// virtualLength: number, +// originalStart: number, +// originalLength: number, +// ];|> +// +// export let mapping/*GOTO TYPE*/: SpanMapping; // \ No newline at end of file