summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/util/Position.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2014-01-13 17:03:20 -0800
committerSom Snytt <som.snytt@gmail.com>2014-01-13 17:03:20 -0800
commitf606d8176e57fbb61495b693bf3cd4e77373fcfb (patch)
treedfcff3e28d99b13a9335f9bcef592ac6b296127a /src/reflect/scala/reflect/internal/util/Position.scala
parent2c8a8ff6ba29be8d21845c272157ded07acc67d8 (diff)
downloadscala-f606d8176e57fbb61495b693bf3cd4e77373fcfb.tar.gz
scala-f606d8176e57fbb61495b693bf3cd4e77373fcfb.tar.bz2
scala-f606d8176e57fbb61495b693bf3cd4e77373fcfb.zip
SI-8015 Refactor per code review
Make an obscure private def local and rename it usefully. If you really must have similar functions in the API (to detect line breaks and EOL), at least make them DRY.
Diffstat (limited to 'src/reflect/scala/reflect/internal/util/Position.scala')
-rw-r--r--src/reflect/scala/reflect/internal/util/Position.scala34
1 files changed, 21 insertions, 13 deletions
diff --git a/src/reflect/scala/reflect/internal/util/Position.scala b/src/reflect/scala/reflect/internal/util/Position.scala
index bcf637b558..4032ec1157 100644
--- a/src/reflect/scala/reflect/internal/util/Position.scala
+++ b/src/reflect/scala/reflect/internal/util/Position.scala
@@ -206,19 +206,27 @@ private[util] trait InternalPositionImpl {
@deprecated("use `lineCaret`", since="2.11.0")
def lineCarat: String = lineCaret
- def showError(msg: String): String = finalPosition match {
- case FakePos(fmsg) => s"$fmsg $msg"
- case NoPosition => msg
- case pos => f"${pos.line}: $msg%n${u(pos.lineContent)}%n${pos.lineCaret}"
- }
- private def u(s: String) = {
- def uu(c: Int) = f"\\u$c%04x"
- def uable(c: Int) = (c < 0x20 && c != '\t') || c == 0x7F
- if (s exists (c => uable(c))) {
- val sb = new StringBuilder
- s foreach (c => sb append (if (uable(c)) uu(c) else c))
- sb.toString
- } else s
+ def showError(msg: String): String = {
+ def escaped(s: String) = {
+ def u(c: Int) = f"\\u$c%04x"
+ def uable(c: Int) = (c < 0x20 && c != '\t') || c == 0x7F
+ if (s exists (c => uable(c))) {
+ val sb = new StringBuilder
+ s foreach (c => sb append (if (uable(c)) u(c) else c))
+ sb.toString
+ } else s
+ }
+ def errorAt(p: Pos) = {
+ def where = p.line
+ def content = escaped(p.lineContent)
+ def indicator = p.lineCaret
+ f"$where: $msg%n$content%n$indicator"
+ }
+ finalPosition match {
+ case FakePos(fmsg) => s"$fmsg $msg"
+ case NoPosition => msg
+ case pos => errorAt(pos)
+ }
}
def showDebug: String = toString
def show = (