Skip to content

Commit a93d15c

Browse files
committed
avoid blacklisting scala.Predef and scala.StringContext
Simply check if prefix of a select has a range that is visible
1 parent c69aaca commit a93d15c

File tree

7 files changed

+11
-12
lines changed

7 files changed

+11
-12
lines changed

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,6 @@ class ExtractSemanticDB extends Phase {
175175

176176
private def blacklistPrefix(sym: Symbol)(given Context): Boolean =
177177
sym.is(Package)
178-
|| sym == defn.ScalaPredefModule
179-
|| sym == defn.StringContextModule
180178

181179
private def (sym: Symbol) isAnonymous(given Context): Boolean =
182180
sym.isAnonymousClass
@@ -244,16 +242,17 @@ class ExtractSemanticDB extends Phase {
244242
if tree.name != nme.WILDCARD && !excludeUseStrict(tree.symbol, tree.span) then
245243
registerUse(tree.symbol, tree.span)
246244
case tree: Select =>
245+
val qualSpan = tree.qualifier.span
247246
if !excludeUseStrict(tree.symbol, tree.span) then
248247
val end = tree.span.end
249-
val limit = tree.qualifier.span.end
248+
val limit = qualSpan.end
250249
val start =
251250
if limit < end then
252251
val len = tree.name.toString.length
253252
if source.content()(end - 1) == '`' then end - len - 1 else end - len
254253
else limit
255254
registerUse(tree.symbol, Span(start max limit, end))
256-
if !blacklistPrefix(tree.qualifier.symbol) then
255+
if !blacklistPrefix(tree.qualifier.symbol) && qualSpan.exists && qualSpan.start != qualSpan.end then
257256
traverseChildren(tree)
258257
case tree: Import =>
259258
if tree.span.exists && tree.span.start != tree.span.end then

tests/semanticdb/Advanced.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ object Test/*<<=advanced.Test.*/ {
2626
val s2/*<<=advanced.Test.s2.*/ = s/*=>>advanced.Test.s.*/.s2/*=>>advanced.Structural#s2().*/
2727
val s2x/*<<=advanced.Test.s2x.*/ = /*=>>scala.reflect.Selectable.reflectiveSelectable().*/s/*=>>advanced.Test.s.*/.s2/*=>>advanced.Structural#s2().*//*=>>scala.Selectable#selectDynamic().*/.x
2828
val s3/*<<=advanced.Test.s3.*/ = s/*=>>advanced.Test.s.*/.s3/*=>>advanced.Structural#s3().*/
29-
val s3x/*<<=advanced.Test.s3x.*/ = /*=>>scala.reflect.Selectable.reflectiveSelectable().*/s/*=>>advanced.Test.s.*/.s3/*=>>advanced.Structural#s3().*//*=>>scala.Selectable#applyDynamic().*/.m/*=>>scala.reflect.ClassTag.apply().*//*=>>scala.reflect.ClassTag.*//*=>>java.lang.Integer.TYPE.*//*=>>java.lang.Integer.*/(???/*=>>scala.Predef.`???`().*/)
29+
val s3x/*<<=advanced.Test.s3x.*/ = /*=>>scala.reflect.Selectable.reflectiveSelectable().*/s/*=>>advanced.Test.s.*/.s3/*=>>advanced.Structural#s3().*//*=>>scala.Selectable#applyDynamic().*/.m/*=>>scala.reflect.ClassTag.apply().*//*=>>java.lang.Integer.TYPE.*/(???/*=>>scala.Predef.`???`().*/)
3030

3131
val e/*<<=advanced.Test.e.*/ = new Wildcards/*=>>advanced.Wildcards#*//*=>>advanced.Wildcards#`<init>`().*/
3232
val e1/*<<=advanced.Test.e1.*/ = e/*=>>advanced.Test.e.*/.e1/*=>>advanced.Wildcards#e1().*/

tests/semanticdb/Enums.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ object Enums/*<<=_empty_.Enums.*/ {
1414
}
1515

1616
enum Maybe/*<<=_empty_.Enums.Maybe#*/[+A/*<<=_empty_.Enums.Maybe#[A]*/] {
17-
/*=>>_empty_.Enums.Maybe#`<init>`().*//*=>>_empty_.Enums.Maybe.Just#[A]*/case Just/*<<=_empty_.Enums.Maybe.Just#*/(value/*<<=_empty_.Enums.Maybe.Just#value.*/: A/*=>>_empty_.Enums.Maybe.Just#`<init>`().[A]*/)
17+
/*=>>_empty_.Enums.Maybe#`<init>`().*/case Just/*<<=_empty_.Enums.Maybe.Just#*/(value/*<<=_empty_.Enums.Maybe.Just#value.*/: A/*=>>_empty_.Enums.Maybe.Just#`<init>`().[A]*/)
1818
/*=>>_empty_.Enums.Maybe#`<init>`().*/case None/*<<=_empty_.Enums.Maybe.None.*/
1919
}
2020

tests/semanticdb/Example.expect.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ package example
33
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.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#*/[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.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().*//*=>>java.lang.Integer.TYPE.*/
1111
}

tests/semanticdb/Givens.expect.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ object Givens/*<<=a.b.Givens.*/
66
given :[A](any: A)
77
de/*<<=a.b.Givens.given_sayHello_of_A.*//*<<=a.b.Givens.given_sayHello_of_A.sayHello().[A]*//*<<=a.b.Givens.given_sayHello_of_A.sayHello().(any)*//*=>>a.b.Givens.given_sayHello_of_A.sayHello().[A]*/f sayHello/*<<=a.b.Givens.given_sayHello_of_A.sayHello().*/ = s"Hello, I am $any/*=>>a.b.Givens.given_sayHello_of_A.sayHello().(any)*//*=>>scala.StringContext#s().*/"
88

9-
val hello1/*<<=a.b.Givens.hello1.*/ = /*=>>a.b.Givens.given_sayHello_of_A.sayHello().*//*=>>a.b.Givens.given_sayHello_of_A.*/1.sayHello
9+
val hello1/*<<=a.b.Givens.hello1.*/ = /*=>>a.b.Givens.given_sayHello_of_A.sayHello().*/1.sayHello
1010

1111
trait Monoid/*<<=a.b.Givens.Monoid#*/[A/*<<=a.b.Givens.Monoid#[A]*/]
1212
def empty/*<<=a.b.Givens.Monoid#empty().*/: A/*=>>a.b.Givens.Monoid#[A]*/

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.any2stringadd/*=>>scala.Predef.any2stringadd#*/[T/*=>>example.ImplicitConversion#newAny2StringAdd().[T]*/] = new Predef.any2stringadd/*=>>scala.Predef.any2stringadd#`<init>`().*/(any/*=>>example.ImplicitConversion#newAny2StringAdd().(any)*/)
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)*/)
1212
val message/*<<=example.ImplicitConversion#message.*/ = ""
1313
val number/*<<=example.ImplicitConversion#number.*/ = 42
1414
val tuple/*<<=example.ImplicitConversion#tuple.*/ = (1, 2)

tests/semanticdb/todo renamed to tests/semanticdb/todo.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ This todolist is based upon blackbox observation of testcases at this repository
88
- [ ] Hide calls to implicit conversions and their arguments
99
- [ ] Hide Tuple contructors
1010
- [x] unescape unicode in names.
11-
- [x] Hide `scala.Predef` prefix
12-
- [x] Hide `scala.StringContext`
1311
- [x] Only traverse prefix of a Select if it is not a package
1412
- [x] Ensure only methods are counted in overloads
1513
- [x] Import wildcard needs to have reference to the qualifier
14+
- [-] ~~Hide `scala.Predef` prefix~~ // same effect acheved by ensuring prefix has a range > 0
15+
- [-] ~~Hide `scala.StringContext`~~ // same effect acheved by ensuring prefix has a range > 0
1616
- [-] ~~Hide `Predef.classOf`~~ // won't fix - confirmed as a bug in scalameta

0 commit comments

Comments
 (0)