Skip to content

Commit ba82475

Browse files
committed
Print extension methods with new syntax
1 parent 9136d2f commit ba82475

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

compiler/src/dotty/tools/dotc/printing/RefinedPrinter.scala

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -745,9 +745,11 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
745745
private def useSymbol(tree: untpd.Tree) =
746746
tree.hasType && tree.symbol.exists && ctx.settings.YprintSyms.value
747747

748-
protected def nameIdText[T >: Untyped](tree: NameTree[T]): Text =
748+
protected def nameIdText[T >: Untyped](tree: NameTree[T], dropExtension: Boolean = false): Text =
749749
if (tree.hasType && tree.symbol.exists) {
750-
val str: Text = nameString(tree.symbol)
750+
var str = nameString(tree.symbol)
751+
if tree.symbol.isExtensionMethod && dropExtension && str.startsWith("extension_") then
752+
str = str.drop("extension_".length)
751753
tree match {
752754
case tree: RefTree => withPos(str, tree.sourcePos)
753755
case tree: MemberDef => withPos(str, tree.sourcePos.withSpan(tree.nameSpan))
@@ -789,11 +791,13 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
789791
import untpd._
790792
dclTextOr(tree) {
791793
val defKeyword = modText(tree.mods, tree.symbol, keywordStr("def"), isType = false)
792-
val isOldExtension =
793-
tree.hasType && tree.symbol.isExtensionMethod && !tree.name.isExtensionName
794+
val isExtension = tree.hasType && tree.symbol.isExtensionMethod
794795
withEnclosingDef(tree) {
795796
val (prefix, vparamss) =
796-
if isOldExtension then (defKeyword ~~ paramsText(tree.vparamss.head) ~~ valDefText(nameIdText(tree)), tree.vparamss.tail)
797+
if isExtension then
798+
(keywordStr("extension") ~~ paramsText(tree.vparamss.head)
799+
~~ (defKeyword ~~ valDefText(nameIdText(tree, dropExtension = true))).close,
800+
tree.vparamss.tail)
797801
else (defKeyword ~~ valDefText(nameIdText(tree)), tree.vparamss)
798802

799803
addVparamssText(prefix ~ tparamsText(tree.tparams), vparamss) ~

tests/printing/i620.check

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ package O {
1111
protected[A] def f: Int = 0
1212
def g: Int = 0
1313
def g1(t: Int): Int = 0
14-
@_root_.scala.annotation.infix() def (c: D.this.C) g1: Int = 0
14+
extension (c: D.this.C) @_root_.scala.annotation.infix() def g1: Int = 0
1515
}
1616
private[D] class E() extends Object() {}
1717
private[this] class F() extends Object() {}

tests/semanticdb/expect/Givens.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ object Givens:
2424

2525
inline given int2String as Conversion[Int, String] = _.toString
2626

27-
def foo[A](using A: Monoid[A]): A = A.combine(A.empty)(A.empty)
27+
def foo[A](using A: Monoid[A]): A = A.extension_combine(A.empty)(A.empty)

0 commit comments

Comments
 (0)