|
3 | 3 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GP3 | %FileCheck %s -check-prefix=A1
|
4 | 4 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GP4 | %FileCheck %s -check-prefix=TYPE1
|
5 | 5 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GP5 | %FileCheck %s -check-prefix=TYPE1
|
6 |
| -// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GP6 | %FileCheck %s -check-prefix=A1 |
| 6 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=GP6 | %FileCheck %s -check-prefix=EMPTY |
7 | 7 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_ASSOC_NODUP_1 | %FileCheck %s -check-prefix=GEN_T_ASSOC_E
|
8 | 8 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_ASSOC_NODUP_2 | %FileCheck %s -check-prefix=GEN_T_ASSOC_E
|
9 | 9 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=FUNC_1 | %FileCheck %s -check-prefix=GEN_T
|
|
21 | 21 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ALIAS_2 | %FileCheck %s -check-prefix=GEN_T_DOT
|
22 | 22 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_1 | %FileCheck %s -check-prefix=GEN_T_NOMINAL
|
23 | 23 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_2 | %FileCheck %s -check-prefix=GEN_T_DOT
|
24 |
| -// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_3 | %FileCheck %s -check-prefix=GEN_T_NOMINAL |
| 24 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_3 | %FileCheck %s -check-prefix=ANYTYPE |
25 | 25 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=STRUCT_4 | %FileCheck %s -check-prefix=GEN_T_DOT
|
26 | 26 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLASS_1 | %FileCheck %s -check-prefix=GEN_T_NOMINAL
|
27 | 27 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=CLASS_2 | %FileCheck %s -check-prefix=GEN_T_DOT
|
28 | 28 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ENUM_1 | %FileCheck %s -check-prefix=GEN_T_NOMINAL
|
29 | 29 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ENUM_2 | %FileCheck %s -check-prefix=GEN_T_DOT
|
30 | 30 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ASSOC_1 | %FileCheck %s -check-prefix=P2
|
31 | 31 | // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=ASSOC_2 | %FileCheck %s -check-prefix=U_DOT
|
| 32 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL | %FileCheck %s -check-prefix=PROTOCOL |
| 33 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_EXT | %FileCheck %s -check-prefix=PROTOCOL |
| 34 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=PROTOCOL_SELF | %FileCheck %s -check-prefix=PROTOCOL_SELF |
| 35 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=NOMINAL_TYPEALIAS | %FileCheck %s -check-prefix=NOMINAL_TYPEALIAS |
| 36 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=NOMINAL_TYPEALIAS_EXT | %FileCheck %s -check-prefix=NOMINAL_TYPEALIAS_EXT |
| 37 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=NOMINAL_TYPEALIAS_NESTED1 | %FileCheck %s -check-prefix=NOMINAL_TYPEALIAS_NESTED1 |
| 38 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=NOMINAL_TYPEALIAS_NESTED2 | %FileCheck %s -check-prefix=NOMINAL_TYPEALIAS_NESTED2 |
| 39 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=NOMINAL_TYPEALIAS_NESTED1_EXT | %FileCheck %s -check-prefix=NOMINAL_TYPEALIAS_NESTED1_EXT |
| 40 | +// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=NOMINAL_TYPEALIAS_NESTED2_EXT | %FileCheck %s -check-prefix=NOMINAL_TYPEALIAS_NESTED2_EXT |
32 | 41 |
|
33 | 42 | class A1<T1, T2, T3> {}
|
34 | 43 |
|
@@ -65,6 +74,10 @@ extension A1 where T1.#^GP6^# {}
|
65 | 74 | // TYPE1-NOT: T4
|
66 | 75 | // TYPE1-NOT: T5
|
67 | 76 |
|
| 77 | +// EMPTY: Begin completions, 1 items |
| 78 | +// EMPTY-DAG: Keyword/None: Type[#T1.Type#]; name=Type |
| 79 | +// EMPTY: End completions |
| 80 | + |
68 | 81 | protocol A {associatedtype E}
|
69 | 82 | protocol B {associatedtype E}
|
70 | 83 |
|
@@ -118,20 +131,98 @@ class C1<T> where #^CLASS_1^# {}
|
118 | 131 | class C2<T> where T.#^CLASS_2^# {}
|
119 | 132 | enum E1<T> where #^ENUM_1^# {}
|
120 | 133 | enum E2<T> where T.#^ENUM_2^# {}
|
| 134 | +// GEN_T_NOMINAL: Begin completions, 1 items |
121 | 135 | // GEN_T_NOMINAL: Decl[GenericTypeParam]/Local: T[#T#]; name=T
|
| 136 | +// GEN_T_NOMINAL: End completions |
| 137 | + |
| 138 | +// ANYTYPE: Begin completions |
| 139 | +// ANYTYPE-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 140 | +// ANYTYPE-DAG: Decl[Class]/CurrModule: A1[#A1#]; |
| 141 | +// ANYTYPE-DAG: Decl[Struct]/OtherModule[Swift]: Int[#Int#]; |
| 142 | +// ANYTYPE: End completions |
122 | 143 |
|
123 | 144 | protocol P2 {
|
124 | 145 | associatedtype T where #^ASSOC_1^#
|
125 | 146 | associatedtype U: Assoc where U.#^ASSOC_2^#
|
126 | 147 | }
|
127 | 148 |
|
128 |
| -// P2: Begin completions |
| 149 | +// P2: Begin completions, 3 items |
129 | 150 | // P2-DAG: Decl[GenericTypeParam]/Local: Self[#Self#];
|
130 | 151 | // P2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: T;
|
131 | 152 | // P2-DAG: Decl[AssociatedType]/{{Super|CurrNominal}}: U;
|
132 | 153 | // P2: End completions
|
133 | 154 |
|
134 |
| -// U_DOT: Begin completions |
135 |
| -// FIXME: Should complete Q from Assoc. |
| 155 | +// U_DOT: Begin completions, 2 items |
136 | 156 | // U_DOT-DAG: Keyword/None: Type[#Self.U.Type#];
|
| 157 | +// U_DOT-DAG: Decl[AssociatedType]/CurrNominal: Q; |
137 | 158 | // U_DOT: End completions
|
| 159 | + |
| 160 | +protocol P3 where #^PROTOCOL^# { |
| 161 | + associatedtype T: Assoc |
| 162 | + typealias U = T.Q |
| 163 | + typealias IntAlias = Int |
| 164 | +} |
| 165 | +// PROTOCOL: Begin completions, 3 items |
| 166 | +// PROTOCOL-DAG: Decl[GenericTypeParam]/Local: Self[#Self#]; |
| 167 | +// PROTOCOL-DAG: Decl[AssociatedType]/CurrNominal: T; |
| 168 | +// PROTOCOL-DAG: Decl[TypeAlias]/CurrNominal: U[#Self.T.Q#]; |
| 169 | +// PROTOCOL: End completions |
| 170 | + |
| 171 | +extension P3 where #^PROTOCOL_EXT^# { |
| 172 | + // Same as PROTOCOL |
| 173 | +} |
| 174 | + |
| 175 | +protocol P4 where Self.#^PROTOCOL_SELF^# { |
| 176 | + associatedtype T: Assoc |
| 177 | + typealias U = T.Q |
| 178 | + typealias IntAlias = Int |
| 179 | +} |
| 180 | +// PROTOCOL_SELF: Begin completions, 4 items |
| 181 | +// PROTOCOL_SELF-DAG: Decl[AssociatedType]/CurrNominal: T; |
| 182 | +// PROTOCOL_SELF-DAG: Decl[TypeAlias]/CurrNominal: U[#Self.T.Q#]; |
| 183 | +// PROTOCOL_SELF-DAG: Decl[TypeAlias]/CurrNominal: IntAlias[#Int#]; |
| 184 | +// PROTOCOL_SELF-DAG: Keyword/None: Type[#Self.Type#]; |
| 185 | +// PROTOCOL_SELF: End completions |
| 186 | + |
| 187 | +struct TA1<T: Assoc> where #^NOMINAL_TYPEALIAS^# { |
| 188 | + typealias U = T.Q |
| 189 | +} |
| 190 | +// NOMINAL_TYPEALIAS: Begin completions, 1 items |
| 191 | +// NOMINAL_TYPEALIAS-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 192 | +// NOMINAL_TYPEALIAS: End completions |
| 193 | +extension TA1 where #^NOMINAL_TYPEALIAS_EXT^# { } |
| 194 | +// NOMINAL_TYPEALIAS_EXT: Begin completions, 2 items |
| 195 | +// NOMINAL_TYPEALIAS_EXT-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 196 | +// NOMINAL_TYPEALIAS_EXT-DAG: Decl[TypeAlias]/CurrNominal: U[#T.Q#]; |
| 197 | +// NOMINAL_TYPEALIAS_EXT: End completions |
| 198 | + |
| 199 | +struct TA2<T: Assoc> { |
| 200 | + struct Inner1<U> where #^NOMINAL_TYPEALIAS_NESTED1^# { |
| 201 | + typealias X1 = T |
| 202 | + typealias X2 = T.Q |
| 203 | + } |
| 204 | +// NOMINAL_TYPEALIAS_NESTED1: Begin completions, 2 items |
| 205 | +// NOMINAL_TYPEALIAS_NESTED1-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 206 | +// NOMINAL_TYPEALIAS_NESTED1-DAG: Decl[GenericTypeParam]/Local: U[#U#]; |
| 207 | +// NOMINAL_TYPEALIAS_NESTED1: End completions |
| 208 | + struct Inner2 where #^NOMINAL_TYPEALIAS_NESTED2^# { |
| 209 | + typealias X1 = T |
| 210 | + typealias X2 = T.Q |
| 211 | + } |
| 212 | +// NOMINAL_TYPEALIAS_NESTED2: Begin completions, 1 items |
| 213 | +// NOMINAL_TYPEALIAS_NESTED2-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 214 | +// NOMINAL_TYPEALIAS_NESTED2: End completions |
| 215 | +} |
| 216 | +extension TA2.Inner1 where #^NOMINAL_TYPEALIAS_NESTED1_EXT^# {} |
| 217 | +// NOMINAL_TYPEALIAS_NESTED1_EXT: Begin completions, 4 items |
| 218 | +// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 219 | +// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[GenericTypeParam]/Local: U[#U#]; |
| 220 | +// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[TypeAlias]/CurrNominal: X1[#T#]; |
| 221 | +// NOMINAL_TYPEALIAS_NESTED1_EXT-DAG: Decl[TypeAlias]/CurrNominal: X2[#T.Q#]; |
| 222 | +// NOMINAL_TYPEALIAS_NESTED1_EXT: End completions |
| 223 | +extension TA2.Inner2 where #^NOMINAL_TYPEALIAS_NESTED2_EXT^# {} |
| 224 | +// NOMINAL_TYPEALIAS_NESTED2_EXT: Begin completions, 3 items |
| 225 | +// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[GenericTypeParam]/Local: T[#T#]; |
| 226 | +// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[TypeAlias]/CurrNominal: X1[#T#]; |
| 227 | +// NOMINAL_TYPEALIAS_NESTED2_EXT-DAG: Decl[TypeAlias]/CurrNominal: X2[#T.Q#]; |
| 228 | +// NOMINAL_TYPEALIAS_NESTED2_EXT: End completions |
0 commit comments