11// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_UNRESOLVED | %FileCheck %s -check-prefix=METATYPE_UNRESOLVED
2+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_UNRESOLVED_BRACKET | %FileCheck %s -check-prefix=METATYPE_UNRESOLVED_BRACKET
23// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_INT | %FileCheck %s -check-prefix=METATYPE_INT
4+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_INT_BRACKET | %FileCheck %s -check-prefix=METATYPE_INT_BRACKET
35// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSTANCE_INT | %FileCheck %s -check-prefix=INSTANCE_INT
6+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSTANCE_INT_BRACKET | %FileCheck %s -check-prefix=INSTANCE_INT_BRACKET
47// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_ARCHETYPE | %FileCheck %s -check-prefix=METATYPE_ARCHETYPE
8+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_ARCHETYPE_BRACKET | %FileCheck %s -check-prefix=METATYPE_ARCHETYPE_BRACKET
59// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSTANCE_ARCHETYPE | %FileCheck %s -check-prefix=INSTANCE_ARCHETYPE
10+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSTANCE_ARCHETYPE_BRACKET | %FileCheck %s -check-prefix=INSTANCE_ARCHETYPE_BRACKET
611// RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=METATYPE_LABEL | %FileCheck %s -check-prefix=METATYPE_LABEL
7- // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSTANCE_LABEL | %FileCheck %s -check-prefix=INSTANCE_LABEL
12+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=INSTANCE_LABEL | %FileCheck %s -check-prefix=INSTANCE_LABEL
13+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF_IN_INSTANCEMETHOD | %FileCheck %s -check-prefix=SELF_IN_INSTANCEMETHOD
14+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SUPER_IN_INSTANCEMETHOD | %FileCheck %s -check-prefix=SUPER_IN_INSTANCEMETHOD
15+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SELF_IN_STATICMETHOD | %FileCheck %s -check-prefix=SELF_IN_STATICMETHOD
16+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=SUPER_IN_STATICMETHOD | %FileCheck %s -check-prefix=SUPER_IN_STATICMETHOD
17+
18+ // RUN: %target-swift-ide-test -code-completion -source-filename %s -code-completion-token=LABELED_SUBSCRIPT | %FileCheck %s -check-prefix=LABELED_SUBSCRIPT
819
920struct MyStruct < T> {
1021 static subscript( x: Int , static defValue: T ) -> MyStruct < T > {
@@ -24,6 +35,10 @@ func test1() {
2435// METATYPE_UNRESOLVED-DAG: Keyword/CurrNominal: .Type[#MyStruct<_>.Type#];
2536// METATYPE_UNRESOLVED: End completions
2637
38+ let _ = MyStruct[ #^METATYPE_UNRESOLVED_BRACKET^#
39+ // METATYPE_UNRESOLVED_BRACKET: Begin completions
40+ // METATYPE_UNRESOLVED_BRACKET-DAG: Decl[Subscript]/CurrNominal: ['[']{#(x): Int#}, {#static: _#}[']'][#MyStruct<_>#];
41+ // METATYPE_UNRESOLVED_BRACKET: End completions
2742
2843 let _ = MyStruct < Int > #^METATYPE_INT^#
2944// METATYPE_INT: Begin completions, 4 items
@@ -33,12 +48,21 @@ func test1() {
3348// METATYPE_INT-DAG: Keyword/CurrNominal: .Type[#MyStruct<Int>.Type#];
3449// METATYPE_INT: End completions
3550
51+ let _ = MyStruct< Int> [ #^METATYPE_INT_BRACKET^#
52+ // METATYPE_INT_BRACKET: Begin completions
53+ // METATYPE_INT_BRACKET-DAG: Decl[Subscript]/CurrNominal: ['[']{#(x): Int#}, {#static: Int#}[']'][#MyStruct<Int>#];
54+ // METATYPE_INT_BRACKET: End completions
55+
3656 let _ = MyStruct < Int > ( ) #^INSTANCE_INT^#
3757// INSTANCE_INT: Begin completions, 2 items
3858// INSTANCE_INT-DAG: Decl[Subscript]/CurrNominal: [{#(x): Int#}, {#instance: Int#}][#Int#];
3959// INSTANCE_INT-DAG: Keyword[self]/CurrNominal: .self[#MyStruct<Int>#];
4060// INSTANCE_INT: End completions
4161
62+ let _ = MyStruct < Int > ( ) [ #^INSTANCE_INT_BRACKET^#
63+ // INSTANCE_INT_BRACKET: Begin completions
64+ // INSTANCE_INT_BRACKET-DAG: Decl[Subscript]/CurrNominal: ['[']{#(x): Int#}, {#instance: Int#}[']'][#Int#];
65+ // INSTANCE_INT_BRACKET: End completions
4266}
4367func test2< U> ( value: MyStruct < U > ) {
4468 let _ = MyStruct < U > #^METATYPE_ARCHETYPE^#
@@ -49,12 +73,22 @@ func test2<U>(value: MyStruct<U>) {
4973// METATYPE_ARCHETYPE-DAG: Keyword/CurrNominal: .Type[#MyStruct<U>.Type#];
5074// METATYPE_ARCHETYPE: End completions
5175
76+ let _ = MyStruct< U> [ #^METATYPE_ARCHETYPE_BRACKET^#
77+ // METATYPE_ARCHETYPE_BRACKET: Begin completions
78+ // METATYPE_ARCHETYPE_BRACKET-DAG: Decl[Subscript]/CurrNominal: ['[']{#(x): Int#}, {#static: U#}[']'][#MyStruct<U>#];
79+ // METATYPE_ARCHETYPE_BRACKET: End completions
80+
5281 let _ = value #^INSTANCE_ARCHETYPE^#
5382// INSTANCE_ARCHETYPE: Begin completions, 2 items
5483// INSTANCE_ARCHETYPE-DAG: Decl[Subscript]/CurrNominal: [{#(x): Int#}, {#instance: U#}][#Int#];
5584// INSTANCE_ARCHETYPE-DAG: Keyword[self]/CurrNominal: .self[#MyStruct<U>#];
5685// INSTANCE_ARCHETYPE: End completions
5786
87+ let _ = value[ #^INSTANCE_ARCHETYPE_BRACKET^#
88+ // INSTANCE_ARCHETYPE_BRACKET: Begin completions
89+ // INSTANCE_ARCHETYPE_BRACKET-DAG: Decl[Subscript]/CurrNominal: ['[']{#(x): Int#}, {#instance: U#}[']'][#Int#];
90+ // INSTANCE_ARCHETYPE_BRACKET: End completions
91+
5892 let _ = MyStruct< U> [ 42 , #^METATYPE_LABEL^#
5993// METATYPE_LABEL: Begin completions, 1 items
6094// METATYPE_LABEL-DAG: Keyword/ExprSpecific: static: [#Argument name#];
@@ -65,3 +99,48 @@ func test2<U>(value: MyStruct<U>) {
6599// INSTANCE_LABEL-DAG: Keyword/ExprSpecific: instance: [#Argument name#];
66100// INSTANCE_LABEL: End completions
67101}
102+
103+ class Base {
104+ static subscript( static x: Int ) -> Int { return 1 }
105+ subscript( instance x: Int ) -> Int { return 1 }
106+ }
107+ class Derived : Base {
108+ static subscript( derivedStatic x: Int ) -> Int { return 1 }
109+ subscript( derivedInstance x: Int ) -> Int { return 1 }
110+
111+ func testInstance( ) {
112+ let _ = self [ #^SELF_IN_INSTANCEMETHOD^#]
113+ // SELF_IN_INSTANCEMETHOD: Begin completions, 2 items
114+ // SELF_IN_INSTANCEMETHOD-DAG: Decl[Subscript]/CurrNominal: ['[']{#derivedInstance: Int#}[']'][#Int#];
115+ // SELF_IN_INSTANCEMETHOD-DAG: Decl[Subscript]/CurrNominal: ['[']{#instance: Int#}[']'][#Int#];
116+ // SELF_IN_INSTANCEMETHOD: End completions
117+
118+ let _ = super[ #^SUPER_IN_INSTANCEMETHOD^#]
119+ // SUPER_IN_INSTANCEMETHOD: Begin completions, 1 items
120+ // SUPER_IN_INSTANCEMETHOD-DAG: Decl[Subscript]/CurrNominal: ['[']{#instance: Int#}[']'][#Int#];
121+ // SUPER_IN_INSTANCEMETHOD: End completions
122+ }
123+
124+ static func testStatic( ) {
125+ let _ = self [ #^SELF_IN_STATICMETHOD^#]
126+ // SELF_IN_STATICMETHOD: Begin completions, 2 items
127+ // SELF_IN_STATICMETHOD-DAG: Decl[Subscript]/CurrNominal: ['[']{#derivedStatic: Int#}[']'][#Int#];
128+ // SELF_IN_STATICMETHOD-DAG: Decl[Subscript]/CurrNominal: ['[']{#static: Int#}[']'][#Int#];
129+ // SELF_IN_STATICMETHOD: End completions
130+
131+ let _ = super[ #^SUPER_IN_STATICMETHOD^#]
132+ // SUPER_IN_STATICMETHOD: Begin completions, 1 items
133+ // SUPER_IN_STATICMETHOD-DAG: Decl[Subscript]/CurrNominal: ['[']{#static: Int#}[']'][#Int#];
134+ // SUPER_IN_STATICMETHOD: End completions
135+ }
136+ }
137+
138+ struct MyStruct1 < X: Comparable > {
139+ subscript( idx1 _: Int , idx2 _: X ) -> Int ! { return 1 }
140+ }
141+ func testSubscriptCallSig< T> ( val: MyStruct1 < T > ) {
142+ val[ #^LABELED_SUBSCRIPT^#
143+ // LABELED_SUBSCRIPT: Begin completions, 1 items
144+ // LABELED_SUBSCRIPT: Decl[Subscript]/CurrNominal: ['[']{#idx1: Int#}, {#idx2: Comparable#}[']'][#Int!#];
145+ // LABELED_SUBSCRIPT: End completions
146+ }
0 commit comments