Skip to content

Commit 71dfd7f

Browse files
committed
Print a space between a symbolic operator and a colon.
This affects both RefinedPrinter and ShowSougrceCode. Another example of the tax we pay for maintaining both. It required Chars to be moved to scala.tasty.
1 parent 4716645 commit 71dfd7f

File tree

18 files changed

+111
-24
lines changed

18 files changed

+111
-24
lines changed

compiler/src/dotty/tools/dotc/core/NameOps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package core
44
import java.security.MessageDigest
55
import scala.io.Codec
66
import Names._, StdNames._, Contexts._, Symbols._, Flags._, NameKinds._, Types._
7-
import util.Chars
7+
import scala.tasty.util.Chars
88
import Chars.isOperatorPart
99
import Definitions._
1010

compiler/src/dotty/tools/dotc/core/Names.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import util.NameTransformer
77
import printing.{Showable, Texts, Printer}
88
import Texts.Text
99
import StdNames.str
10-
import util.Chars.isIdentifierStart
10+
import scala.tasty.util.Chars.isIdentifierStart
1111
import collection.immutable
1212
import config.Config
1313
import java.util.HashMap

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package dotty.tools
22
package dotc
33
package parsing
44

5-
import util.Chars._
5+
import scala.tasty.util.Chars._
66

77
abstract class CharArrayReader { self =>
88

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Scanners._
77
import util.SourceFile
88
import JavaTokens._
99
import scala.annotation.{ switch, tailrec }
10-
import util.Chars._
10+
import scala.tasty.util.Chars._
1111

1212
object JavaScanners {
1313

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import core.Names._, core.Contexts._, core.Decorators._, util.Positions._
66
import core.StdNames._, core.Comments._
77
import util.SourceFile
88
import java.lang.Character.isDigit
9-
import util.Chars._
9+
import scala.tasty.util.Chars._
1010
import util.NameTransformer.avoidIllegalChars
1111
import Tokens._
1212
import scala.annotation.{ switch, tailrec }

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dotty.tools.dotc
22

3-
import util.Chars._
3+
import scala.tasty.util.Chars._
44
import core.Names.Name
55
import core.StdNames.nme
66
import core.NameOps._

compiler/src/dotty/tools/dotc/parsing/xml/MarkupParserCommon.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ package parsing
1010
package xml
1111

1212
import Utility._
13-
import util.Chars.SU
13+
import scala.tasty.util.Chars.SU
1414

1515

1616

compiler/src/dotty/tools/dotc/parsing/xml/MarkupParsers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ package xml
66
import scala.collection.mutable
77
import mutable.{ Buffer, ArrayBuffer, ListBuffer }
88
import scala.util.control.ControlThrowable
9-
import util.Chars.SU
9+
import scala.tasty.util.Chars.SU
1010
import Parsers._
1111
import util.Positions._
1212
import core._

compiler/src/dotty/tools/dotc/parsing/xml/Utility.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import scala.collection.mutable
1212
* @author Burak Emir
1313
*/
1414
object Utility {
15-
import util.Chars.SU
15+
import scala.tasty.util.Chars.SU
1616

1717
private val unescMap = Map(
1818
"lt" -> '<',

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import typer.ProtoTypes._
1919
import Trees._
2020
import TypeApplications._
2121
import Decorators._
22+
import scala.tasty.util.Chars.isOperatorPart
2223
import transform.TypeUtils._
2324

2425
import language.implicitConversions
@@ -345,7 +346,11 @@ class RefinedPrinter(_ctx: Context) extends PlainPrinter(_ctx) {
345346
}
346347
}
347348
case Typed(expr, tpt) =>
348-
changePrec(InfixPrec) { toText(expr) ~ ": " ~ toText(tpt) }
349+
changePrec(InfixPrec) {
350+
val exprText = toText(expr)
351+
val line = exprText.lastLine
352+
val colon = if (!line.isEmpty && isOperatorPart(line.last)) " :" else ":"
353+
exprText ~ colon ~ toText(tpt) }
349354
case NamedArg(name, arg) =>
350355
toText(name) ~ " = " ~ toText(arg)
351356
case Assign(lhs, rhs) =>

compiler/src/dotty/tools/dotc/reporting/MessageRendering.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import printing.SyntaxHighlighting
99
import diagnostic.{ErrorMessageID, Message, MessageContainer}
1010
import diagnostic.messages._
1111
import util.SourcePosition
12-
import util.Chars.{ LF, CR, FF, SU }
12+
import scala.tasty.util.Chars.{ LF, CR, FF, SU }
1313
import scala.annotation.switch
1414

1515
import scala.collection.mutable

compiler/src/dotty/tools/dotc/transform/TreeChecker.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import typer.ErrorReporting._
1818
import reporting.ThrowingReporter
1919
import ast.Trees._
2020
import ast.{tpd, untpd}
21-
import util.Chars._
21+
import scala.tasty.util.Chars._
2222
import collection.mutable
2323
import ProtoTypes._
2424

compiler/src/dotty/tools/dotc/util/CommentParsing.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ package dotty.tools.dotc.util
1313
* handled by dottydoc.
1414
*/
1515
object CommentParsing {
16-
import Chars._
16+
import scala.tasty.util.Chars._
1717

1818
/** Returns index of string `str` following `start` skipping longest
1919
* sequence of whitespace characters characters (but no newlines)

compiler/src/dotty/tools/dotc/util/NameTransformer.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package util
44

55
import core.Names._
66
import collection.mutable
7-
import util.Chars.isValidJVMMethodChar
7+
import scala.tasty.util.Chars
88

99
import scala.annotation.internal.sharable
1010

@@ -47,11 +47,11 @@ object NameTransformer {
4747
*/
4848
def avoidIllegalChars(name: SimpleName): SimpleName = {
4949
var i = name.length - 1
50-
while (i >= 0 && isValidJVMMethodChar(name(i))) i -= 1
50+
while (i >= 0 && Chars.isValidJVMMethodChar(name(i))) i -= 1
5151
if (i >= 0)
5252
termName(
5353
name.toString.flatMap(ch =>
54-
if (isValidJVMMethodChar(ch)) ch.toString else "$u%04X".format(ch.toInt)))
54+
if (Chars.isValidJVMMethodChar(ch)) ch.toString else "$u%04X".format(ch.toInt)))
5555
else name
5656
}
5757

compiler/src/dotty/tools/dotc/util/SourceFile.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import scala.collection.mutable.ArrayBuffer
66
import dotty.tools.io._
77
import java.util.regex.Pattern
88
import java.io.IOException
9-
import Chars._
9+
import scala.tasty.util.Chars._
1010
import Positions._
1111
import scala.io.Codec
1212
import scala.annotation.internal.sharable

compiler/src/dotty/tools/dotc/util/Chars.scala renamed to library/src/scala/tasty/util/Chars.scala

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
/* NSC -- new Scala compiler
2-
* Copyright 2006-2012 LAMP/EPFL
3-
* @author Martin Odersky
4-
*/
5-
package dotty.tools.dotc
6-
package util
1+
package scala.tasty.util
72

83
import scala.annotation.switch
94
import java.lang.{Character => JCharacter}

library/src/scala/tasty/util/ShowSourceCode.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,7 @@ class ShowSourceCode[T <: Tasty with Singleton](tasty0: T) extends Show[T](tasty
354354
case _ =>
355355
inParens {
356356
printTree(term)
357-
this += ": "
357+
this += (if (Chars.isOperatorPart(sb.last)) " : " else ": ")
358358
def printTypeOrAnnots(tpe: Type): Unit = tpe match {
359359
case Type.AnnotatedType(tp, annot) if tp == term.tpe =>
360360
printAnnotation(annot)

tests/pos/test.sc

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
val x = 22
2+
3+
val y = x * 2
4+
def square(x: Double) = x * x
5+
square(33)
6+
7+
class Bar
8+
type L = scala.List
9+
10+
def zip[T, U](xs: List[T], ys: List[U]) = {
11+
val (ps, _) = xs.foldLeft((Nil: List[(T, U)], ys)) {
12+
(acc, x) =>
13+
val (ps, ys) = acc
14+
ys match {
15+
case Nil => acc
16+
case y :: ys => ((x, y) :: ps, ys)
17+
}
18+
}
19+
ps.reverse
20+
}
21+
zip(List(1, 2, 3, 4), List("a", "b", "c"))
22+
23+
def zips(xss: List[List[Int]]): List[List[Int]] = {
24+
if (xss.forall(_.nonEmpty))
25+
xss.map(_.head) :: zips(xss.map(_.tail))
26+
else Nil
27+
}
28+
29+
zips(
30+
List(
31+
List(1, 2, 3),
32+
List(11, 22),
33+
List(111, 222, 333, 444)
34+
))
35+
36+
abstract class A {
37+
def foo: Any
38+
}
39+
abstract class B extends A {
40+
def foo: Int
41+
}
42+
abstract class C extends A {
43+
def foo: Int
44+
}
45+
def f: A | B = ???
46+
def g = f.foo
47+
48+
49+
val xx = 22
50+
51+
trait T {
52+
def apply(x: Int): Unit = ()
53+
}
54+
class CC extends T {
55+
override def apply(x: Int) = super.apply(1)
56+
}
57+
object o {
58+
def apply(): String = ""
59+
}
60+
val s: String = o()
61+
62+
Double.NaN.equals(Double.NaN)
63+
64+
trait Status
65+
case object A extends Status
66+
case object B extends Status
67+
68+
if (true) A else B
69+
70+
case class Wrapper(i: Int)
71+
72+
trait Functor[F[_]] {
73+
def map[A, B](x: F[A], f: A => B): F[B]
74+
}
75+
76+
class Deriver[F[_]] {
77+
def foldLeft[A, B](result: A, value: B): A
78+
}
79+
80+
trait Eq[A] {
81+
def equals(x: A, y: A): Boolean
82+
}
83+
84+
trait DC { type TT }
85+
86+
def m(x: DC): x.TT = ???
87+
val meta = m

0 commit comments

Comments
 (0)