From 46a826f0896945d8ce783585aee0bbe620c9a526 Mon Sep 17 00:00:00 2001 From: Dan Chao Date: Wed, 11 Nov 2026 06:58:49 -0700 Subject: [PATCH] Fix reference access This fixes an issue where the editor fails to follow subscripts if a reference is typealias'd. --- .../org/pkl/lsp/type/ComputeExprType.kt | 4 +-- .../kotlin/org/pkl/lsp/GoToDefinitionTest.kt | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/org/pkl/lsp/type/ComputeExprType.kt b/src/main/kotlin/org/pkl/lsp/type/ComputeExprType.kt index a2f18e52..26806647 100644 --- a/src/main/kotlin/org/pkl/lsp/type/ComputeExprType.kt +++ b/src/main/kotlin/org/pkl/lsp/type/ComputeExprType.kt @@ -410,9 +410,9 @@ private fun doComputeSubscriptExprType( base: PklBaseModule, context: PklProject?, ) = - when (receiverType) { + when (val unaliased = receiverType.unaliased(base, context)) { is Type.StringLiteral -> base.stringType - is Type.Reference -> receiverType.valueTypeForSubscriptKeyType(getKeyType(), base, context) + is Type.Reference -> unaliased.valueTypeForSubscriptKeyType(getKeyType(), base, context) else -> { val receiverClassType = receiverType.toClassType(base, context) when { diff --git a/src/test/kotlin/org/pkl/lsp/GoToDefinitionTest.kt b/src/test/kotlin/org/pkl/lsp/GoToDefinitionTest.kt index 079ac728..21650775 100644 --- a/src/test/kotlin/org/pkl/lsp/GoToDefinitionTest.kt +++ b/src/test/kotlin/org/pkl/lsp/GoToDefinitionTest.kt @@ -648,6 +648,34 @@ class GoToDefinitionTest : LspTestBase() { assertThat(resolved.parentOfTypes(PklClass::class)!!.name).isEqualTo("Bird") } + @Test + fun `resolve reference subscript through typealias`() { + createPklFile( + """ + import "pkl:ref" + + typealias MyReference = ref.Reference + + class Domain extends ref.Domain + + class Bird { + /// The name of the bird + name: String + } + + r: MyReference> + + res = r[0].name + """ + .trimIndent() + ) + val resolved = goToDefinition().single() + assertThat(resolved).isInstanceOf(PklClassProperty::class.java) + resolved as PklClassProperty + assertThat(resolved.name).isEqualTo("name") + assertThat(resolved.parentOfTypes(PklClass::class)!!.name).isEqualTo("Bird") + } + @Test fun `resolve unqualified member link`() { createPklFile(