Skip to content

Commit b0ebb70

Browse files
authored
Merge pull request #15143 from tanishiking/semanticdb-endmarker
fix: [SemanticDB] Do not register SymbolOccurrence for non-symbol endmarker
2 parents f3d72ec + 816a9b3 commit b0ebb70

File tree

4 files changed

+40
-5
lines changed

4 files changed

+40
-5
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,9 @@ class ExtractSemanticDB extends Phase:
278278
tree match
279279
case tree: WithEndMarker[t] =>
280280
val endSpan = tree.endSpan
281-
if endSpan.exists then
281+
if endSpan.exists &&
282+
namePresentInSource(tree.symbol, endSpan, tree.source) then
283+
// non-symbol end marker shouldn't have Symbol Occurrence
282284
registerUseGuarded(None, tree.symbol, endSpan, tree.source)
283285
case _ =>
284286

tests/semanticdb/expect/EndMarkers.expect.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,13 @@ package endmarkers:
5656

5757
end TestObj/*->endmarkers::TestObj.*/
5858

59+
trait Stuff/*<-endmarkers::Stuff#*/[A/*<-endmarkers::Stuff#[A]*/]:
60+
def `do/*<-endmarkers::Stuff#do().*/`: A/*->endmarkers::Stuff#[A]*/
61+
end Stuff/*->endmarkers::Stuff#*/
62+
63+
// end given shouldn't have Symbol Occurrence
64+
given Stuff/*->endmarkers::Stuff#*/[String/*->scala::Predef.String#*/] with
65+
def `do/*<-endmarkers::EndMarkers$package.given_Stuff_String.do().*/`: String/*->scala::Predef.String#*/ = "done"
66+
end given
67+
5968
end endmarkers

tests/semanticdb/expect/EndMarkers.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,13 @@ package endmarkers:
5656

5757
end TestObj
5858

59+
trait Stuff[A]:
60+
def `do`: A
61+
end Stuff
62+
63+
// end given shouldn't have Symbol Occurrence
64+
given Stuff[String] with
65+
def `do`: String = "done"
66+
end given
67+
5968
end endmarkers

tests/semanticdb/metac.expect

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -734,8 +734,8 @@ Schema => SemanticDB v4
734734
Uri => EndMarkers.scala
735735
Text => empty
736736
Language => Scala
737-
Symbols => 24 entries
738-
Occurrences => 37 entries
737+
Symbols => 30 entries
738+
Occurrences => 46 entries
739739

740740
Symbols:
741741
endmarkers/Container# => class Container extends Object { self: Container => +5 decls }
@@ -745,9 +745,11 @@ endmarkers/Container#`baz_=`().(x$1) => param x$1: Int
745745
endmarkers/Container#bar. => val method bar Tuple3[Int, Int, Int]
746746
endmarkers/Container#baz(). => var method baz Int
747747
endmarkers/Container#foo(). => method foo => Tuple3[Int, Int, Int]
748-
endmarkers/EndMarkers$package. => final package object endmarkers extends Object { self: endmarkers.type => +6 decls }
748+
endmarkers/EndMarkers$package. => final package object endmarkers extends Object { self: endmarkers.type => +8 decls }
749749
endmarkers/EndMarkers$package.`topLevelVar_=`(). => var method topLevelVar_= (param x$1: String): Unit
750750
endmarkers/EndMarkers$package.`topLevelVar_=`().(x$1) => param x$1: String
751+
endmarkers/EndMarkers$package.given_Stuff_String. => final implicit given object given_Stuff_String extends Object with Stuff[String] { self: given_Stuff_String.type => +2 decls }
752+
endmarkers/EndMarkers$package.given_Stuff_String.do(). => method do => String <: endmarkers/Stuff#do().
751753
endmarkers/EndMarkers$package.topLevelMethod(). => method topLevelMethod => String
752754
endmarkers/EndMarkers$package.topLevelVal. => val method topLevelVal Int
753755
endmarkers/EndMarkers$package.topLevelVar(). => var method topLevelVar String
@@ -757,6 +759,10 @@ endmarkers/MultiCtor#`<init>`(). => primary ctor <init> (val param i: Int): Mult
757759
endmarkers/MultiCtor#`<init>`().(i) => val param i: Int
758760
endmarkers/MultiCtor#`<init>`(+1). => ctor <init> (): MultiCtor
759761
endmarkers/MultiCtor#i. => val method i Int
762+
endmarkers/Stuff# => trait Stuff [typeparam A ] extends Object { self: Stuff[A] => +3 decls }
763+
endmarkers/Stuff#[A] => typeparam A
764+
endmarkers/Stuff#`<init>`(). => primary ctor <init> [typeparam A ](): Stuff[A]
765+
endmarkers/Stuff#do(). => abstract method do => A
760766
endmarkers/TestObj. => final object TestObj extends Object { self: TestObj.type => +2 decls }
761767
endmarkers/TestObj.foo(). => method foo => Int
762768
local0 => val local localVal: Int
@@ -800,7 +806,16 @@ Occurrences:
800806
[52:9..52:16): TestObj <- endmarkers/TestObj.
801807
[54:8..54:11): foo <- endmarkers/TestObj.foo().
802808
[56:6..56:13): TestObj -> endmarkers/TestObj.
803-
[58:4..58:14): endmarkers -> endmarkers/
809+
[58:8..58:13): Stuff <- endmarkers/Stuff#
810+
[58:14..58:15): A <- endmarkers/Stuff#[A]
811+
[59:9..59:11): do <- endmarkers/Stuff#do().
812+
[59:14..59:15): A -> endmarkers/Stuff#[A]
813+
[60:6..60:11): Stuff -> endmarkers/Stuff#
814+
[63:8..63:13): Stuff -> endmarkers/Stuff#
815+
[63:14..63:20): String -> scala/Predef.String#
816+
[64:9..64:11): do <- endmarkers/EndMarkers$package.given_Stuff_String.do().
817+
[64:14..64:20): String -> scala/Predef.String#
818+
[67:4..67:14): endmarkers -> endmarkers/
804819

805820
expect/EndMarkers2.scala
806821
------------------------

0 commit comments

Comments
 (0)