diff options
Diffstat (limited to 'src/dotty/tools/dotc/reporting/FancyConsoleReporter.scala')
-rw-r--r-- | src/dotty/tools/dotc/reporting/FancyConsoleReporter.scala | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/src/dotty/tools/dotc/reporting/FancyConsoleReporter.scala b/src/dotty/tools/dotc/reporting/FancyConsoleReporter.scala deleted file mode 100644 index 725e69ff8..000000000 --- a/src/dotty/tools/dotc/reporting/FancyConsoleReporter.scala +++ /dev/null @@ -1,93 +0,0 @@ -package dotty.tools -package dotc -package reporting - -import scala.collection.mutable -import util.SourcePosition -import core.Contexts._ -import Reporter._ -import java.io.{ BufferedReader, IOException, PrintWriter } -import scala.reflect.internal.util._ -import printing.SyntaxHighlighting._ -import printing.Highlighting._ -import diagnostic.Message - -/** - * This class implements a more Fancy version (with colors!) of the regular - * `ConsoleReporter` - */ -class FancyConsoleReporter( - reader: BufferedReader = Console.in, - writer: PrintWriter = new PrintWriter(Console.err, true) -) extends ConsoleReporter(reader, writer) { - - def stripColor(str: String): String = - str.replaceAll("\u001B\\[[;\\d]*m", "") - - def sourceLine(pos: SourcePosition)(implicit ctx: Context): (String, Int) = { - val lineNum = s"${pos.line}:" - (lineNum + hl"${pos.lineContent.stripLineEnd}", lineNum.length) - } - - def columnMarker(pos: SourcePosition, offset: Int)(implicit ctx: Context) = - if (pos.startLine == pos.endLine) { - val whitespace = " " * (pos.column + offset) - val carets = - Red("^" * math.max(1, pos.endColumn - pos.startColumn)) - - whitespace + carets.show - } else { - Red(" " * (pos.column + offset) + "^").show - } - - def errorMsg(pos: SourcePosition, msg: String, offset: Int)(implicit ctx: Context) = { - var hasLongLines = false - val leastWhitespace = msg.lines.foldLeft(Int.MaxValue) { (minPad, line) => - val lineLength = stripColor(line).length - val padding = - math.min(math.max(0, ctx.settings.pageWidth.value - offset - lineLength), offset + pos.startColumn) - - if (padding < minPad) padding - else minPad - } - - msg - .lines - .map { line => " " * leastWhitespace + line } - .mkString(sys.props("line.separator")) - } - - def posStr(pos: SourcePosition, kind: String)(implicit ctx: Context) = - if (pos.exists) Blue({ - val file = pos.source.file.toString - - val outer = if (pos.outer.exists) { - s"This location is in code that was inlined at ${pos.outer}:\n" + - printStr(pos.outer) + "\n" + "-" * ctx.settings.pageWidth.value - } else "" - - val prefix = s"-- $kind: $file " - prefix + - ("-" * math.max(ctx.settings.pageWidth.value - stripColor(prefix).length, 0)) + - "\n" + outer - }).show else "" - - /** Prints the message with the given position indication. */ - override def printMessageAndPos(msg: Message, pos: SourcePosition, kind: String)(implicit ctx: Context): Unit = { - printMessage(posStr(pos, kind)) - if (pos.exists) { - val (src, offset) = sourceLine(pos) - val marker = columnMarker(pos, offset) - val err = errorMsg(pos, msg.msg, offset) - - printMessage(List(src, marker, err).mkString("\n")) - } else printMessage(msg.msg) - } - - override def printExplanation(m: Message)(implicit ctx: Context): Unit = { - printMessage(hl"""| - |${Blue("Explanation")} - |${Blue("===========")}""".stripMargin) - printMessage(m.explanation) - } -} |