@@ -31,6 +31,172 @@ class SignatureHelpTest {
31
31
.signatureHelp(m2, List (mapSig), Some (0 ), 0 )
32
32
}
33
33
34
+ @ Test def unapplyBooleanReturn : Unit = {
35
+ code """ object Even:
36
+ | def unapply(s: String): Boolean = s.size % 2 == 0
37
+ |
38
+ |object O:
39
+ | "even" match
40
+ | case s @ Even( ${m1}) => println(s"s has an even number of characters")
41
+ | case s => println(s"s has an odd number of characters")
42
+ """
43
+
44
+ .signatureHelp(m1, List (), Some (0 ), 0 )
45
+
46
+ }
47
+
48
+ @ Test def unapplyCustomType : Unit = {
49
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ))), None )
50
+
51
+ code """ class Nat(val x: Int):
52
+ | def get: Int = x
53
+ |
54
+ |object Nat:
55
+ | def unapply(x: Int): Nat = new Nat(x)
56
+ |
57
+ |object O:
58
+ | 5 match
59
+ | case Nat( ${m1}) => println(s"n is a natural number")
60
+ | case _ => ()
61
+ """
62
+
63
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
64
+
65
+ }
66
+
67
+ @ Test def unapplyTypeClass : Unit = {
68
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ), P (" " , " String" ))), None )
69
+
70
+ code """ class Two[A, B](a: A, b: B)
71
+ |object Two {
72
+ | def unapply[A, B](t: Two[A, B]): Option[(A, B)] = None
73
+ |}
74
+ |
75
+ |object Main {
76
+ | val tp = new Two(1, "")
77
+ | tp match {
78
+ | case Two(x $m1, $m2) =>
79
+ | }
80
+ |} """
81
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
82
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
83
+
84
+ }
85
+
86
+ @ Test def unapplyClass : Unit = {
87
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ), P (" " , " String" ))), None )
88
+
89
+ code """ class Two(a: Int, b: String)
90
+ |object Two {
91
+ | def unapply(t: Two): Option[(Int, String)] = None
92
+ |}
93
+ |
94
+ |object Main {
95
+ | val tp = new Two(1, "")
96
+ | tp match {
97
+ | case Two(x $m1, $m2) =>
98
+ | }
99
+ |} """
100
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
101
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
102
+
103
+ }
104
+
105
+ @ Test def unapplyManyType : Unit = {
106
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ), P (" " , " String" ))), None )
107
+
108
+ code """
109
+ |object Opt {
110
+ | def unapply[A, B](t: Option[(A, B)]): Option[(A, B)] = None
111
+ |}
112
+ |
113
+ |object Main {
114
+ | Option((1, "foo")) match {
115
+ | case Opt(x $m1, $m2) =>
116
+ | }
117
+ |} """
118
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
119
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
120
+
121
+ }
122
+
123
+ @ Test def unapplyTypeCaseClass : Unit = {
124
+ val signature = S (" " , Nil , List (List (P (" a" , " Int" ), P (" b" , " String" ))), None )
125
+
126
+ code """ case class Two[A, B](a: A, b: B)
127
+ |
128
+ |object Main {
129
+ | val tp = new Two(1, "")
130
+ | tp match {
131
+ | case Two(x $m1, $m2) =>
132
+ | }
133
+ |} """
134
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
135
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
136
+
137
+ }
138
+
139
+ @ Test def unapplyCaseClass : Unit = {
140
+ val signature = S (" " , Nil , List (List (P (" a" , " Int" ), P (" b" , " String" ))), None )
141
+
142
+ code """ case class Two(a: Int, b: String)
143
+ |
144
+ |object Main {
145
+ | val tp = new Two(1, "")
146
+ | tp match {
147
+ | case Two(x $m1, $m2) =>
148
+ | }
149
+ |} """
150
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
151
+ .signatureHelp(m2, List (signature), Some (0 ), 1 )
152
+
153
+ }
154
+
155
+ @ Test def unapplyOption : Unit = {
156
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ))), None )
157
+
158
+ code """ |object Main {
159
+ | Option(1) match {
160
+ | case Some( ${m1}) =>
161
+ | }
162
+ |} """
163
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
164
+ }
165
+
166
+ @ Test def unapplyWithImplicits : Unit = {
167
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ))), None )
168
+ code """ |
169
+ |object Opt:
170
+ | def unapply[A](using String)(a: Option[A])(using Int) = a
171
+ |
172
+ |object Main {
173
+ | given String = ""
174
+ | given Int = 0
175
+ | Option(1) match {
176
+ | case Opt( ${m1}) =>
177
+ | }
178
+ |} """
179
+
180
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
181
+ }
182
+
183
+ @ Test def unapplyWithMultipleImplicits : Unit = {
184
+ val signature = S (" " , Nil , List (List (P (" " , " Int" ))), None )
185
+ code """ |
186
+ |object Opt:
187
+ | def unapply[A](using String)(using Int)(a: Option[A]) = a
188
+ |
189
+ |object Main {
190
+ | given String = ""
191
+ | given Int = 0
192
+ | Option(1) match {
193
+ | case Opt( ${m1}) =>
194
+ | }
195
+ |} """
196
+ .signatureHelp(m1, List (signature), Some (0 ), 0 )
197
+ }
198
+
199
+
34
200
/** Implicit parameter lists consisting solely of DummyImplicits are hidden. */
35
201
@ Test def hiddenDummyParams : Unit = {
36
202
val foo1Sig =
@@ -362,78 +528,6 @@ class SignatureHelpTest {
362
528
), None , 0 )
363
529
}
364
530
365
- @ Test def unapplyMethod : Unit = {
366
- code """ |object Main {
367
- | Option(1) match {
368
- | case Some( ${m1}) =>
369
- | }
370
- |} """
371
-
372
- .signatureHelp(m1, List (
373
- S (" unapply[A]" , Nil , List (List (
374
- P (" x$0" , " Some[A]" , None ),
375
- )), Some (" Option[A]" ), None )
376
- ), None , 0 )
377
- }
378
-
379
- @ Test def unapplyMethodImplicits : Unit = {
380
- code """ |
381
- |object Opt:
382
- | def unapply[A](using String)(a: Option[A])(using Int) = a
383
- |
384
- |object Main {
385
- | given String = ""
386
- | given Int = 0
387
- | Option(1) match {
388
- | case Opt( ${m1}) =>
389
- | }
390
- |} """
391
-
392
- .signatureHelp(m1, List (
393
- S (" unapply[A]" , Nil , List (
394
- List (
395
- P (" x$1" , " String" , None , isImplicit = true )
396
- ),
397
- List (
398
- P (" a" , " Option[A]" , None ),
399
- ),
400
- List (
401
- P (" x$3" , " Int" , None , isImplicit = true )
402
- )
403
- ),
404
- Some (" Option[A]" ), None )
405
- ), None , 1 )
406
- }
407
-
408
- @ Test def unapplyMethodImplicitsMultiple : Unit = {
409
- code """ |
410
- |object Opt:
411
- | def unapply[A](using String)(using Int)(a: Option[A]) = a
412
- |
413
- |object Main {
414
- | given String = ""
415
- | given Int = 0
416
- | Option(1) match {
417
- | case Opt( ${m1}) =>
418
- | }
419
- |} """
420
-
421
- .signatureHelp(m1, List (
422
- S (" unapply[A]" , Nil , List (
423
- List (
424
- P (" x$1" , " String" , None , isImplicit = true )
425
- ),
426
- List (
427
- P (" x$2" , " Int" , None , isImplicit = true )
428
- ),
429
- List (
430
- P (" a" , " Option[A]" , None ),
431
- )
432
- ),
433
- Some (" Option[A]" ), None )
434
- ), None , 2 )
435
- }
436
-
437
531
@ Test def nestedApplySignatures : Unit = {
438
532
val signatures = (1 to 5 ).map { i =>
439
533
S (s " foo $i" , Nil , List (List (P (" x" , " Int" ))), Some (" Int" ))
0 commit comments