Skip to content

Commit b415f5e

Browse files
committed
Fix span of default getter
1 parent cef2f79 commit b415f5e

File tree

3 files changed

+14
-15
lines changed

3 files changed

+14
-15
lines changed

Diff for: compiler/src/dotty/tools/dotc/ast/Desugar.scala

+7-10
Original file line numberDiff line numberDiff line change
@@ -393,18 +393,14 @@ object desugar {
393393
rhs
394394
cpy.TypeDef(tparam)(rhs = dropInRhs(tparam.rhs))
395395

396-
def paramssNoRHS = mapParamss(meth.paramss)(identity) {
397-
vparam =>
398-
if vparam.rhs.isEmpty then vparam
399-
else cpy.ValDef(vparam)(rhs = EmptyTree).withMods(vparam.mods | HasDefault)
400-
}
396+
def paramssNoRHS = mapParamss(meth.paramss)(identity): vparam =>
397+
if vparam.rhs.isEmpty then vparam
398+
else cpy.ValDef(vparam)(rhs = EmptyTree).withMods(vparam.mods | HasDefault)
401399

402400
def getterParamss(n: Int): List[ParamClause] =
403-
mapParamss(takeUpTo(paramssNoRHS, n)) {
404-
tparam => dropContextBounds(toMethParam(tparam, KeepAnnotations.All))
405-
} {
406-
vparam => toMethParam(vparam, KeepAnnotations.All, keepDefault = false)
407-
}
401+
mapParamss(takeUpTo(paramssNoRHS, n))
402+
(tparam => dropContextBounds(toMethParam(tparam, KeepAnnotations.All)))
403+
(vparam => toMethParam(vparam, KeepAnnotations.All, keepDefault = false))
408404

409405
def defaultGetters(paramss: List[ParamClause], n: Int): List[DefDef] = paramss match
410406
case ValDefs(vparam :: vparams) :: paramss1 =>
@@ -418,6 +414,7 @@ object desugar {
418414
.withMods(Modifiers(
419415
meth.mods.flags & (AccessFlags | Synthetic) | (vparam.mods.flags & Inline),
420416
meth.mods.privateWithin))
417+
.withSpan(vparam.rhs.span)
421418
val rest = defaultGetters(vparams :: paramss1, n + 1)
422419
if vparam.rhs.isEmpty then rest else defaultGetter :: rest
423420
case _ :: paramss1 => // skip empty parameter lists and type parameters

Diff for: tests/warn/i12460.check

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
| Although extensions are ordinary methods, they must be invoked as a selection.
99
| Therefore, the receiver cannot be omitted. A default argument for that parameter would never be used.
1010
---------------------------------------------------------------------------------------------------------------------
11-
-- [E208] Potential Issue Warning: tests/warn/i12460.scala:5:17 --------------------------------------------------------
11+
-- [E208] Potential Issue Warning: tests/warn/i12460.scala:5:37 --------------------------------------------------------
1212
5 |extension (using String)(s: String = "hello, world") def revert = s.reverse.toUpperCase // warn
13-
| ^
14-
| Extension method revert should not have a default argument for its receiver.
13+
| ^
14+
| Extension method revert should not have a default argument for its receiver.
1515
|---------------------------------------------------------------------------------------------------------------------
1616
| Explanation (enabled by `-explain`)
1717
|- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Diff for: tests/warn/i12460.scala

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
//> using options -explain
1+
//> using options -explain -Ystop-after:refchecks
22

33
extension (s: String = "hello, world") def invert = s.reverse.toUpperCase // warn
44

55
extension (using String)(s: String = "hello, world") def revert = s.reverse.toUpperCase // warn
66

7-
extension (s: String) def divert(m: String = "hello, world") = (s+m).reverse.toUpperCase // ok
7+
extension (s: String)
8+
def divert(m: String = "hello, world") = (s+m).reverse.toUpperCase // ok
9+
def divertimento(using String)(m: String = "hello, world") = (s+m).reverse.toUpperCase // ok

0 commit comments

Comments
 (0)