mirror of https://github.com/sbt/sbt.git
30 lines
849 B
Scala
30 lines
849 B
Scala
package sbt.complete
|
|
|
|
object ProcessError
|
|
{
|
|
def apply(command: String, msgs: Seq[String], index: Int): String =
|
|
{
|
|
val (line, modIndex) = extractLine(command, index)
|
|
val point = pointerSpace(command, modIndex)
|
|
msgs.mkString("\n") + "\n" + line + "\n" + point + "^"
|
|
}
|
|
def extractLine(s: String, i: Int): (String, Int) =
|
|
{
|
|
val notNewline = (c: Char) => c != '\n' && c != '\r'
|
|
val left = takeRightWhile( s.substring(0, i) )( notNewline )
|
|
val right = s substring i takeWhile notNewline
|
|
(left + right, left.length)
|
|
}
|
|
def takeRightWhile(s: String)(pred: Char => Boolean): String =
|
|
{
|
|
def loop(i: Int): String =
|
|
if(i < 0)
|
|
s
|
|
else if( pred(s(i)) )
|
|
loop(i-1)
|
|
else
|
|
s.substring(i+1)
|
|
loop(s.length - 1)
|
|
}
|
|
def pointerSpace(s: String, i: Int): String = (s take i) map { case '\t' => '\t'; case _ => ' ' } mkString;
|
|
} |