Files
swift-mirror/test/Index/index_keypaths.swift
Nathan Hawes ef6c374516 [Sema/Index] Resolve #keyPath components so they can be indexed
Unlike \keypath expressions, only the property components of #keypath
expressions were being resolved, so index wouldn't pick up references for their
qualifying types.

Also fixes a code completion bug where it was reporting members from the Swift
rather than ObjC side of bridged types.

Resolves rdar://problem/61573935
2020-08-05 15:27:52 -07:00

48 lines
1.4 KiB
Swift

// RUN: %target-swift-ide-test(mock-sdk: %clang-importer-sdk) -print-indexed-symbols -source-filename %s | %FileCheck %s
// REQUIRES: objc_interop
import Foundation
struct MyStruct {
struct Inner {
let myProp = 1
}
}
let a = \MyStruct.Inner.myProp
// CHECK: [[@LINE-1]]:25 | {{.*}} | myProp
// CHECK: [[@LINE-2]]:10 | {{.*}} | MyStruct
// CHECK: [[@LINE-3]]:19 | {{.*}} | Inner
let b: KeyPath<MyStruct.Inner, Int> = \.myProp
// CHECK: [[@LINE-1]]:41 | {{.*}} | myProp
@objc class MyClass: NSObject {
@objc class Inner: NSObject {
@objc var myProp = 1
@objc var otherProp:[String: MyClass.Inner] = [:]
func method() {
let c: String = #keyPath(myProp)
// CHECK: [[@LINE-1]]:32 | {{.*}} | myProp
}
}
}
let d: String = #keyPath(MyClass.Inner.myProp)
// CHECK: [[@LINE-1]]:26 | {{.*}} | MyClass
// CHECK: [[@LINE-2]]:34 | {{.*}} | Inner
// CHECK: [[@LINE-3]]:40 | {{.*}} | myProp
let e = \MyClass.Inner.myProp
// CHECK: [[@LINE-1]]:24 | {{.*}} | myProp
// CHECK: [[@LINE-2]]:10 | {{.*}} | MyClass
// CHECK: [[@LINE-3]]:18 | {{.*}} | Inner
let f: KeyPath<MyClass.Inner, Int> = \.myProp
// CHECK: [[@LINE-1]]:40 | {{.*}} | myProp
let g: String = #keyPath(MyClass.Inner.otherProp.someDictKey.myProp)
// CHECK: [[@LINE-1]]:26 | {{.*}} | MyClass
// CHECK: [[@LINE-2]]:34 | {{.*}} | Inner
// CHECK: [[@LINE-3]]:40 | {{.*}} | otherProp
// CHECK: [[@LINE-4]]:62 | {{.*}} | myProp