Skip to content

Commit 9a45a8b

Browse files
committed
Respect scalafix exit code after running scalafix rules
1 parent b5cee36 commit 9a45a8b

File tree

2 files changed

+28
-21
lines changed

2 files changed

+28
-21
lines changed

modules/cli/src/main/scala/scala/cli/commands/fix/Fix.scala

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scala.cli.commands.fix
22

33
import caseapp.core.RemainingArgs
44

5+
import scala.build.EitherCps.{either, value}
56
import scala.build.Ops.EitherMap2
67
import scala.build.errors.{BuildException, CompositeBuildException}
78
import scala.build.input.*
@@ -34,25 +35,30 @@ object Fix extends ScalaCommand[FixOptions] {
3435
)
3536
logger.message("Built-in rules completed.")
3637
}
37-
if options.enableScalafix then {
38-
logger.message("Running scalafix rules...")
39-
val threads = BuildThreads.create()
40-
val compilerMaker = options.shared.compilerMaker(threads)
41-
val workspace: os.Path = if args.all.isEmpty then os.pwd else inputs.workspace
42-
val actionableDiagnosticsEnabled = options.shared.logging.verbosityOptions.actions
43-
.orElse(configDb.get(Keys.actions).getOrElse(None))
44-
ScalafixRules.runRules(
45-
buildOptions = buildOptionsOrExit(options),
46-
scalafixOptions = options.scalafix,
47-
inputs = inputs,
48-
check = options.check,
49-
compilerMaker = compilerMaker,
50-
actionableDiagnostics = actionableDiagnosticsEnabled,
51-
workspace = workspace,
52-
logger = logger
53-
)
54-
logger.message("scalafix rules completed.")
55-
}
38+
if options.enableScalafix then
39+
either {
40+
logger.message("Running scalafix rules...")
41+
val threads = BuildThreads.create()
42+
val compilerMaker = options.shared.compilerMaker(threads)
43+
val workspace: os.Path = if args.all.isEmpty then os.pwd else inputs.workspace
44+
val actionableDiagnosticsEnabled = options.shared.logging.verbosityOptions.actions
45+
.orElse(configDb.get(Keys.actions).getOrElse(None))
46+
val scalafixExitCode: Int = value {
47+
ScalafixRules.runRules(
48+
buildOptions = buildOptionsOrExit(options),
49+
scalafixOptions = options.scalafix,
50+
inputs = inputs,
51+
check = options.check,
52+
compilerMaker = compilerMaker,
53+
actionableDiagnostics = actionableDiagnosticsEnabled,
54+
workspace = workspace,
55+
logger = logger
56+
)
57+
}
58+
if scalafixExitCode != 1 then logger.message("scalafix rules completed.")
59+
else logger.error("scalafix rules failed.")
60+
sys.exit(scalafixExitCode)
61+
}
5662
}
5763
else logger.message("No rules were enabled. Did you disable everything intentionally?")
5864
}

modules/cli/src/main/scala/scala/cli/commands/fix/ScalafixRules.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import java.io.File
77

88
import scala.build.EitherCps.{either, value}
99
import scala.build.compiler.ScalaCompilerMaker
10+
import scala.build.errors.BuildException
1011
import scala.build.input.{Inputs, ScalaCliInvokeData}
1112
import scala.build.internal.{Constants, Runner}
1213
import scala.build.options.{BuildOptions, Scope}
@@ -26,7 +27,7 @@ object ScalafixRules extends CommandHelpers {
2627
check: Boolean,
2728
actionableDiagnostics: Option[Boolean],
2829
logger: Logger
29-
)(using ScalaCliInvokeData): Unit = {
30+
)(using ScalaCliInvokeData): Either[BuildException, Int] = {
3031
val buildOptionsWithSemanticDb = buildOptions.copy(scalaOptions =
3132
buildOptions.scalaOptions.copy(semanticDbOptions =
3233
buildOptions.scalaOptions.semanticDbOptions.copy(generateSemanticDbs = Some(true))
@@ -95,7 +96,7 @@ object ScalafixRules extends CommandHelpers {
9596
allowExecve = true
9697
)
9798

98-
sys.exit(proc.waitFor())
99+
proc.waitFor()
99100
}
100101

101102
}

0 commit comments

Comments
 (0)