Skip to content

Commit 6b85481

Browse files
committed
Fix #4068: Fix pretty-printing precedence for function types
Fix #4068 in a hacky way.
1 parent 34c04af commit 6b85481

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
135135
def toTextFunction(args: List[Type], isImplicit: Boolean, isErased: Boolean): Text =
136136
changePrec(GlobalPrec) {
137137
val argStr: Text =
138-
if (args.length == 2 && !defn.isTupleType(args.head))
138+
if (args.length == 2 && defn.isFunctionType(args.head)) {
139+
"(" ~ globalPrecArgText(args.head) ~ ")"
140+
} else if (args.length == 2 && !defn.isTupleType(args.head))
139141
atPrec(InfixPrec) { globalPrecArgText(args.head) }
140142
else
141143
toTextTuple(args.init)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,10 @@
11
scala> val toInt: Any => Int = new { def apply(a: Any) = 1; override def toString() = "<func1>" }
22
val toInt: Any => Int = <func1>
3+
scala> val hoFun: (Int => Int) => Int = new { def apply(a: Int => Int) = 1; override def toString() = "<func2>" }
4+
val hoFun: (Int => Int) => Int = <func2>
5+
scala> val curriedFun: Int => (Int => Int) = new { def apply(a: Int) = _ => 1; override def toString() = "<func3>" }
6+
val curriedFun: Int => Int => Int = <func3>
7+
scala> val tupFun: ((Int, Int)) => Int = new { def apply(a: (Int, Int)) = 1; override def toString() = "<func4>" }
8+
val tupFun: ((Int, Int)) => Int = <func4>
9+
scala> val binFun: (Int, Int) => Int = new { def apply(a: Int, b: Int) = 1; override def toString() = "<func5>" }
10+
val binFun: (Int, Int) => Int = <func5>

0 commit comments

Comments
 (0)