-   Notifications  
You must be signed in to change notification settings  - Fork 10.6k
 
Description
Description
 When Swift code extends a typealias, the index data (either from SourceKit using its index request or the indexstore from index while building) contains no reference to the typealias. Instead it only references the real type that the typealias is alias-ing.
Consider this code:
Module Foo:
typealias ExtendableFoo = FooModule Bar:
extension ExtendableFoo { ... }The index for Bar contains a reference to the type Foo, with no reference to the typealias ExtendableFoo.
Steps to reproduce
Create 2 Swift files, to be built as 2 separate Swift modules:
File Typealias.swift
public struct MyType {} public typealias AliasType = MyTypeFile Extension.swift
import Typealias extension AliasType { func foo() {} }Build a swiftmodule for Typealias.swift:
$ swiftc \ -sdk /var/db/xcode_select_link//Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk \ -target x86_64-apple-ios15.0-simulator \ -emit-module-path .build/Typealias.swiftmodule \ Typealias.swiftRun sourcekitd-test to index Extension.swift:
$ sourcekitd-test -req index Extension.swift -- \ -target x86_64-apple-ios15.0-simulator \ -sdk /var/db/xcode_select_link/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk \ -F/var/db/xcode_select_link/Platforms/iPhoneSimulator.platform/Developer/Library/Frameworks \ -F/var/db/xcode_select_link/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/Developer/Library/Frameworks \ -I/var/db/xcode_select_link/Platforms/iPhoneSimulator.platform/Developer/usr/lib \ -I$(pwd)/.build -module-name Extension \ Extension.swift Observe the entities results in the index data:
key.entities: [ { key.kind: source.lang.swift.ref.module, key.name: "Typealias", key.usr: "c:@M@Typealias", key.line: 1, key.column: 8 }, { key.kind: source.lang.swift.decl.extension.struct, key.name: "MyType", key.usr: "s:e:s:9Typealias6MyTypeV9ExtensionE3fooyyF", key.line: 2, key.column: 11, key.entities: [ { key.kind: source.lang.swift.ref.struct, key.name: "MyType", key.usr: "s:9Typealias6MyTypeV", key.line: 2, key.column: 11 }, { key.kind: source.lang.swift.decl.function.method.instance, key.name: "foo()", key.usr: "s:9Typealias6MyTypeV9ExtensionE3fooyyF", key.line: 3, key.column: 7, key.effective_access: source.decl.effective_access.internal } ] } ] Expected behavior
I expect to see a reference to the typealias that is being extend, e.g. AliasType in this case.
Environment
- Swift compiler version info Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)
 - Xcode version info Xcode 14.3 Build version 14E222b
 - Deployment target: iOS 15.0