Skip to content

Commit 1cd1054

Browse files
committed
synthethic span gets zero length nameSpan
Also, proxy wrappers for main annotated methods get a synthetic span
1 parent 569925d commit 1cd1054

File tree

7 files changed

+41
-15
lines changed

7 files changed

+41
-15
lines changed

compiler/src/dotty/tools/dotc/ast/MainProxies.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ object MainProxies {
9999
val mainTempl = Template(emptyConstructor, Nil, Nil, EmptyValDef, mainMeth :: Nil)
100100
val mainCls = TypeDef(mainFun.name.toTypeName, mainTempl)
101101
.withFlags(Final)
102-
if (!ctx.reporter.hasErrors) result = mainCls.withSpan(mainAnnotSpan) :: Nil
102+
if (!ctx.reporter.hasErrors) result = mainCls.withSpan(mainAnnotSpan.toSynthetic) :: Nil
103103
}
104104
result
105105
}
106-
}
106+
}

compiler/src/dotty/tools/dotc/ast/Trees.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ object Trees {
340340
def nameSpan: Span =
341341
if (span.exists) {
342342
val point = span.point
343-
if (rawMods.is(Synthetic) || name.toTermName == nme.ERROR) Span(point)
343+
if (rawMods.is(Synthetic) || span.isSynthetic || name.toTermName == nme.ERROR) Span(point)
344344
else {
345345
val realName = name.stripModuleClassSuffix.lastPart
346346
Span(point, point + realName.length, point)

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ class ExtractSemanticDB extends Phase:
184184
val ctorSym = tree.constr.symbol
185185
if !excludeDef(ctorSym) then
186186
traverseAnnotsOfDefinition(ctorSym)
187-
registerDefinition(ctorSym, Span(tree.constr.nameSpan.point), Set.empty, tree.source)
187+
registerDefinition(ctorSym, tree.constr.nameSpan.startPos, Set.empty, tree.source)
188188
ctorParams(tree.constr.vparamss, tree.body)
189189
for parent <- tree.parentsOrDerived if parent.span.hasLength do
190190
traverse(parent)
@@ -285,11 +285,11 @@ class ExtractSemanticDB extends Phase:
285285

286286
extension (tree: NamedDefTree):
287287
private def adjustedNameSpan(using Context): Span =
288-
val span = tree.nameSpan
288+
val nameSpan = tree.nameSpan
289289
if tree.symbol.is(ExtensionMethod) && tree.name.isExtensionName then
290-
span.withEnd(span.end - ExtractSemanticDB.extensionPrefixLength)
290+
nameSpan.withEnd(nameSpan.end - ExtractSemanticDB.extensionPrefixLength)
291291
else
292-
span
292+
nameSpan
293293

294294
/** Add semanticdb name of the given symbol to string builder */
295295
private def addSymName(b: StringBuilder, sym: Symbol)(using Context): Unit =
@@ -531,8 +531,7 @@ class ExtractSemanticDB extends Phase:
531531
Span(start max limit, end)
532532

533533
extension (span: Span):
534-
private def hasLength: Boolean = span.start != span.end
535-
private def zeroLength: Boolean = span.start == span.end
534+
private def hasLength: Boolean = span.exists && !span.isZeroExtent
536535

537536
/**Consume head while not an import statement.
538537
* Returns the rest of the list after the first import, or else the empty list
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package i9727
22

33
class Test/*<-i9727::Test#*/(a/*<-i9727::Test#a.*/: Int/*->scala::Int#*/)
4-
val a = new T/*<-i9727::i9727$package.*//*<-i9727::i9727$package.a.*/est/*->i9727::Test#*/(1)
4+
/*<-i9727::i9727$package.*/val a/*<-i9727::i9727$package.a.*/ = new Test/*->i9727::Test#*/(1)
55
val b/*<-i9727::i9727$package.b.*/ = new Test/*->i9727::Test#*/(2)
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
inline val a = "/*<-_empty_::toplevel$package.*//*<-_empty_::toplevel$package.a.*/"
1+
/*<-_empty_::toplevel$package.*/inline val a/*<-_empty_::toplevel$package.a.*/ = ""
22
extension (x/*<-_empty_::toplevel$package.extension_combine().(x)*/: Int/*->scala::Int#*/) def combine/*<-_empty_::toplevel$package.extension_combine().*/ (y/*<-_empty_::toplevel$package.extension_combine().(y)*/: Int/*->scala::Int#*/) = x/*->_empty_::toplevel$package.extension_combine().(x)*/ +/*->scala::Int#`+`(+4).*/ y/*->_empty_::toplevel$package.extension_combine().(y)*/
33
def combine/*<-_empty_::toplevel$package.combine().*/(x/*<-_empty_::toplevel$package.combine().(x)*/: Int/*->scala::Int#*/, y/*<-_empty_::toplevel$package.combine().(y)*/: Int/*->scala::Int#*/, z/*<-_empty_::toplevel$package.combine().(z)*/: Int/*->scala::Int#*/) = x/*->_empty_::toplevel$package.combine().(x)*/ +/*->scala::Int#`+`(+4).*/ y/*->_empty_::toplevel$package.combine().(y)*/ +/*->scala::Int#`+`(+4).*/ z/*->_empty_::toplevel$package.combine().(z)*/
44
def combine/*<-_empty_::toplevel$package.combine(+1).*/ = 0
55
def foo/*<-_empty_::toplevel$package.foo().*/ = "foo"
6+
/*<-_empty_::MyProgram#*//*->_empty_::toplevel$package.MyProgram().*//*->scala::util::CommandLineParser.parseArgument().*//*->_empty_::MyProgram#main().(args)*//*->scala::util::FromString.given_FromString_Int.*//*->scala::util::CommandLineParser.showError().*//*->local0*/@main/*->scala::main#*/ def MyProgram/*<-_empty_::toplevel$package.MyProgram().*/(times/*<-_empty_::toplevel$package.MyProgram().(times)*/: Int/*->scala::Int#*/): Unit/*->scala::Unit#*/ = (/*->scala::LowPriorityImplicits#intWrapper().*/1 to/*->scala::runtime::RichInt#to().*/ times/*->_empty_::toplevel$package.MyProgram().(times)*/) foreach/*->scala::collection::immutable::Range#foreach().*/ (_ => println/*->scala::Predef.println(+1).*/("hello"))

tests/semanticdb/expect/toplevel.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ extension (x: Int) def combine (y: Int) = x + y
33
def combine(x: Int, y: Int, z: Int) = x + y + z
44
def combine = 0
55
def foo = "foo"
6+
@main def MyProgram(times: Int): Unit = (1 to times) foreach (_ => println("hello"))

tests/semanticdb/metac.expect

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3070,7 +3070,7 @@ Occurrences:
30703070
[2:10..2:10): <- i9727/Test#`<init>`().
30713071
[2:11..2:12): a <- i9727/Test#a.
30723072
[2:14..2:17): Int -> scala/Int#
3073-
[3:0..3:13): val a = new T <- i9727/i9727$package.
3073+
[3:0..3:0): <- i9727/i9727$package.
30743074
[3:4..3:5): a <- i9727/i9727$package.a.
30753075
[3:12..3:16): Test -> i9727/Test#
30763076
[3:16..3:16): -> i9727/Test#`<init>`().
@@ -3922,11 +3922,17 @@ Schema => SemanticDB v4
39223922
Uri => toplevel.scala
39233923
Text => empty
39243924
Language => Scala
3925-
Symbols => 11 entries
3926-
Occurrences => 24 entries
3925+
Symbols => 18 entries
3926+
Occurrences => 42 entries
39273927

39283928
Symbols:
3929+
_empty_/MyProgram# => final class MyProgram
3930+
_empty_/MyProgram#`<init>`(). => primary ctor <init>
3931+
_empty_/MyProgram#main(). => static method main
3932+
_empty_/MyProgram#main().(args) => param args
39293933
_empty_/toplevel$package. => final package object _empty_
3934+
_empty_/toplevel$package.MyProgram(). => method MyProgram
3935+
_empty_/toplevel$package.MyProgram().(times) => param times
39303936
_empty_/toplevel$package.a. => val method a
39313937
_empty_/toplevel$package.combine(). => method combine
39323938
_empty_/toplevel$package.combine().(x) => param x
@@ -3937,9 +3943,10 @@ _empty_/toplevel$package.extension_combine(). => method extension_combine
39373943
_empty_/toplevel$package.extension_combine().(x) => param x
39383944
_empty_/toplevel$package.extension_combine().(y) => param y
39393945
_empty_/toplevel$package.foo(). => method foo
3946+
local0 => val local error
39403947

39413948
Occurrences:
3942-
[0:0..0:16): inline val a = " <- _empty_/toplevel$package.
3949+
[0:0..0:0): <- _empty_/toplevel$package.
39433950
[0:11..0:12): a <- _empty_/toplevel$package.a.
39443951
[1:11..1:12): x <- _empty_/toplevel$package.extension_combine().(x)
39453952
[1:14..1:17): Int -> scala/Int#
@@ -3963,4 +3970,22 @@ Occurrences:
39633970
[2:46..2:47): z -> _empty_/toplevel$package.combine().(z)
39643971
[3:4..3:11): combine <- _empty_/toplevel$package.combine(+1).
39653972
[4:4..4:7): foo <- _empty_/toplevel$package.foo().
3973+
[5:0..5:0): <- _empty_/MyProgram#
3974+
[5:0..5:0): <- _empty_/MyProgram#`<init>`().
3975+
[5:0..5:0): -> _empty_/toplevel$package.MyProgram().
3976+
[5:0..5:0): -> scala/util/CommandLineParser.parseArgument().
3977+
[5:0..5:0): -> _empty_/MyProgram#main().(args)
3978+
[5:0..5:0): -> scala/util/FromString.given_FromString_Int.
3979+
[5:0..5:0): -> scala/util/CommandLineParser.showError().
3980+
[5:0..5:0): -> local0
3981+
[5:1..5:5): main -> scala/main#
3982+
[5:10..5:19): MyProgram <- _empty_/toplevel$package.MyProgram().
3983+
[5:20..5:25): times <- _empty_/toplevel$package.MyProgram().(times)
3984+
[5:27..5:30): Int -> scala/Int#
3985+
[5:33..5:37): Unit -> scala/Unit#
3986+
[5:41..5:41): -> scala/LowPriorityImplicits#intWrapper().
3987+
[5:43..5:45): to -> scala/runtime/RichInt#to().
3988+
[5:46..5:51): times -> _empty_/toplevel$package.MyProgram().(times)
3989+
[5:53..5:60): foreach -> scala/collection/immutable/Range#foreach().
3990+
[5:67..5:74): println -> scala/Predef.println(+1).
39663991

0 commit comments

Comments
 (0)