Skip to content

Commit 8f1e56c

Browse files
Extract the common bits of runSourcesMigration and runBuildMigration into runSbtScalafix
1 parent cf82b87 commit 8f1e56c

File tree

2 files changed

+53
-46
lines changed

2 files changed

+53
-46
lines changed

modules/core/src/main/scala/org/scalasteward/core/buildtool/sbt/SbtAlg.scala

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.scalasteward.core.buildtool.sbt
1818

1919
import better.files.File
20-
import cats.data.OptionT
20+
import cats.data.{NonEmptyList, OptionT}
2121
import cats.effect.{Concurrent, Resource}
2222
import cats.syntax.all._
2323
import org.scalasteward.core.application.Config
@@ -107,22 +107,17 @@ final class SbtAlg[F[_]](config: Config)(implicit
107107
}
108108

109109
private def runSourcesMigration(buildRoot: BuildRoot, migration: ScalafixMigration): F[Unit] =
110-
OptionT(latestSbtScalafixVersion).foreachF { pluginVersion =>
111-
workspaceAlg.buildRootDir(buildRoot).flatMap { buildRootDir =>
112-
val plugin = scalaStewardSbtScalafix(pluginVersion)
113-
fileAlg.createTemporarily(buildRootDir / project, plugin).surround {
114-
val withScalacOptions = migration.scalacOptions.fold(Resource.unit[F]) { opts =>
115-
val options = scalaStewardScalafixOptions(opts.toList)
116-
fileAlg.createTemporarily(buildRootDir, options)
117-
}
118-
withScalacOptions.surround {
119-
val scalafixCmds = migration.rewriteRules.map(rule => s"$scalafixAll $rule").toList
120-
val slurpOptions = SlurpOptions.ignoreBufferOverflow
121-
sbt(Nel(scalafixEnable, scalafixCmds), buildRootDir, slurpOptions).void
122-
}
123-
}
124-
}
125-
}
110+
for {
111+
buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
112+
_ <- runSbtScalafix(buildRootDir, migration, metaBuilds = 0, startDepth = 0)
113+
} yield ()
114+
115+
private def runBuildMigration(buildRoot: BuildRoot, migration: ScalafixMigration): F[Unit] =
116+
for {
117+
buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
118+
metaBuilds <- metaBuildsCount(buildRootDir)
119+
_ <- runSbtScalafix(buildRootDir, migration, metaBuilds, startDepth = 1)
120+
} yield ()
126121

127122
private def latestSbtScalafixVersion: F[Option[Version]] =
128123
versionsCache
@@ -132,48 +127,60 @@ final class SbtAlg[F[_]](config: Config)(implicit
132127
private def addScalafixPluginTemporarily(
133128
buildRootDir: File,
134129
pluginVersion: Version,
135-
metaBuilds: Int
130+
metaBuilds: Int,
131+
startDepth: Int
136132
): Resource[F, Unit] = {
133+
val buildsDepth = metaBuilds + startDepth
137134
val plugin = scalaStewardSbtScalafix(pluginVersion)
138135
List
139-
.iterate(buildRootDir / project / project, metaBuilds + 1)(_ / project)
136+
.iterate(buildRootDir / project, buildsDepth + 1)(_ / project)
137+
.drop(startDepth)
140138
.collectFold(fileAlg.createTemporarily(_, plugin))
141139
}
142140

143141
private def addScalacOptionsTemporarily(
144142
buildRootDir: File,
145143
scalacOptions: Option[Nel[String]],
146-
metaBuilds: Int
144+
metaBuilds: Int,
145+
startDepth: Int
147146
): Resource[F, Unit] =
148147
scalacOptions.fold(Resource.unit[F]) { opts =>
148+
val buildsDepth = metaBuilds + startDepth
149149
val options = scalaStewardScalafixOptions(opts.toList)
150150
List
151-
.iterate(buildRootDir / project, metaBuilds + 1)(_ / project)
151+
.iterate(buildRootDir, buildsDepth + 1)(_ / project)
152+
.drop(startDepth)
152153
.collectFold(fileAlg.createTemporarily(_, options))
153154
}
154155

155-
private def runBuildMigration(buildRoot: BuildRoot, migration: ScalafixMigration): F[Unit] =
156+
private def runSbtScalafix(
157+
buildRootDir: File,
158+
migration: ScalafixMigration,
159+
metaBuilds: Int,
160+
startDepth: Int
161+
): F[Unit] =
156162
OptionT(latestSbtScalafixVersion).foreachF { pluginVersion =>
157-
for {
158-
buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
159-
metaBuilds <- metaBuildsCount(buildRootDir)
160-
_ <- addScalafixPluginTemporarily(buildRootDir, pluginVersion, metaBuilds).surround {
161-
addScalacOptionsTemporarily(buildRootDir, migration.scalacOptions, metaBuilds).surround {
162-
val scalafixCmds = migration.rewriteRules.map(rule => s"$scalafixAll $rule").toList
163-
val slurpOptions = SlurpOptions.ignoreBufferOverflow
164-
val commands = Nel.fromList(
165-
List.fill(metaBuilds + 1)(List(reloadPlugins, scalafixEnable) ++ scalafixCmds).flatten
166-
)
167-
commands.fold(F.unit) { cmds =>
168-
sbt(
169-
cmds,
170-
buildRootDir,
171-
slurpOptions
172-
).void
163+
addScalafixPluginTemporarily(buildRootDir, pluginVersion, metaBuilds, startDepth)
164+
.surround {
165+
addScalacOptionsTemporarily(buildRootDir, migration.scalacOptions, metaBuilds, startDepth)
166+
.surround {
167+
val scalafixCmds = migration.rewriteRules.map(rule => s"$scalafixAll $rule").toList
168+
val slurpOptions = SlurpOptions.ignoreBufferOverflow
169+
val buildsDepth = metaBuilds + startDepth
170+
val scalafixCommands = scalafixEnable :: scalafixCmds
171+
val commandLists =
172+
(scalafixCommands :: List.fill(buildsDepth)(reloadPlugins :: scalafixCommands))
173+
.drop(startDepth)
174+
val commands = NonEmptyList.fromList(commandLists.flatten)
175+
commands.fold(F.unit) { cmds =>
176+
sbt(
177+
cmds,
178+
buildRootDir,
179+
slurpOptions
180+
).void
181+
}
173182
}
174-
}
175183
}
176-
} yield ()
177184
}
178185

179186
private def sbt(

modules/core/src/test/scala/org/scalasteward/core/buildtool/sbt/SbtAlgTest.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,11 @@ class SbtAlgTest extends FunSuite {
144144
val state = sbtAlg.runMigration(buildRoot, migration).runS(initialState).unsafeRunSync()
145145
val expected = initialState.copy(
146146
trace = Vector(
147+
Cmd("test", "-d", s"$repoDir/project"),
147148
Cmd(
148149
"read",
149150
s"$workspace/store/versions/v2/https/repo1.maven.org/maven2/ch/epfl/scala/sbt-scalafix_2.12_1.0/versions.json"
150151
),
151-
Cmd("test", "-d", s"$repoDir/project"),
152152
Cmd("write", s"$repoDir/project/project/scala-steward-sbt-scalafix.sbt"),
153153
Cmd.execSandboxed(
154154
repoDir,
@@ -185,12 +185,12 @@ class SbtAlgTest extends FunSuite {
185185
val state = sbtAlg.runMigration(buildRoot, migration).runS(initialState).unsafeRunSync()
186186
val expected = initialState.copy(
187187
trace = Vector(
188+
Cmd("test", "-d", s"$repoDir/project"),
189+
Cmd("test", "-d", s"$repoDir/project/project"),
188190
Cmd(
189191
"read",
190192
s"$workspace/store/versions/v2/https/repo1.maven.org/maven2/ch/epfl/scala/sbt-scalafix_2.12_1.0/versions.json"
191193
),
192-
Cmd("test", "-d", s"$repoDir/project"),
193-
Cmd("test", "-d", s"$repoDir/project/project"),
194194
Cmd("write", s"$repoDir/project/project/scala-steward-sbt-scalafix.sbt"),
195195
Cmd("write", s"$repoDir/project/project/project/scala-steward-sbt-scalafix.sbt"),
196196
Cmd.execSandboxed(
@@ -230,11 +230,11 @@ class SbtAlgTest extends FunSuite {
230230
val state = sbtAlg.runMigration(buildRoot, migration).runS(initialState).unsafeRunSync()
231231
val expected = initialState.copy(
232232
trace = Vector(
233+
Cmd("test", "-d", s"$repoDir/project"),
233234
Cmd(
234235
"read",
235236
s"$workspace/store/versions/v2/https/repo1.maven.org/maven2/ch/epfl/scala/sbt-scalafix_2.12_1.0/versions.json"
236237
),
237-
Cmd("test", "-d", s"$repoDir/project"),
238238
Cmd("write", s"$repoDir/project/project/scala-steward-sbt-scalafix.sbt"),
239239
Cmd("write", s"$repoDir/project/scala-steward-scalafix-options.sbt"),
240240
Cmd.execSandboxed(
@@ -274,12 +274,12 @@ class SbtAlgTest extends FunSuite {
274274
val state = sbtAlg.runMigration(buildRoot, migration).runS(initialState).unsafeRunSync()
275275
val expected = initialState.copy(
276276
trace = Vector(
277+
Cmd("test", "-d", s"$repoDir/project"),
278+
Cmd("test", "-d", s"$repoDir/project/project"),
277279
Cmd(
278280
"read",
279281
s"$workspace/store/versions/v2/https/repo1.maven.org/maven2/ch/epfl/scala/sbt-scalafix_2.12_1.0/versions.json"
280282
),
281-
Cmd("test", "-d", s"$repoDir/project"),
282-
Cmd("test", "-d", s"$repoDir/project/project"),
283283
Cmd("write", s"$repoDir/project/project/scala-steward-sbt-scalafix.sbt"),
284284
Cmd("write", s"$repoDir/project/project/project/scala-steward-sbt-scalafix.sbt"),
285285
Cmd("write", s"$repoDir/project/scala-steward-scalafix-options.sbt"),

0 commit comments

Comments
 (0)