Skip to content

Commit d91577a

Browse files
committed
Fix missing SymbolOccurrence for aliased symbol
fix #13556 Previously, we include symbols iff it's name present in source by `namePresentInSource`. However, if the symbol is aliased by, for example, renamed imports, there's difference beteen the name of the symbol and the name in source even though they are the same symbol. What we really need to exclude are the symbols that never appear in source, and the gap between symbol name and name in source is acceptable. Therefore, this commit try to exlucde symbol using `isZeroExtent` instead of `namePresentInSource`
1 parent 3a6a949 commit d91577a

File tree

9 files changed

+43
-17
lines changed

9 files changed

+43
-17
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ class ExtractSemanticDB extends Phase:
320320
generated += occ
321321

322322
private def registerUseGuarded(qualSym: Option[Symbol], sym: Symbol, span: Span, treeSource: SourceFile)(using Context) =
323-
if !excludeUse(qualSym, sym) && namePresentInSource(sym, span, treeSource) then
323+
if !excludeUse(qualSym, sym) && !span.isZeroExtent then
324324
registerUse(sym, span, treeSource)
325325

326326
private def registerUse(sym: Symbol, span: Span, treeSource: SourceFile)(using Context): Unit =

tests/semanticdb/expect/Givens.expect.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ package b
44
object Givens/*<-a::b::Givens.*/:
55

66
extension [A/*<-a::b::Givens.sayHello().[A]*/](any/*<-a::b::Givens.sayHello().(any)*/: A/*->a::b::Givens.sayHello().[A]*/)
7-
def sayHello/*<-a::b::Givens.sayHello().*/ = s"Hello, I am $any/*->a::b::Givens.sayHello().(any)*/"
7+
def sayHello/*<-a::b::Givens.sayHello().*/ = s"Hello, I am $any/*->a::b::Givens.sayHello().(any)*/"/*->scala::StringContext#s().*/
88

99
extension [B/*<-a::b::Givens.sayGoodbye().[B]*//*<-a::b::Givens.saySoLong().[B]*/](any/*<-a::b::Givens.sayGoodbye().(any)*//*<-a::b::Givens.saySoLong().(any)*/: B/*->a::b::Givens.sayGoodbye().[B]*//*->a::b::Givens.saySoLong().[B]*/)
10-
def sayGoodbye/*<-a::b::Givens.sayGoodbye().*/ = s"Goodbye, from $any/*->a::b::Givens.sayGoodbye().(any)*/"
11-
def saySoLong/*<-a::b::Givens.saySoLong().*/ = s"So Long, from $any/*->a::b::Givens.saySoLong().(any)*/"
10+
def sayGoodbye/*<-a::b::Givens.sayGoodbye().*/ = s"Goodbye, from $any/*->a::b::Givens.sayGoodbye().(any)*/"/*->scala::StringContext#s().*/
11+
def saySoLong/*<-a::b::Givens.saySoLong().*/ = s"So Long, from $any/*->a::b::Givens.saySoLong().(any)*/"/*->scala::StringContext#s().*/
1212

1313
val hello1/*<-a::b::Givens.hello1.*/ = 1.sayHello/*->a::b::Givens.sayHello().*/
1414
val goodbye1/*<-a::b::Givens.goodbye1.*/ = 1.sayGoodbye/*->a::b::Givens.sayGoodbye().*/

tests/semanticdb/expect/ImplicitConversion.expect.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ class ImplicitConversion/*<-example::ImplicitConversion#*/ {
2121
val x/*<-example::ImplicitConversion#x.*/: Int/*->scala::Int#*/ = message/*->example::ImplicitConversion#message.*/
2222

2323
// interpolators
24-
s"Hello $message/*->example::ImplicitConversion#message.*/ $number/*->example::ImplicitConversion#number.*/"
24+
s"Hello $message/*->example::ImplicitConversion#message.*/ $number/*->example::ImplicitConversion#number.*/"/*->scala::StringContext#s().*/
2525
s"""Hello
2626
|$message/*->example::ImplicitConversion#message.*/
27-
|$number/*->example::ImplicitConversion#number.*/""".stripMargin/*->scala::collection::StringOps#stripMargin(+1).*/
27+
|$number/*->example::ImplicitConversion#number.*/"""/*->scala::StringContext#s().*/.stripMargin/*->scala::collection::StringOps#stripMargin(+1).*/
2828

2929
val a/*<-example::ImplicitConversion#a.*/: Int/*->scala::Int#*/ = char/*->example::ImplicitConversion#char.*/
3030
val b/*<-example::ImplicitConversion#b.*/: Long/*->scala::Long#*/ = char/*->example::ImplicitConversion#char.*/
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
import scala.util.control.NonFatal/*->scala::util::control::NonFatal.*/
2+
import scala.collection.immutable.{HashMap/*->scala::collection::immutable::HashMap.*//*->scala::collection::immutable::HashMap#*/ as HM}
3+
4+
val m/*<-_empty_::Imports$package.m.*/: HM/*->scala::collection::immutable::HashMap#*/[Int/*->scala::Int#*/, Int/*->scala::Int#*/] = HM/*->scala::collection::immutable::HashMap.*/[Int/*->scala::Int#*/, Int/*->scala::Int#*/]()

tests/semanticdb/expect/Imports.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
11
import scala.util.control.NonFatal
2+
import scala.collection.immutable.{HashMap as HM}
3+
4+
val m: HM[Int, Int] = HM[Int, Int]()

tests/semanticdb/expect/Synthetic.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class Synthetic/*<-example::Synthetic#*/ {
3030
null.asInstanceOf/*->scala::Any#asInstanceOf().*/[Int/*->scala::Int#*/ => Int/*->scala::Int#*/](2)
3131
}
3232

33-
class J/*<-example::Synthetic#J#*/[T/*<-example::Synthetic#J#[T]*//*<-example::Synthetic#J#evidence$1.*/: Manifest/*->scala::Predef.Manifest#*/] { val arr/*<-example::Synthetic#J#arr.*/ = Array/*->scala::Array.*/.empty/*->scala::Array.empty().*/[T/*->example::Synthetic#J#[T]*/]/*->example::Synthetic#J#evidence$1.*/ }
33+
class J/*<-example::Synthetic#J#*/[T/*<-example::Synthetic#J#[T]*//*<-example::Synthetic#J#evidence$1.*/: Manifest/*->scala::Predef.Manifest#*/] { val arr/*<-example::Synthetic#J#arr.*/ = Array/*->scala::Array.*/.empty/*->scala::Array.empty().*/[T/*->example::Synthetic#J#[T]*/] }
3434

3535
class F/*<-example::Synthetic#F#*/
3636
implicit val ordering/*<-example::Synthetic#ordering.*/: Ordering/*->scala::package.Ordering#*/[F/*->example::Synthetic#F#*/] = ???/*->scala::Predef.`???`().*/

tests/semanticdb/expect/Vals.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,5 @@ object ValUsages/*<-example::ValUsages.*/ {
4747
println/*->scala::Predef.println(+1).*/(v/*->example::ValUsages.v.*/.xzm/*->example::Vals#xzm.*/)
4848
v/*->example::ValUsages.v.*/.yfm/*->example::Vals#`yfm_=`().*/ = v/*->example::ValUsages.v.*/.xfm/*->example::Vals#xfm.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yfm/*->example::Vals#yfm().*/
4949
v/*->example::ValUsages.v.*/.yim/*->example::Vals#`yim_=`().*/ = v/*->example::ValUsages.v.*/.xim/*->example::Vals#xim.*/ +/*->scala::Int#`+`(+4).*/ v/*->example::ValUsages.v.*/.yim/*->example::Vals#yim().*/
50-
v/*->example::ValUsages.v.*/.explicitSetter = 25
50+
v/*->example::ValUsages.v.*/.explicitSetter/*->example::Vals#`explicitSetter_=`().*/ = 25
5151
}

tests/semanticdb/expect/toplevel.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ def combine/*<-_empty_::toplevel$package.combine(+2).*/ = 0
55
def foo/*<-_empty_::toplevel$package.foo().*/ = "foo"
66
@main/*->scala::main#*/ def MyProgram/*<-_empty_::toplevel$package.MyProgram().*/(times/*<-_empty_::toplevel$package.MyProgram().(times)*/: Int/*->scala::Int#*/): Unit/*->scala::Unit#*/ = (1 to/*->scala::runtime::RichInt#to().*/ times/*->_empty_::toplevel$package.MyProgram().(times)*/) foreach/*->scala::collection::immutable::Range#foreach().*/ (_ => println/*->scala::Predef.println(+1).*/("hello"))
77
@main/*->scala::main#*/ def readInts/*<-_empty_::toplevel$package.readInts().*/(ints/*<-_empty_::toplevel$package.readInts().(ints)*/: Int/*->scala::Int#*/*): Unit/*->scala::Unit#*/ = println/*->scala::Predef.println(+1).*/(ints/*->_empty_::toplevel$package.readInts().(ints)*/.mkString/*->scala::collection::IterableOnceOps#mkString(+1).*/(","))
8-
def fooRef/*<-_empty_::toplevel$package.fooRef().*/ = toplevel$package.foo/*->_empty_::toplevel$package.foo().*/
8+
def fooRef/*<-_empty_::toplevel$package.fooRef().*/ = toplevel$package/*->_empty_::toplevel$package.*/.foo/*->_empty_::toplevel$package.foo().*/

tests/semanticdb/metac.expect

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1408,7 +1408,7 @@ Uri => Givens.scala
14081408
Text => empty
14091409
Language => Scala
14101410
Symbols => 29 entries
1411-
Occurrences => 62 entries
1411+
Occurrences => 65 entries
14121412

14131413
Symbols:
14141414
a/b/Givens. => final object Givens extends Object { self: Givens.type => +12 decls }
@@ -1450,6 +1450,7 @@ Occurrences:
14501450
[5:21..5:22): A -> a/b/Givens.sayHello().[A]
14511451
[6:8..6:16): sayHello <- a/b/Givens.sayHello().
14521452
[6:34..6:37): any -> a/b/Givens.sayHello().(any)
1453+
[6:37..6:38): " -> scala/StringContext#s().
14531454
[8:13..8:14): B <- a/b/Givens.sayGoodbye().[B]
14541455
[8:13..8:14): B <- a/b/Givens.saySoLong().[B]
14551456
[8:16..8:19): any <- a/b/Givens.sayGoodbye().(any)
@@ -1458,8 +1459,10 @@ Occurrences:
14581459
[8:21..8:22): B -> a/b/Givens.saySoLong().[B]
14591460
[9:8..9:18): sayGoodbye <- a/b/Givens.sayGoodbye().
14601461
[9:38..9:41): any -> a/b/Givens.sayGoodbye().(any)
1462+
[9:41..9:42): " -> scala/StringContext#s().
14611463
[10:8..10:17): saySoLong <- a/b/Givens.saySoLong().
14621464
[10:37..10:40): any -> a/b/Givens.saySoLong().(any)
1465+
[10:40..10:41): " -> scala/StringContext#s().
14631466
[12:6..12:12): hello1 <- a/b/Givens.hello1.
14641467
[12:17..12:25): sayHello -> a/b/Givens.sayHello().
14651468
[13:6..13:14): goodbye1 <- a/b/Givens.goodbye1.
@@ -1514,7 +1517,7 @@ Uri => ImplicitConversion.scala
15141517
Text => empty
15151518
Language => Scala
15161519
Symbols => 23 entries
1517-
Occurrences => 48 entries
1520+
Occurrences => 50 entries
15181521
Synthetics => 6 entries
15191522

15201523
Symbols:
@@ -1567,8 +1570,10 @@ Occurrences:
15671570
[20:15..20:22): message -> example/ImplicitConversion#message.
15681571
[23:11..23:18): message -> example/ImplicitConversion#message.
15691572
[23:20..23:26): number -> example/ImplicitConversion#number.
1573+
[23:26..23:27): " -> scala/StringContext#s().
15701574
[25:7..25:14): message -> example/ImplicitConversion#message.
15711575
[26:7..26:13): number -> example/ImplicitConversion#number.
1576+
[26:15..26:16): " -> scala/StringContext#s().
15721577
[26:17..26:28): stripMargin -> scala/collection/StringOps#stripMargin(+1).
15731578
[28:6..28:7): a <- example/ImplicitConversion#a.
15741579
[28:9..28:12): Int -> scala/Int#
@@ -1610,16 +1615,30 @@ Schema => SemanticDB v4
16101615
Uri => Imports.scala
16111616
Text => empty
16121617
Language => Scala
1613-
Symbols => 0 entries
1614-
Occurrences => 4 entries
1618+
Symbols => 2 entries
1619+
Occurrences => 16 entries
16151620

16161621
Symbols:
1622+
_empty_/Imports$package. => final package object _empty_ extends Object { self: _empty_.type => +2 decls }
1623+
_empty_/Imports$package.m. => val method m HashMap[Int, Int]
16171624

16181625
Occurrences:
16191626
[0:7..0:12): scala -> scala/
16201627
[0:13..0:17): util -> scala/util/
16211628
[0:18..0:25): control -> scala/util/control/
16221629
[0:26..0:34): NonFatal -> scala/util/control/NonFatal.
1630+
[1:7..1:12): scala -> scala/
1631+
[1:13..1:23): collection -> scala/collection/
1632+
[1:24..1:33): immutable -> scala/collection/immutable/
1633+
[1:35..1:42): HashMap -> scala/collection/immutable/HashMap.
1634+
[1:35..1:42): HashMap -> scala/collection/immutable/HashMap#
1635+
[3:4..3:5): m <- _empty_/Imports$package.m.
1636+
[3:7..3:9): HM -> scala/collection/immutable/HashMap#
1637+
[3:10..3:13): Int -> scala/Int#
1638+
[3:15..3:18): Int -> scala/Int#
1639+
[3:22..3:24): HM -> scala/collection/immutable/HashMap.
1640+
[3:25..3:28): Int -> scala/Int#
1641+
[3:30..3:33): Int -> scala/Int#
16231642

16241643
expect/InstrumentTyper.scala
16251644
----------------------------
@@ -2964,7 +2983,7 @@ Uri => Synthetic.scala
29642983
Text => empty
29652984
Language => Scala
29662985
Symbols => 52 entries
2967-
Occurrences => 133 entries
2986+
Occurrences => 132 entries
29682987
Synthetics => 21 entries
29692988

29702989
Symbols:
@@ -3093,7 +3112,6 @@ Occurrences:
30933112
[32:35..32:40): Array -> scala/Array.
30943113
[32:41..32:46): empty -> scala/Array.empty().
30953114
[32:47..32:48): T -> example/Synthetic#J#[T]
3096-
[32:49..32:49): -> example/Synthetic#J#evidence$1.
30973115
[34:8..34:9): F <- example/Synthetic#F#
30983116
[35:15..35:23): ordering <- example/Synthetic#ordering.
30993117
[35:25..35:33): Ordering -> scala/package.Ordering#
@@ -3311,7 +3329,7 @@ Uri => Vals.scala
33113329
Text => empty
33123330
Language => Scala
33133331
Symbols => 42 entries
3314-
Occurrences => 127 entries
3332+
Occurrences => 128 entries
33153333

33163334
Symbols:
33173335
example/ValUsages. => final object ValUsages extends Object { self: ValUsages.type => +2 decls }
@@ -3485,6 +3503,7 @@ Occurrences:
34853503
[48:18..48:19): v -> example/ValUsages.v.
34863504
[48:20..48:23): yim -> example/Vals#yim().
34873505
[49:2..49:3): v -> example/ValUsages.v.
3506+
[49:3..49:18): .explicitSetter -> example/Vals#`explicitSetter_=`().
34883507

34893508
expect/Vararg.scala
34903509
-------------------
@@ -4609,7 +4628,7 @@ Uri => toplevel.scala
46094628
Text => empty
46104629
Language => Scala
46114630
Symbols => 18 entries
4612-
Occurrences => 42 entries
4631+
Occurrences => 43 entries
46134632
Synthetics => 1 entries
46144633

46154634
Symbols:
@@ -4674,6 +4693,7 @@ Occurrences:
46744693
[6:47..6:51): ints -> _empty_/toplevel$package.readInts().(ints)
46754694
[6:52..6:60): mkString -> scala/collection/IterableOnceOps#mkString(+1).
46764695
[7:4..7:10): fooRef <- _empty_/toplevel$package.fooRef().
4696+
[7:13..7:29): toplevel$package -> _empty_/toplevel$package.
46774697
[7:30..7:33): foo -> _empty_/toplevel$package.foo().
46784698

46794699
Synthetics:

0 commit comments

Comments
 (0)