@@ -2,37 +2,46 @@ package org.scalafmt.sbt
22
33import java .io .OutputStreamWriter
44import java .io .PrintWriter
5+ import java .io .StringWriter
56import java .nio .file .Path
67
7- import sbt .internal .util .MessageOnlyException
88import sbt .util .Logger
99
10- import scala .util .control .NoStackTrace
11-
1210import org .scalafmt .interfaces .ScalafmtReporter
1311
1412class ScalafmtSbtReporter (
1513 log : Logger ,
1614 out : OutputStreamWriter ,
1715 detailedErrorEnabled : Boolean
1816) extends ScalafmtReporter {
17+ import ScalafmtSbtReporter ._
18+
1919 override def error (file : Path , message : String ): Unit =
20- throw new MessageOnlyException ( s " $ message: $file " )
20+ error(file, message, null )
2121
2222 override def error (file : Path , e : Throwable ): Unit =
23- Option (e.getMessage) match {
24- case Some (_) if detailedErrorEnabled =>
25- throw new ScalafmtSbtError (file, e)
26- case Some (_) => error(file, e.getMessage)
27- case None => throw new FailedToFormat (file.toString, e)
23+ error(file, null , e)
24+
25+ override def error (file : Path , message : String , e : Throwable ): Unit = {
26+ def getMessage () = {
27+ val res = new StringWriter ()
28+ res.write(Option (message).getOrElse(" failed" ))
29+ res.write(" [" )
30+ res.write(file.toString)
31+ res.write(']' )
32+ if (null != e) {
33+ if (! detailedErrorEnabled)
34+ Option (e.getMessage).foreach { x =>
35+ res.write(" " )
36+ res.write(x)
37+ }
38+ }
39+ res.toString
2840 }
2941
30- override def error (file : Path , message : String , e : Throwable ): Unit =
31- if (e.getMessage != null ) {
32- error(file, s " $message: ${e.getMessage()}" )
33- } else {
34- throw new FailedToFormat (file.toString, e)
35- }
42+ val cause = if (detailedErrorEnabled) e else null
43+ throw new ScalafmtSbtError (getMessage(), cause)
44+ }
3645
3746 override def excluded (file : Path ): Unit =
3847 log.debug(s " file excluded: $file" )
@@ -42,11 +51,11 @@ class ScalafmtSbtReporter(
4251
4352 override def downloadWriter (): PrintWriter = new PrintWriter (out)
4453 override def downloadOutputStreamWriter (): OutputStreamWriter = out
54+ }
55+
56+ object ScalafmtSbtReporter {
4557
46- private class FailedToFormat (filename : String , cause : Throwable )
47- extends Exception (filename, cause)
48- with NoStackTrace
58+ private class ScalafmtSbtError (message : String , cause : Throwable )
59+ extends RuntimeException (message, cause)
4960
50- private class ScalafmtSbtError (file : Path , cause : Throwable )
51- extends Exception (s " sbt-scalafmt failed on $file" , cause)
5261}
0 commit comments