From 816a9b30b9cef9c33c938ec1785fa1cdcde2ff06 Mon Sep 17 00:00:00 2001 From: Rikito Taniguchi Date: Mon, 9 May 2022 18:22:59 +0900 Subject: [PATCH] fix: [SemanticDB] Do not register SymbolOccurrence for non-symbol endmarker --- .../dotc/semanticdb/ExtractSemanticDB.scala | 4 +++- .../semanticdb/expect/EndMarkers.expect.scala | 9 ++++++++ tests/semanticdb/expect/EndMarkers.scala | 9 ++++++++ tests/semanticdb/metac.expect | 23 +++++++++++++++---- 4 files changed, 40 insertions(+), 5 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala b/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala index 25a9b603ca60..8b388f4d5b62 100644 --- a/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala +++ b/compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala @@ -278,7 +278,9 @@ class ExtractSemanticDB extends Phase: tree match case tree: WithEndMarker[t] => val endSpan = tree.endSpan - if endSpan.exists then + if endSpan.exists && + namePresentInSource(tree.symbol, endSpan, tree.source) then + // non-symbol end marker shouldn't have Symbol Occurrence registerUseGuarded(None, tree.symbol, endSpan, tree.source) case _ => diff --git a/tests/semanticdb/expect/EndMarkers.expect.scala b/tests/semanticdb/expect/EndMarkers.expect.scala index 7ace3ceae22f..61dac2fefd54 100644 --- a/tests/semanticdb/expect/EndMarkers.expect.scala +++ b/tests/semanticdb/expect/EndMarkers.expect.scala @@ -56,4 +56,13 @@ package endmarkers: end TestObj/*->endmarkers::TestObj.*/ + trait Stuff/*<-endmarkers::Stuff#*/[A/*<-endmarkers::Stuff#[A]*/]: + def `do/*<-endmarkers::Stuff#do().*/`: A/*->endmarkers::Stuff#[A]*/ + end Stuff/*->endmarkers::Stuff#*/ + + // end given shouldn't have Symbol Occurrence + given Stuff/*->endmarkers::Stuff#*/[String/*->scala::Predef.String#*/] with + def `do/*<-endmarkers::EndMarkers$package.given_Stuff_String.do().*/`: String/*->scala::Predef.String#*/ = "done" + end given + end endmarkers diff --git a/tests/semanticdb/expect/EndMarkers.scala b/tests/semanticdb/expect/EndMarkers.scala index c7ae04898ebd..89d57f527291 100644 --- a/tests/semanticdb/expect/EndMarkers.scala +++ b/tests/semanticdb/expect/EndMarkers.scala @@ -56,4 +56,13 @@ package endmarkers: end TestObj + trait Stuff[A]: + def `do`: A + end Stuff + + // end given shouldn't have Symbol Occurrence + given Stuff[String] with + def `do`: String = "done" + end given + end endmarkers diff --git a/tests/semanticdb/metac.expect b/tests/semanticdb/metac.expect index d761489ded6c..b00bf1adf171 100644 --- a/tests/semanticdb/metac.expect +++ b/tests/semanticdb/metac.expect @@ -734,8 +734,8 @@ Schema => SemanticDB v4 Uri => EndMarkers.scala Text => empty Language => Scala -Symbols => 24 entries -Occurrences => 37 entries +Symbols => 30 entries +Occurrences => 46 entries Symbols: endmarkers/Container# => class Container extends Object { self: Container => +5 decls } @@ -745,9 +745,11 @@ endmarkers/Container#`baz_=`().(x$1) => param x$1: Int endmarkers/Container#bar. => val method bar Tuple3[Int, Int, Int] endmarkers/Container#baz(). => var method baz Int endmarkers/Container#foo(). => method foo => Tuple3[Int, Int, Int] -endmarkers/EndMarkers$package. => final package object endmarkers extends Object { self: endmarkers.type => +6 decls } +endmarkers/EndMarkers$package. => final package object endmarkers extends Object { self: endmarkers.type => +8 decls } endmarkers/EndMarkers$package.`topLevelVar_=`(). => var method topLevelVar_= (param x$1: String): Unit endmarkers/EndMarkers$package.`topLevelVar_=`().(x$1) => param x$1: String +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 } +endmarkers/EndMarkers$package.given_Stuff_String.do(). => method do => String <: endmarkers/Stuff#do(). endmarkers/EndMarkers$package.topLevelMethod(). => method topLevelMethod => String endmarkers/EndMarkers$package.topLevelVal. => val method topLevelVal Int endmarkers/EndMarkers$package.topLevelVar(). => var method topLevelVar String @@ -757,6 +759,10 @@ endmarkers/MultiCtor#``(). => primary ctor (val param i: Int): Mult endmarkers/MultiCtor#``().(i) => val param i: Int endmarkers/MultiCtor#``(+1). => ctor (): MultiCtor endmarkers/MultiCtor#i. => val method i Int +endmarkers/Stuff# => trait Stuff [typeparam A ] extends Object { self: Stuff[A] => +3 decls } +endmarkers/Stuff#[A] => typeparam A +endmarkers/Stuff#``(). => primary ctor [typeparam A ](): Stuff[A] +endmarkers/Stuff#do(). => abstract method do => A endmarkers/TestObj. => final object TestObj extends Object { self: TestObj.type => +2 decls } endmarkers/TestObj.foo(). => method foo => Int local0 => val local localVal: Int @@ -800,7 +806,16 @@ Occurrences: [52:9..52:16): TestObj <- endmarkers/TestObj. [54:8..54:11): foo <- endmarkers/TestObj.foo(). [56:6..56:13): TestObj -> endmarkers/TestObj. -[58:4..58:14): endmarkers -> endmarkers/ +[58:8..58:13): Stuff <- endmarkers/Stuff# +[58:14..58:15): A <- endmarkers/Stuff#[A] +[59:9..59:11): do <- endmarkers/Stuff#do(). +[59:14..59:15): A -> endmarkers/Stuff#[A] +[60:6..60:11): Stuff -> endmarkers/Stuff# +[63:8..63:13): Stuff -> endmarkers/Stuff# +[63:14..63:20): String -> scala/Predef.String# +[64:9..64:11): do <- endmarkers/EndMarkers$package.given_Stuff_String.do(). +[64:14..64:20): String -> scala/Predef.String# +[67:4..67:14): endmarkers -> endmarkers/ expect/EndMarkers2.scala ------------------------