Skip to content

Commit c054c62

Browse files
Merge pull request #8720 from dotty-staging/fix-#8717
Fix #8716 and fix #8717: Add missing extension span
2 parents 63ee630 + 91f7ade commit c054c62

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3573,6 +3573,7 @@ object Parsers {
35733573
*/
35743574
def extensionDef(start: Offset, mods: Modifiers): ModuleDef =
35753575
in.nextToken()
3576+
val nameOffset = in.offset
35763577
val name = if isIdent && !isIdent(nme.on) then ident() else EmptyTermName
35773578
in.endMarkerScope(if name.isEmpty then nme.extension else name) {
35783579
val (tparams, vparamss, extensionFlag) =
@@ -3588,7 +3589,7 @@ object Parsers {
35883589
if !in.isNestedStart then syntaxError("Extension without extension methods")
35893590
val templ = templateBodyOpt(makeConstructor(tparams, vparamss), Nil, Nil)
35903591
templ.body.foreach(checkExtensionMethod(tparams, vparamss, _))
3591-
val edef = ModuleDef(name, templ)
3592+
val edef = atSpan(start, nameOffset, in.offset)(ModuleDef(name, templ))
35923593
finalizeDef(edef, addFlag(mods, Given | extensionFlag), start)
35933594
}
35943595

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
scala>extension { }
2+
1 |extension { }
3+
|^
4+
|anonymous instance must implement a type or have at least one extension method
5+
scala> extension as on
6+
1 | extension as on
7+
| ^
8+
| '(' expected, but eof found
9+
scala> extension as on (s
10+
1 | extension as on (s
11+
| ^
12+
| ':' expected, but eof found
13+
scala> extension as on (s: String) { def expand = ??? }
14+
// defined object as

tests/semanticdb/expect/Givens.expect.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ package b
44
object Givens/*<-a::b::Givens.*/:
55

66
extension on [A](any: A):
7-
def /*<-a::b::Givens.extension_sayHello_A.*//*<-a::b::Givens.extension_sayHello_A.sayHello().[A]*//*<-a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->a::b::Givens.extension_sayHello_A.sayHello().[A]*/sayHello/*<-a::b::Givens.extension_sayHello_A.sayHello().*/ = s"/*->scala::StringContext.apply().*/Hello, I am $any/*->a::b::Givens.extension_sayHello_A.sayHello().(any)*/"/*->scala::StringContext#s().*/
7+
/*<-a::b::Givens.extension_sayHello_A.*//*<-a::b::Givens.extension_sayHello_A.sayHello().[A]*//*<-a::b::Givens.extension_sayHello_A.sayHello().(any)*//*->a::b::Givens.extension_sayHello_A.sayHello().[A]*/def sayHello/*<-a::b::Givens.extension_sayHello_A.sayHello().*/ = s"/*->scala::StringContext.apply().*/Hello, I am $any/*->a::b::Givens.extension_sayHello_A.sayHello().(any)*/"/*->scala::StringContext#s().*/
88

99
extension on [B](any: B):
10-
def sa/*<-a::b::Givens.extension_sayGoodbye_B.*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*/yGoodbye/*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/ = s"/*->scala::StringContext.apply().*/Goodbye, from $any/*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*/"/*->scala::StringContext#s().*/
10+
de/*<-a::b::Givens.extension_sayGoodbye_B.*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*//*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*//*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*//*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().[B]*//*->a::b::Givens.extension_sayGoodbye_B.saySoLong().[B]*/f sayGoodbye/*<-a::b::Givens.extension_sayGoodbye_B.sayGoodbye().*/ = s"/*->scala::StringContext.apply().*/Goodbye, from $any/*->a::b::Givens.extension_sayGoodbye_B.sayGoodbye().(any)*/"/*->scala::StringContext#s().*/
1111
def saySoLong/*<-a::b::Givens.extension_sayGoodbye_B.saySoLong().*/ = s"/*->scala::StringContext.apply().*/So Long, from $any/*->a::b::Givens.extension_sayGoodbye_B.saySoLong().(any)*/"/*->scala::StringContext#s().*/
1212

1313
val hello1/*<-a::b::Givens.hello1.*/ = /*->a::b::Givens.extension_sayHello_A.sayHello().*/1.sayHello

tests/semanticdb/metac.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1308,15 +1308,15 @@ Occurrences:
13081308
[0:8..0:9): a <- a/
13091309
[1:8..1:9): b <- a/b/
13101310
[3:7..3:13): Givens <- a/b/Givens.
1311-
[5:16..6:8): <- a/b/Givens.extension_sayHello_A.
1311+
[5:12..6:4): <- a/b/Givens.extension_sayHello_A.
13121312
[5:16..5:17): A <- a/b/Givens.extension_sayHello_A.sayHello().[A]
13131313
[5:19..5:22): any <- a/b/Givens.extension_sayHello_A.sayHello().(any)
13141314
[5:24..5:25): A -> a/b/Givens.extension_sayHello_A.sayHello().[A]
13151315
[6:8..6:16): sayHello <- a/b/Givens.extension_sayHello_A.sayHello().
13161316
[6:21..6:21): -> scala/StringContext.apply().
13171317
[6:34..6:37): any -> a/b/Givens.extension_sayHello_A.sayHello().(any)
13181318
[6:37..6:38): " -> scala/StringContext#s().
1319-
[8:16..9:10): <- a/b/Givens.extension_sayGoodbye_B.
1319+
[8:12..9:6): <- a/b/Givens.extension_sayGoodbye_B.
13201320
[8:16..8:17): B <- a/b/Givens.extension_sayGoodbye_B.sayGoodbye().[B]
13211321
[8:16..8:17): B <- a/b/Givens.extension_sayGoodbye_B.saySoLong().[B]
13221322
[8:19..8:22): any <- a/b/Givens.extension_sayGoodbye_B.sayGoodbye().(any)

0 commit comments

Comments
 (0)