Skip to content

Commit 28c3846

Browse files
committed
Support implicit conversion for Synthetics
1 parent e07e7d0 commit 28c3846

File tree

2 files changed

+49
-3
lines changed

2 files changed

+49
-3
lines changed

compiler/src/dotty/tools/dotc/semanticdb/SyntheticsExtractor.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,18 @@ class SyntheticsExtractor:
3333
)
3434
).toOpt
3535

36+
case tree: Apply if tree.fun.symbol.is(Implicit) =>
37+
val pos = range(tree.span, tree.source)
38+
s.Synthetic(
39+
pos,
40+
s.ApplyTree(
41+
tree.fun.toSemanticTree,
42+
arguments = List(
43+
s.OriginalTree(pos)
44+
)
45+
)
46+
).toOpt
47+
3648
// Anonymous context parameter
3749
case tree: ValDef if tree.symbol.is(Given) =>
3850
s.Synthetic(

tests/semanticdb/metac.expect

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Text => empty
5050
Language => Scala
5151
Symbols => 48 entries
5252
Occurrences => 105 entries
53+
Synthetics => 3 entries
5354

5455
Symbols:
5556
advanced/C# => class C [typeparam T ] extends Object { self: C[T] => +3 decls }
@@ -208,6 +209,11 @@ Occurrences:
208209
[48:37..48:38): x -> advanced/HKClass#foo().(x)
209210
[48:39..48:47): toString -> scala/Tuple2#toString().
210211

212+
Synthetics:
213+
[26:12..26:16):s.s1 => reflectiveSelectable(*)
214+
[28:12..28:16):s.s2 => reflectiveSelectable(*)
215+
[30:12..30:16):s.s3 => reflectiveSelectable(*)
216+
211217
expect/Annotations.scala
212218
------------------------
213219

@@ -1514,6 +1520,7 @@ Text => empty
15141520
Language => Scala
15151521
Symbols => 23 entries
15161522
Occurrences => 48 entries
1523+
Synthetics => 6 entries
15171524

15181525
Symbols:
15191526
example/ImplicitConversion# => class ImplicitConversion extends Object { self: ImplicitConversion => +9 decls }
@@ -1590,6 +1597,16 @@ Occurrences:
15901597
[34:56..34:57): + -> java/lang/String#`+`().
15911598
[34:58..34:63): other -> example/ImplicitConversion.newAny2stringadd#`+`().(other)
15921599

1600+
Synthetics:
1601+
[15:2..15:9):message => augmentString(*)
1602+
[17:2..17:7):tuple => newAny2stringadd[Tuple2[Int, Int]](*)
1603+
[20:15..20:22):message => string2Number(*)
1604+
[24:2..26:16):s"""Hello
1605+
|$message
1606+
|$number""" => augmentString(*)
1607+
[28:15..28:19):char => char2int(*)
1608+
[29:16..29:20):char => char2long(*)
1609+
15931610
expect/Imports.scala
15941611
--------------------
15951612

@@ -1825,7 +1842,7 @@ Text => empty
18251842
Language => Scala
18261843
Symbols => 7 entries
18271844
Occurrences => 22 entries
1828-
Synthetics => 2 entries
1845+
Synthetics => 3 entries
18291846

18301847
Symbols:
18311848
example/Issue1749# => class Issue1749 extends Object { self: Issue1749 => +3 decls }
@@ -1861,6 +1878,7 @@ Occurrences:
18611878
[14:2..14:5): map -> example/Issue1854#map.
18621879

18631880
Synthetics:
1881+
[8:2..8:10):(x1, x1) => orderingToOrdered[Tuple2[Int, Int]](*)
18641882
[8:2..8:10):(x1, x1) => *(Tuple2(Int, Int))
18651883
[8:10..8:10): => *(Int, Int)
18661884

@@ -2956,7 +2974,7 @@ Text => empty
29562974
Language => Scala
29572975
Symbols => 52 entries
29582976
Occurrences => 133 entries
2959-
Synthetics => 9 entries
2977+
Synthetics => 24 entries
29602978

29612979
Symbols:
29622980
example/Synthetic# => class Synthetic extends Object { self: Synthetic => +23 decls }
@@ -3148,7 +3166,22 @@ Occurrences:
31483166
[58:6..58:9): foo -> example/Synthetic#Contexts.foo().
31493167

31503168
Synthetics:
3169+
[6:2..6:18):Array.empty[Int] => intArrayOps(*)
3170+
[7:2..7:8):"fooo" => augmentString(*)
3171+
[10:13..10:24):"name:(.*)" => augmentString(*)
3172+
[13:8..13:28):2 #:: LazyList.empty => toDeferrer[Int](*)
3173+
[13:14..13:28):LazyList.empty => toDeferrer[Nothing](*)
3174+
[17:18..17:38):2 #:: LazyList.empty => toDeferrer[Int](*)
3175+
[17:24..17:38):LazyList.empty => toDeferrer[Nothing](*)
3176+
[19:12..19:13):1 => intWrapper(*)
3177+
[19:26..19:27):0 => intWrapper(*)
3178+
[19:46..19:47):x => ArrowAssoc[Int](*)
3179+
[20:12..20:13):1 => intWrapper(*)
3180+
[20:26..20:27):0 => intWrapper(*)
3181+
[21:12..21:13):1 => intWrapper(*)
3182+
[21:26..21:27):0 => intWrapper(*)
31513183
[32:35..32:49):Array.empty[T] => *(evidence$1)
3184+
[36:22..36:27):new F => orderingToOrdered[F](*)
31523185
[36:22..36:27):new F => *(ordering)
31533186
[50:26..50:29):Int => x$2
31543187
[51:17..51:20):Int => x$1
@@ -4589,7 +4622,7 @@ Text => empty
45894622
Language => Scala
45904623
Symbols => 19 entries
45914624
Occurrences => 34 entries
4592-
Synthetics => 1 entries
4625+
Synthetics => 2 entries
45934626

45944627
Symbols:
45954628
_empty_/MyProgram# => final class MyProgram extends Object { self: MyProgram => +2 decls }
@@ -4650,4 +4683,5 @@ Occurrences:
46504683

46514684
Synthetics:
46524685
[5:0..5:0): => *(given_FromString_Int)
4686+
[5:41..5:42):1 => intWrapper(*)
46534687

0 commit comments

Comments
 (0)