@@ -41,10 +41,9 @@ class SignatureHelpTest {
41
41
| case s => println(s"s has an odd number of characters")
42
42
"""
43
43
.signatureHelp(m1, Nil , Some (0 ), 0 )
44
-
45
44
}
46
45
47
- @ Test def unapplyCustomType : Unit = {
46
+ @ Test def unapplyCustomClass : Unit = {
48
47
val signature = S (" " , Nil , List (List (P (" " , " Int" ))), None )
49
48
50
49
code """ class Nat(val x: Int):
@@ -59,7 +58,6 @@ class SignatureHelpTest {
59
58
| case _ => ()
60
59
"""
61
60
.signatureHelp(m1, List (signature), Some (0 ), 0 )
62
-
63
61
}
64
62
65
63
@ Test def unapplyTypeClass : Unit = {
@@ -78,7 +76,6 @@ class SignatureHelpTest {
78
76
|} """
79
77
.signatureHelp(m1, List (signature), Some (0 ), 0 )
80
78
.signatureHelp(m2, List (signature), Some (0 ), 1 )
81
-
82
79
}
83
80
84
81
@ Test def unapplyClass : Unit = {
@@ -97,9 +94,84 @@ class SignatureHelpTest {
97
94
|} """
98
95
.signatureHelp(m1, List (signature), Some (0 ), 0 )
99
96
.signatureHelp(m2, List (signature), Some (0 ), 1 )
97
+ }
98
+
99
+ @ Test def productMatch : Unit = {
100
+ val signature = S (" " , Nil , List (List (P (" " , " Char" ), P (" " , " Char" ))), None )
101
+
102
+ code """ class FirstChars(s: String) extends Product:
103
+ | def _1 = s.charAt(0)
104
+ | def _2 = s.charAt(1)
105
+ |
106
+ |object FirstChars:
107
+ | def unapply(s: String): FirstChars = new FirstChars(s)
108
+ |
109
+ |object Test:
110
+ | "Hi!" match
111
+ | case FirstChars(ch ${m1}, ch ${m2}) => ???
112
+ """
113
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
114
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
115
+ }
116
+
117
+ @ Test def nameBasedMatch : Unit = {
118
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ), P (" " , " String" ))), None )
119
+
120
+ code """ object ProdEmpty:
121
+ | def _1: Int = ???
122
+ | def _2: String = ???
123
+ | def isEmpty = true
124
+ | def unapply(s: String): this.type = this
125
+ | def get = this
126
+ |
127
+ |object Test:
128
+ | "" match
129
+ | case ProdEmpty( ${m1}, ${m2}) => ???
130
+ | case _ => ()
131
+ """
132
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
133
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
134
+ }
135
+
136
+ @ Test def sequenceMatch : Unit = {
137
+ val signature = S (" " , Nil , List (List (P (" " , " Seq[Char]" ))), None )
100
138
139
+ code """ object CharList:
140
+ | def unapplySeq(s: String): Option[Seq[Char]] = Some(s.toList)
141
+ |
142
+ |object Test:
143
+ | "example" match
144
+ | case CharList(c ${m1}1, c ${m2}2, c ${m3}3, c4, _, _, ${m4}) => ???
145
+ | case _ =>
146
+ | println("Expected *exactly* 7 characters!")
147
+ """
148
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
149
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
150
+ .signatureHelp(m3, List (signature), Some (0 ), 2 )
151
+ .signatureHelp(m4, List (signature), Some (0 ), 6 )
101
152
}
102
153
154
+ @ Test def productSequenceMatch : Unit = {
155
+ val signature = S (" " , Nil , List (List (P (" " , " String" ), P (" " , " Seq[Int]" ))), None )
156
+
157
+ code """ class Foo(val name: String, val children: Int *)
158
+ |object Foo:
159
+ | def unapplySeq(f: Foo): Option[(String, Seq[Int])] =
160
+ | Some((f.name, f.children))
161
+ |
162
+ |def foo(f: Foo) = f match
163
+ | case Foo(na ${m1}e, n ${m2} : _*) =>
164
+ | case Foo(nam ${m3}e, ${m4}x, ${m5}y, n ${m6}s : _*) =>
165
+ """
166
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
167
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
168
+ .signatureHelp(m3, List (signature), Some (0 ), 0 )
169
+ .signatureHelp(m4, List (signature), Some (0 ), 1 )
170
+ .signatureHelp(m5, List (signature), Some (0 ), 2 )
171
+ .signatureHelp(m6, List (signature), Some (0 ), 3 )
172
+ }
173
+
174
+
103
175
@ Test def unapplyManyType : Unit = {
104
176
val signature = S (" " , Nil , List (List (P (" " , " Int" ), P (" " , " String" ))), None )
105
177
@@ -115,7 +187,6 @@ class SignatureHelpTest {
115
187
|} """
116
188
.signatureHelp(m1, List (signature), Some (0 ), 0 )
117
189
.signatureHelp(m2, List (signature), Some (0 ), 1 )
118
-
119
190
}
120
191
121
192
@ Test def unapplyTypeCaseClass : Unit = {
@@ -131,7 +202,6 @@ class SignatureHelpTest {
131
202
|} """
132
203
.signatureHelp(m1, List (signature), Some (0 ), 0 )
133
204
.signatureHelp(m2, List (signature), Some (0 ), 1 )
134
-
135
205
}
136
206
137
207
@ Test def unapplyCaseClass : Unit = {
@@ -147,7 +217,6 @@ class SignatureHelpTest {
147
217
|} """
148
218
.signatureHelp(m1, List (signature), Some (0 ), 0 )
149
219
.signatureHelp(m2, List (signature), Some (0 ), 1 )
150
-
151
220
}
152
221
153
222
@ Test def unapplyOption : Unit = {
@@ -194,7 +263,6 @@ class SignatureHelpTest {
194
263
.signatureHelp(m1, List (signature), Some (0 ), 0 )
195
264
}
196
265
197
-
198
266
/** Implicit parameter lists consisting solely of DummyImplicits are hidden. */
199
267
@ Test def hiddenDummyParams : Unit = {
200
268
val foo1Sig =
0 commit comments