From 87f9820c85e91aad64e1130bcaa2f446f64ee9d2 Mon Sep 17 00:00:00 2001 From: Hamish Knight Date: Wed, 16 Jul 2025 15:59:49 +0100 Subject: [PATCH] [AST] Visit TypeValueExpr's TypeRepr in ASTWalker Ensure that we walk the TypeRepr to ensure that both cursor info and indexing pick up on the reference to the generic parameter. rdar://145509737 --- lib/AST/ASTWalker.cpp | 4 ++++ test/Index/index_generic_params.swift | 13 +++++++++++++ test/SourceKit/CursorInfo/cursor_generics.swift | 10 ++++++++++ 3 files changed, 27 insertions(+) diff --git a/lib/AST/ASTWalker.cpp b/lib/AST/ASTWalker.cpp index e20559a241ccf..7d674347e0808 100644 --- a/lib/AST/ASTWalker.cpp +++ b/lib/AST/ASTWalker.cpp @@ -1461,6 +1461,10 @@ class Traversal : public ASTVisitorgetRepr()) { + if (doIt(TR)) + return nullptr; + } return E; } diff --git a/test/Index/index_generic_params.swift b/test/Index/index_generic_params.swift index f7ef24acd39ec..0fbb6b4bcc695 100644 --- a/test/Index/index_generic_params.swift +++ b/test/Index/index_generic_params.swift @@ -165,3 +165,16 @@ _ = C.Nested(value: 1) // CHECK-NEXT: [[@LINE+2]]:7 | struct/Swift | Nested | [[C_Nested_USR]] | Ref | rel: 0 // CHECK-NEXT: [[@LINE+1]]:14 | constructor/Swift | init(value:) | [[C_Nested_init_USR]] | Ref,Call | rel: 0 _ = C.Nested.init(value: 1) + +// MARK: - Test value generic parameters + +struct HasValueGenericParam { +// CHECK: [[@LINE-1]]:33 | type-alias/generic-type-param/Swift | Param | s:14swift_ide_test20HasValueGenericParamV0G0xmfp | Def,RelChild | rel: 1 +// CHECK-NEXT: RelChild | struct/Swift | HasValueGenericParam + func foo() { + _ = Param + // CHECK: [[@LINE-1]]:9 | type-alias/generic-type-param/Swift | Param | s:14swift_ide_test20HasValueGenericParamV0G0xmfp | Ref,RelCont | rel: 1 + // CHECK-NEXT: RelCont | instance-method/Swift | foo() + } +} + diff --git a/test/SourceKit/CursorInfo/cursor_generics.swift b/test/SourceKit/CursorInfo/cursor_generics.swift index 86d9d3340a893..640b173f3d41e 100644 --- a/test/SourceKit/CursorInfo/cursor_generics.swift +++ b/test/SourceKit/CursorInfo/cursor_generics.swift @@ -34,6 +34,12 @@ public protocol Proto { associatedtype Assoc } +struct HasValueGenericParam { + func foo() { + _ = Param + } +} + // RUN: %sourcekitd-test -req=cursor -pos=1:10 %s -- %s | %FileCheck -check-prefix=CHECK1 %s // CHECK1: func testGenerics<T>(x: T) @@ -69,3 +75,7 @@ public protocol Proto { // CHECK_ASSOC_COMMON-NEXT: source.refactoring.kind.rename.global // CHECK_ASSOC_COMMON-NEXT: Global Rename // CHECK_ASSOC_COMMON-NEXT: ACTIONS END + +// RUN: %sourcekitd-test -req=cursor -pos=39:9 %s -- %s | %FileCheck -check-prefix=CHECK_VALUE_GENERIC %s +// CHECK_VALUE_GENERIC: source.lang.swift.ref.generic_type_param (37:33-37:38) +// CHECK_VALUE_GENERIC: let Param : Int