Skip to content

Commit 48995db

Browse files
muhammedbehramMuhammed Behram
andauthored
add detailed error config (#71) (#142)
* add detailed error config (#71) * alter name of detailed error config (#71) * fix compilation errors and format changes (#71) Co-authored-by: Muhammed Behram <muhammed.behram@cimri.com>
1 parent 27777fa commit 48995db

2 files changed

Lines changed: 76 additions & 25 deletions

File tree

plugin/src/main/scala/org/scalafmt/sbt/ScalafmtPlugin.scala

Lines changed: 63 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ object ScalafmtPlugin extends AutoPlugin {
6262
"Execute the scalafmtCheck task for all configurations in which it is enabled. " +
6363
"(By default this means the Compile and Test configurations.)"
6464
)
65+
val scalafmtDetailedError =
66+
settingKey[Boolean](
67+
"Enables logging of detailed errors with stacktraces, disabled by default"
68+
)
6569
}
6670

6771
import autoImport._
@@ -100,11 +104,12 @@ object ScalafmtPlugin extends AutoPlugin {
100104
config: Path,
101105
log: Logger,
102106
writer: OutputStreamWriter,
103-
resolvers: Seq[Resolver]
107+
resolvers: Seq[Resolver],
108+
detailedErrorEnabled: Boolean
104109
)(
105110
onFormat: (File, Input, Output) => T
106111
): Seq[Option[T]] = {
107-
val reporter = new ScalafmtSbtReporter(log, writer)
112+
val reporter = new ScalafmtSbtReporter(log, writer, detailedErrorEnabled)
108113
val repositories = resolvers.collect {
109114
case r: MavenRepository => r.root
110115
}
@@ -147,7 +152,8 @@ object ScalafmtPlugin extends AutoPlugin {
147152
config: Path,
148153
log: Logger,
149154
writer: OutputStreamWriter,
150-
resolvers: Seq[Resolver]
155+
resolvers: Seq[Resolver],
156+
detailedErrorEnabled: Boolean
151157
): Unit = {
152158
trackSourcesAndConfig(cacheStoreFactory, sources, config) {
153159
(outDiff, configChanged, prev) =>
@@ -162,7 +168,14 @@ object ScalafmtPlugin extends AutoPlugin {
162168
}
163169
if (filesToFormat.nonEmpty) {
164170
log.info(s"Formatting ${filesToFormat.size} Scala sources...")
165-
formatSources(filesToFormat, config, log, writer, resolvers)
171+
formatSources(
172+
filesToFormat,
173+
config,
174+
log,
175+
writer,
176+
resolvers,
177+
detailedErrorEnabled
178+
)
166179
}
167180
ScalafmtAnalysis(Set.empty)
168181
}
@@ -173,10 +186,18 @@ object ScalafmtPlugin extends AutoPlugin {
173186
config: Path,
174187
log: Logger,
175188
writer: OutputStreamWriter,
176-
resolvers: Seq[Resolver]
189+
resolvers: Seq[Resolver],
190+
detailedErrorEnabled: Boolean
177191
): Unit = {
178192
val cnt =
179-
withFormattedSources(sources.toSeq, config, log, writer, resolvers)(
193+
withFormattedSources(
194+
sources.toSeq,
195+
config,
196+
log,
197+
writer,
198+
resolvers,
199+
detailedErrorEnabled
200+
)(
180201
(file, input, output) => {
181202
if (input != output) {
182203
IO.write(file, output)
@@ -199,7 +220,8 @@ object ScalafmtPlugin extends AutoPlugin {
199220
config: Path,
200221
log: Logger,
201222
writer: OutputStreamWriter,
202-
resolvers: Seq[Resolver]
223+
resolvers: Seq[Resolver],
224+
detailedErrorEnabled: Boolean
203225
): ScalafmtAnalysis = {
204226
trackSourcesAndConfig(cacheStoreFactory, sources, config) {
205227
(outDiff, configChanged, prev) =>
@@ -213,7 +235,14 @@ object ScalafmtPlugin extends AutoPlugin {
213235
else prev.failedScalafmtCheck & outDiff.unmodified
214236
prevFailed foreach { warnBadFormat(_, log) }
215237
val result =
216-
checkSources(filesToCheck.toSeq, config, log, writer, resolvers)
238+
checkSources(
239+
filesToCheck.toSeq,
240+
config,
241+
log,
242+
writer,
243+
resolvers,
244+
detailedErrorEnabled
245+
)
217246
prev.copy(
218247
failedScalafmtCheck = result.failedScalafmtCheck | prevFailed
219248
)
@@ -239,13 +268,21 @@ object ScalafmtPlugin extends AutoPlugin {
239268
config: Path,
240269
log: Logger,
241270
writer: OutputStreamWriter,
242-
resolvers: Seq[Resolver]
271+
resolvers: Seq[Resolver],
272+
detailedErrorEnabled: Boolean
243273
): ScalafmtAnalysis = {
244274
if (sources.nonEmpty) {
245275
log.info(s"Checking ${sources.size} Scala sources...")
246276
}
247277
val unformatted =
248-
withFormattedSources(sources, config, log, writer, resolvers)(
278+
withFormattedSources(
279+
sources,
280+
config,
281+
log,
282+
writer,
283+
resolvers,
284+
detailedErrorEnabled
285+
)(
249286
(file, input, output) => {
250287
val diff = input != output
251288
if (diff) {
@@ -330,7 +367,8 @@ object ScalafmtPlugin extends AutoPlugin {
330367
scalaConfig.value,
331368
streams.value.log,
332369
outputStreamWriter(streams.value),
333-
fullResolvers.value
370+
fullResolvers.value,
371+
scalafmtDetailedError.value
334372
)
335373
} tag (ScalafmtTagPack: _*)
336374

@@ -341,14 +379,16 @@ object ScalafmtPlugin extends AutoPlugin {
341379
sbtConfig.value,
342380
streams.value.log,
343381
outputStreamWriter(streams.value),
344-
fullResolvers.value
382+
fullResolvers.value,
383+
scalafmtDetailedError.value
345384
)
346385
formatSources(
347386
metabuildSources.value.toSet,
348387
scalaConfig.value,
349388
streams.value.log,
350389
outputStreamWriter(streams.value),
351-
fullResolvers.value
390+
fullResolvers.value,
391+
scalafmtDetailedError.value
352392
)
353393
} tag (ScalafmtTagPack: _*)
354394

@@ -360,7 +400,8 @@ object ScalafmtPlugin extends AutoPlugin {
360400
scalaConfig.value,
361401
streams.value.log,
362402
outputStreamWriter(streams.value),
363-
fullResolvers.value
403+
fullResolvers.value,
404+
scalafmtDetailedError.value
364405
)
365406
trueOrBoom(analysis)
366407
} tag (ScalafmtTagPack: _*)
@@ -373,7 +414,8 @@ object ScalafmtPlugin extends AutoPlugin {
373414
sbtConfig.value,
374415
streams.value.log,
375416
outputStreamWriter(streams.value),
376-
fullResolvers.value
417+
fullResolvers.value,
418+
scalafmtDetailedError.value
377419
)
378420
)
379421
trueOrBoom(
@@ -382,7 +424,8 @@ object ScalafmtPlugin extends AutoPlugin {
382424
scalaConfig.value,
383425
streams.value.log,
384426
outputStreamWriter(streams.value),
385-
fullResolvers.value
427+
fullResolvers.value,
428+
scalafmtDetailedError.value
386429
)
387430
)
388431
} tag (ScalafmtTagPack: _*)
@@ -420,7 +463,8 @@ object ScalafmtPlugin extends AutoPlugin {
420463
scalaConfig.value,
421464
streams.value.log,
422465
outputStreamWriter(streams.value),
423-
fullResolvers.value
466+
fullResolvers.value,
467+
scalafmtDetailedError.value
424468
)
425469
}
426470
)
@@ -446,7 +490,8 @@ object ScalafmtPlugin extends AutoPlugin {
446490

447491
override def globalSettings: Seq[Def.Setting[_]] =
448492
Seq(
449-
scalafmtOnCompile := false
493+
scalafmtOnCompile := false,
494+
scalafmtDetailedError := false
450495
)
451496

452497
}

plugin/src/main/scala/org/scalafmt/sbt/ScalafmtSbtReporter.scala

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,27 @@ package org.scalafmt.sbt
33
import java.io.PrintWriter
44
import java.io.OutputStreamWriter
55
import java.nio.file.Path
6-
76
import org.scalafmt.interfaces.ScalafmtReporter
87
import sbt.internal.util.MessageOnlyException
98
import sbt.util.Logger
109

1110
import scala.util.control.NoStackTrace
1211

13-
class ScalafmtSbtReporter(log: Logger, out: OutputStreamWriter)
14-
extends ScalafmtReporter {
12+
class ScalafmtSbtReporter(
13+
log: Logger,
14+
out: OutputStreamWriter,
15+
detailedErrorEnabled: Boolean
16+
) extends ScalafmtReporter {
1517
override def error(file: Path, message: String): Unit = {
1618
throw new MessageOnlyException(s"$message: $file")
1719
}
1820

1921
override def error(file: Path, e: Throwable): Unit = {
20-
if (e.getMessage != null) {
21-
error(file, e.getMessage)
22-
} else {
23-
throw new FailedToFormat(file.toString, e)
22+
Option(e.getMessage) match {
23+
case Some(_) if detailedErrorEnabled =>
24+
throw new ScalafmtSbtError(file, e)
25+
case Some(_) => error(file, e.getMessage)
26+
case None => throw new FailedToFormat(file.toString, e)
2427
}
2528
}
2629

@@ -44,4 +47,7 @@ class ScalafmtSbtReporter(log: Logger, out: OutputStreamWriter)
4447
private class FailedToFormat(filename: String, cause: Throwable)
4548
extends Exception(filename, cause)
4649
with NoStackTrace
50+
51+
private class ScalafmtSbtError(file: Path, cause: Throwable)
52+
extends Exception(s"sbt-scalafmt failed on $file", cause)
4753
}

0 commit comments

Comments
 (0)