diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2016-07-13 13:05:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-13 13:05:20 +0200 |
commit | 1bca3866b09dc0df71b1d141d22bc4fa9d97a71c (patch) | |
tree | b597091143c3d015b6b545361a9c452b73eead1d /src | |
parent | 247207d08c02f6091c024424d8ecc1d0e77f0a38 (diff) | |
parent | 0eac3cb85dd4720b015a0d060691f68b63032b85 (diff) | |
download | scala-1bca3866b09dc0df71b1d141d22bc4fa9d97a71c.tar.gz scala-1bca3866b09dc0df71b1d141d22bc4fa9d97a71c.tar.bz2 scala-1bca3866b09dc0df71b1d141d22bc4fa9d97a71c.zip |
Merge pull request #5234 from som-snytt/review/printers
Avoid triple-quoting triple quotes in printer
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/internal/Constants.scala | 3 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/Printers.scala | 30 |
2 files changed, 16 insertions, 17 deletions
diff --git a/src/reflect/scala/reflect/internal/Constants.scala b/src/reflect/scala/reflect/internal/Constants.scala index 85d0efdcba..7b47798ff7 100644 --- a/src/reflect/scala/reflect/internal/Constants.scala +++ b/src/reflect/scala/reflect/internal/Constants.scala @@ -7,7 +7,6 @@ package scala package reflect package internal -import java.lang.Integer.toOctalString import scala.annotation.switch trait Constants extends api.Constants { @@ -212,7 +211,7 @@ trait Constants extends api.Constants { case '"' => "\\\"" case '\'' => "\\\'" case '\\' => "\\\\" - case _ => if (ch.isControl) "\\0" + toOctalString(ch.toInt) else String.valueOf(ch) + case _ => if (ch.isControl) "\\u%04X".format(ch.toInt) else String.valueOf(ch) } def escapedStringValue: String = { diff --git a/src/reflect/scala/reflect/internal/Printers.scala b/src/reflect/scala/reflect/internal/Printers.scala index 37b99c4345..9602a2859b 100644 --- a/src/reflect/scala/reflect/internal/Printers.scala +++ b/src/reflect/scala/reflect/internal/Printers.scala @@ -1045,23 +1045,23 @@ trait Printers extends api.Printers { self: SymbolTable => print("") } - case l @ Literal(x) => - import Chars.LF - x match { - case Constant(v: String) if { - val strValue = x.stringValue - strValue.contains(LF) && strValue.contains("\"\"\"") && strValue.size > 1 - } => - val splitValue = x.stringValue.split(s"$LF").toList - val multilineStringValue = if (x.stringValue.endsWith(s"$LF")) splitValue :+ "" else splitValue - val trQuotes = "\"\"\"" - print(trQuotes); printSeq(multilineStringValue) { print(_) } { print(LF) }; print(trQuotes) - case _ => - // processing Float constants - val printValue = x.escapedStringValue + (if (x.value.isInstanceOf[Float]) "F" else "") - print(printValue) + case Literal(k @ Constant(s: String)) if s.contains(Chars.LF) => + val tq = "\"" * 3 + val lines = s.lines.toList + if (lines.lengthCompare(1) <= 0) print(k.escapedStringValue) + else { + val tqp = """["]{3}""".r + val tqq = """""\\"""" // ""\" is triple-quote quoted + print(tq) + printSeq(lines.map(x => tqp.replaceAllIn(x, tqq)))(print(_))(print(Chars.LF)) + print(tq) } + case Literal(x) => + // processing Float constants + val suffix = x.value match { case _: Float => "F" case _ => "" } + print(s"${x.escapedStringValue}${suffix}") + case an @ Annotated(ap, tree) => val printParentheses = needsParentheses(tree)() parenthesize(printParentheses) { print(tree) }; print(if (tree.isType) " " else ": ") |