@@ -2,37 +2,46 @@ package org.scalafmt.sbt
2
2
3
3
import java .io .OutputStreamWriter
4
4
import java .io .PrintWriter
5
+ import java .io .StringWriter
5
6
import java .nio .file .Path
6
7
7
- import sbt .internal .util .MessageOnlyException
8
8
import sbt .util .Logger
9
9
10
- import scala .util .control .NoStackTrace
11
-
12
10
import org .scalafmt .interfaces .ScalafmtReporter
13
11
14
12
class ScalafmtSbtReporter (
15
13
log : Logger ,
16
14
out : OutputStreamWriter ,
17
15
detailedErrorEnabled : Boolean
18
16
) extends ScalafmtReporter {
17
+ import ScalafmtSbtReporter ._
18
+
19
19
override def error (file : Path , message : String ): Unit =
20
- throw new MessageOnlyException ( s " $ message: $file " )
20
+ error(file, message, null )
21
21
22
22
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
28
40
}
29
41
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
+ }
36
45
37
46
override def excluded (file : Path ): Unit =
38
47
log.debug(s " file excluded: $file" )
@@ -42,11 +51,11 @@ class ScalafmtSbtReporter(
42
51
43
52
override def downloadWriter (): PrintWriter = new PrintWriter (out)
44
53
override def downloadOutputStreamWriter (): OutputStreamWriter = out
54
+ }
55
+
56
+ object ScalafmtSbtReporter {
45
57
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)
49
60
50
- private class ScalafmtSbtError (file : Path , cause : Throwable )
51
- extends Exception (s " sbt-scalafmt failed on $file" , cause)
52
61
}
0 commit comments