| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_1 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_2 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_3 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_5 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_6 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_7 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_8 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_9 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_10 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PART_11 | %FileCheck %s -check-prefix=PERSON-MEMBER |
| |
| class Person { |
| var name: String |
| var friends: [Person] = [] |
| var bestFriend: Person? = nil |
| init(name: String) { |
| self.name = name |
| } |
| func getName() -> String { return name } |
| subscript(_ index: Int) -> Int { get { return 1} } |
| } |
| |
| let keyPath1 = \Person.#^PART_1^# |
| let keyPath2 = \Person.friends[0].#^PART_2^# |
| let keyPath3 = \Person.friends[0].friends[0].friends[0].#^PART_3^# |
| |
| // FIXME: the optionality keypath should work after our compiler is ready. |
| let keyPath4 = \Person.bestFriend?.#^PART_4^# |
| let keyPath5 = \Person.friends.[0].friends[0].friends[0].#^PART_5^# |
| let keyPath6 = \[Person].[0].#^PART_6^# |
| let keyPath7 = \[Person].[0].friends[0].#^PART_7^# |
| |
| func foo1(_ p : Person) { |
| _ = p[keyPath:\Person.#^PART_8^#] |
| _ = p[keyPath:\Person.friends[0].#^PART_9^#] |
| _ = p[keyPath:\[Person].[0].#^PART_10^#] |
| _ = p[keyPath:\Person.friends.[0].friends[0].friends[0].#^PART_11^#] |
| } |
| |
| // PERSON-MEMBER: Begin completions, 4 items |
| // PERSON-MEMBER-NEXT: Decl[InstanceVar]/CurrNominal: name[#String#]; name=name |
| // PERSON-MEMBER-NEXT: Decl[InstanceVar]/CurrNominal: friends[#[Person]#]; name=friends |
| // PERSON-MEMBER-NEXT: Decl[InstanceVar]/CurrNominal: bestFriend[#Person?#]; name=bestFriend |
| // PERSON-MEMBER-NEXT: Decl[Subscript]/CurrNominal: [{#Int#}][#Int#]; name=[Int] |