diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-06-16 09:52:20 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2016-06-16 09:52:20 -0700 |
commit | 14d3b9e7062662ae55cca02ad653a68aa6aef78d (patch) | |
tree | c396cd90b9730138f132ee220a57bb138095d9ca /src | |
parent | 8eaa53d57c8d3346e03ccde7b7d4c4c8103d9253 (diff) | |
download | scala-14d3b9e7062662ae55cca02ad653a68aa6aef78d.tar.gz scala-14d3b9e7062662ae55cca02ad653a68aa6aef78d.tar.bz2 scala-14d3b9e7062662ae55cca02ad653a68aa6aef78d.zip |
Refactor triple quote quoting
To quote a triple quote, only quote one quote.
Refactors the code for legibility.
Adds test for other inline cruft like control chars.
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/internal/Printers.scala | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/reflect/scala/reflect/internal/Printers.scala b/src/reflect/scala/reflect/internal/Printers.scala index 4ad34ff8c7..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 ": ") |