Skip to content

Commit 06ddb6c

Browse files
committed
Add semanticdb todolist; only traverse paths if qualifier is not a package
1 parent 9c1c10c commit 06ddb6c

File tree

12 files changed

+74
-28
lines changed

12 files changed

+74
-28
lines changed

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ class ExtractSemanticDB extends Phase {
160160

161161
private def excludeDefStrict(sym: Symbol)(given Context): Boolean =
162162
sym.name.is(NameKinds.DefaultGetterName)
163+
|| sym == defn.Predef_classOf
164+
|| sym == defn.ScalaPredefModule
165+
|| sym == defn.StringContextModule
163166

164167
private def (sym: Symbol) isAnonymous(given Context): Boolean =
165168
sym.isAnonymousClass
@@ -172,7 +175,7 @@ class ExtractSemanticDB extends Phase {
172175

173176
private def registerOccurrence(sym: Symbol, span: Span, role: SymbolOccurrence.Role)(given Context): Unit =
174177
val occ = SymbolOccurrence(symbolName(sym), range(span), role)
175-
if !generated.contains(occ) then
178+
if !generated.contains(occ) && occ.symbol.nonEmpty then
176179
occurrences += occ
177180
generated += occ
178181

@@ -188,7 +191,8 @@ class ExtractSemanticDB extends Phase {
188191
def registerPath(expr: Tree): Unit = expr match
189192
case t @ Select(expr, _) =>
190193
registerUse(t.symbol, t.span)
191-
registerPath(expr)
194+
if !expr.symbol.is(Package) then
195+
registerPath(expr)
192196

193197
case _ =>
194198

@@ -198,9 +202,6 @@ class ExtractSemanticDB extends Phase {
198202
then
199203
traverse(annot.tree)
200204

201-
val RootName = nme.ROOTPKG.toSimpleName
202-
val Scala = "scala".toTermName.toSimpleName
203-
204205
tree match
205206
case tree: ValDef if tree.symbol.is(Module) => // skip module val
206207
case tree: NamedDefTree
@@ -238,9 +239,8 @@ class ExtractSemanticDB extends Phase {
238239
if source.content()(end - 1) == '`' then end - len - 1 else end - len
239240
else limit
240241
registerUse(tree.symbol, Span(start max limit, end))
241-
tree.qualifier match
242-
case Select(Select(Ident(RootName), Scala), _) => // skip
243-
case _ => traverseChildren(tree)
242+
if !tree.qualifier.symbol.is(Package) then
243+
traverseChildren(tree)
244244
case tree: Import =>
245245
if tree.span.exists && tree.span.start != tree.span.end then
246246
for sel <- tree.selectors do
@@ -250,7 +250,8 @@ class ExtractSemanticDB extends Phase {
250250
registerUse(alt.symbol, sel.imported.span)
251251
if (alt.symbol.companionClass.exists)
252252
registerUse(alt.symbol.companionClass, sel.imported.span)
253-
registerPath(tree.expr)
253+
if !tree.expr.symbol.is(Package) then
254+
registerPath(tree.expr)
254255
case tree: Inlined =>
255256
traverse(tree.call)
256257
case tree: PackageDef => tree.stats.foreach(traverse)

compiler/test/dotty/tools/dotc/semanticdb/SemanticdbTests.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class SemanticdbTests {
6565
"-Ysemanticdb",
6666
"-d", target.toString,
6767
// "-Ydebug",
68-
// "-Xprint:extractSemanticDB",
68+
"-Xprint:extractSemanticDB",
6969
"-sourceroot", src.toString,
7070
"-usejavacp",
7171
) ++ inputFiles().map(_.toString)

tests/semanticdb/Advanced.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package advanced
33
import scala.language/*=>>scalaShadowing.language.*/.higherKinds/*=>>scalaShadowing.language.higherKinds.*/
44
import scala.language/*=>>scalaShadowing.language.*/.reflectiveCalls/*=>>scalaShadowing.language.reflectiveCalls.*/
55

6-
import scala.reflect/*=>>scala.reflect.*/.Selectable/*=>>scala.reflect.Selectable.*/.reflectiveSelectable/*=>>scala.reflect.Selectable.reflectiveSelectable().*/
6+
import scala.reflect.Selectable/*=>>scala.reflect.Selectable.*/.reflectiveSelectable/*=>>scala.reflect.Selectable.reflectiveSelectable().*/
77

88
class C/*<<=advanced.C#*/[T/*<<=advanced.C#[T]*/] {
99
def t/*<<=advanced.C#t().*/: T/*=>>advanced.C#[T]*/ = ???/*=>>scala.Predef.`???`().*/

tests/semanticdb/Enums.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ object Enums/*<<=_empty_.Enums.*/ {
3333
}
3434
}
3535

36-
enum Planet/*<<=_empty_.Enums.Planet#*/(mass/*<<=_empty_.Enums.Planet#mass.*/: Double/*=>>scala.Double#*/, radius/*<<=_empty_.Enums.Planet#radius.*/: Double/*=>>scala.Double#*/) extends java/*=>>java.*/.lang/*=>>java.lang.*/.Enum/*=>>java.lang.Enum#*/[Planet/*=>>_empty_.Enums.Planet#*/]/*=>>java.lang.Enum#`<init>`().*/ {
36+
enum Planet/*<<=_empty_.Enums.Planet#*/(mass/*<<=_empty_.Enums.Planet#mass.*/: Double/*=>>scala.Double#*/, radius/*<<=_empty_.Enums.Planet#radius.*/: Double/*=>>scala.Double#*/) extends java.lang.Enum/*=>>java.lang.Enum#*/[Planet/*=>>_empty_.Enums.Planet#*/]/*=>>java.lang.Enum#`<init>`().*/ {
3737
private final val G/*<<=_empty_.Enums.Planet#G.*/ = 6.67300E-11
3838
def surfaceGravity/*<<=_empty_.Enums.Planet#surfaceGravity().*/ = G/*=>>_empty_.Enums.Planet#G.*/ */*=>>scala.Double#`*`(+6).*/ mass/*=>>_empty_.Enums.Planet#mass.*/ //*=>>scala.Double#`.`(+6).*/ (radius/*=>>_empty_.Enums.Planet#radius.*/ */*=>>scala.Double#`*`(+6).*/ radius/*=>>_empty_.Enums.Planet#radius.*/)
3939
def surfaceWeight/*<<=_empty_.Enums.Planet#surfaceWeight().*/(otherMass/*<<=_empty_.Enums.Planet#surfaceWeight().(otherMass)*/: Double/*=>>scala.Double#*/) = otherMass/*=>>_empty_.Enums.Planet#surfaceWeight().(otherMass)*/ */*=>>scala.Double#`*`(+6).*/ surfaceGravity/*=>>_empty_.Enums.Planet#surfaceGravity().*/
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package example
22

3-
import scala.concurrent/*=>>scala.concurrent.*/.Future/*=>>scala.concurrent.Future.*//*=>>scala.concurrent.Future#*/
3+
import scala.concurrent.Future/*=>>scala.concurrent.Future.*//*=>>scala.concurrent.Future#*/
44

55
object Example/*<<=example.Example.*/ { /*=>>example.Example.*/self/*<<=local0*/ =>
6-
new /*=>>scala.collection.mutable.Stack.*/scala/*=>>scala.*/.collection/*=>>scala.collection.*/.mutable/*=>>scala.collection.mutable.*/.Stack/*=>>scala.collection.mutable.Stack#*/[Int/*=>>scala.Int#*/]/*=>>scala.collection.mutable.Stack#`<init>`(+1).*/()
6+
new /*=>>scala.collection.mutable.Stack.*/scala.collection.mutable.Stack/*=>>scala.collection.mutable.Stack#*/[Int/*=>>scala.Int#*/]/*=>>scala.collection.mutable.Stack#`<init>`(+1).*/()
77
def main/*<<=example.Example.main().*/(args/*<<=example.Example.main().(args)*/: Array/*=>>scala.Array#*/[String/*=>>scala.Predef.String#*/]): Unit/*=>>scala.Unit#*/ = {
88
println/*=>>scala.Predef.println(+1).*/(1)
99
}
10-
val x/*<<=example.Example.x.*/ = scala/*=>>scala.*/.reflect/*=>>scala.reflect.*/.classTag/*=>>scala.reflect.package.classTag().*/[Int/*=>>scala.Int#*/]/*=>>scala.reflect.ClassTag.apply().*//*=>>scala.reflect.ClassTag.*//*=>>java.lang.Integer.TYPE.*//*=>>java.lang.Integer.*/
10+
val x/*<<=example.Example.x.*/ = scala.reflect.classTag/*=>>scala.reflect.package.classTag().*/[Int/*=>>scala.Int#*/]/*=>>scala.reflect.ClassTag.apply().*//*=>>scala.reflect.ClassTag.*//*=>>java.lang.Integer.TYPE.*//*=>>java.lang.Integer.*/
1111
}

tests/semanticdb/ImplicitConversion.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class ImplicitConversion/*<<=example.ImplicitConversion#*/ {
88
): Int/*=>>scala.Int#*/ = 42
99
implicit def newAny2StringAdd/*<<=example.ImplicitConversion#newAny2StringAdd().*/[T/*<<=example.ImplicitConversion#newAny2StringAdd().[T]*/](
1010
any/*<<=example.ImplicitConversion#newAny2StringAdd().(any)*/: T/*=>>example.ImplicitConversion#newAny2StringAdd().[T]*/
11-
): Predef/*=>>scala.Predef.*/.any2stringadd/*=>>scala.Predef.any2stringadd#*/[T/*=>>example.ImplicitConversion#newAny2StringAdd().[T]*/] = new Predef/*=>>scala.Predef.*/.any2stringadd/*=>>*//*=>>scala.Predef.any2stringadd#`<init>`().*/(any/*=>>example.ImplicitConversion#newAny2StringAdd().(any)*/)
11+
): Predef.any2stringadd/*=>>scala.Predef.any2stringadd#*/[T/*=>>example.ImplicitConversion#newAny2StringAdd().[T]*/] = new Predef.any2stringadd/*=>>scala.Predef.any2stringadd#`<init>`().*/(any/*=>>example.ImplicitConversion#newAny2StringAdd().(any)*/)
1212
val message/*<<=example.ImplicitConversion#message.*/ = ""
1313
val number/*<<=example.ImplicitConversion#number.*/ = 42
1414
val tuple/*<<=example.ImplicitConversion#tuple.*/ = (1, 2)
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
import scala.util/*=>>scala.util.*/.control/*=>>scala.util.control.*/.NonFatal/*=>>scala.util.control.NonFatal.*/
1+
import scala.util.control.NonFatal/*=>>scala.util.control.NonFatal.*/

tests/semanticdb/InstrumentTyper.expect.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package example
22

3-
import scala.annotation/*=>>scala.annotation.*/.meta/*=>>scala.annotation.meta.*/.param/*=>>scala.annotation.meta.param.*/
3+
import scala.annotation.meta.param/*=>>scala.annotation.meta.param.*/
44
import scala.language/*=>>scalaShadowing.language.*/.existentials/*=>>scalaShadowing.language.existentials.*/
55
import scala.language/*=>>scalaShadowing.language.*/.higherKinds/*=>>scalaShadowing.language.higherKinds.*/
6-
import types.Test._
6+
import types.Test/*=>>types.Test.*/._
77

88
class InstrumentTyper/*<<=example.InstrumentTyper#*/ { self/*<<=local0*/: AnyRef/*=>>scala.AnyRef#*/ =>
99
def all/*<<=example.InstrumentTyper#all().*/ = List/*=>>scala.package.List.*//*=>>scala.collection.IterableFactory#apply().*/(
@@ -21,6 +21,6 @@ class InstrumentTyper/*<<=example.InstrumentTyper#*/ { self/*<<=local0*/: AnyRef
2121
List/*=>>scala.package.List.*//*=>>scala.collection.IterableFactory#apply().*/()
2222
)
2323
type AnnotatedType/*<<=example.InstrumentTyper#AnnotatedType#*/ = Int/*=>>scala.Int#*/ @param
24-
def singletonType/*<<=example.InstrumentTyper#singletonType().*/(x/*<<=example.InstrumentTyper#singletonType().(x)*/: Predef/*=>>scala.Predef.*/.type) = ???/*=>>scala.Predef.`???`().*/
25-
final val clazzOf/*<<=example.InstrumentTyper#clazzOf.*/ = classOf/*=>>scala.Predef.classOf().*/[Option/*=>>scala.Option#*/[Int/*=>>scala.Int#*/]]
24+
def singletonType/*<<=example.InstrumentTyper#singletonType().*/(x/*<<=example.InstrumentTyper#singletonType().(x)*/: Predef.type) = ???/*=>>scala.Predef.`???`().*/
25+
final val clazzOf/*<<=example.InstrumentTyper#clazzOf.*/ = classOf[Option/*=>>scala.Option#*/[Int/*=>>scala.Int#*/]]
2626
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// See https://github.com/scalameta/scalameta/issues/1749
2+
package example
3+
4+
import scala.math.Ordered/*=>>scala.math.Ordered.*/.orderingToOrdered/*=>>scala.math.Ordered.orderingToOrdered().*/
5+
6+
class Issue1749/*<<=example.Issue1749#*/ {
7+
val x1/*<<=example.Issue1749#x1.*/ = 42
8+
val x2/*<<=example.Issue1749#x2.*/ = 42
9+
/*=>>scala.math.Ordered.orderingToOrdered().*/(x1/*=>>example.Issue1749#x1.*/, x1/*=>>example.Issue1749#x1.*/)/*=>>scala.math.Ordering.Tuple2().*//*=>>scala.math.Ordering.Int.*/
10+
.compare/*=>>scala.math.Ordered#compare().*/((x2/*=>>example.Issue1749#x2.*/, x2/*=>>example.Issue1749#x2.*/))
11+
}
12+
13+
class Issue1854/*<<=example.Issue1854#*/ {
14+
val map/*<<=example.Issue1854#map.*/ = collection.mutable.Map/*=>>scala.collection.mutable.Map.*/.empty/*=>>scala.collection.MapFactory.Delegate#empty().*/[String/*=>>scala.Predef.String#*/, String/*=>>scala.Predef.String#*/]
15+
map/*=>>example.Issue1854#map.*//*=>>scala.collection.mutable.MapOps#update().*/("a") = "b"
16+
}

tests/semanticdb/Issue1749.scala

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// See https://github.com/scalameta/scalameta/issues/1749
2+
package example
3+
4+
import scala.math.Ordered.orderingToOrdered
5+
6+
class Issue1749 {
7+
val x1 = 42
8+
val x2 = 42
9+
(x1, x1)
10+
.compare((x2, x2))
11+
}
12+
13+
class Issue1854 {
14+
val map = collection.mutable.Map.empty[String, String]
15+
map("a") = "b"
16+
}

0 commit comments

Comments
 (0)