@@ -25,16 +25,14 @@ import org.scalasteward.core.buildtool.BuildToolAlg
2525import org .scalasteward .core .buildtool .sbt .command ._
2626import org .scalasteward .core .buildtool .sbt .data .SbtVersion
2727import org .scalasteward .core .coursier .VersionsCache
28- import org .scalasteward .core .data .{Dependency , Scope }
28+ import org .scalasteward .core .data .{Dependency , Scope , Version }
2929import org .scalasteward .core .edit .scalafix .{ScalafixCli , ScalafixMigration }
30- import org .scalasteward .core .io .{FileAlg , FileData , ProcessAlg , WorkspaceAlg }
30+ import org .scalasteward .core .io .{FileAlg , ProcessAlg , WorkspaceAlg }
3131import org .scalasteward .core .util .Nel
3232import org .scalasteward .core .vcs .data .BuildRoot
33- import org .typelevel .log4cats .Logger
3433
3534final class SbtAlg [F [_]](config : Config )(implicit
3635 fileAlg : FileAlg [F ],
37- logger : Logger [F ],
3836 processAlg : ProcessAlg [F ],
3937 scalafixCli : ScalafixCli [F ],
4038 workspaceAlg : WorkspaceAlg [F ],
@@ -44,17 +42,6 @@ final class SbtAlg[F[_]](config: Config)(implicit
4442 private def getSbtDependency (buildRoot : BuildRoot ): F [Option [Dependency ]] =
4543 OptionT (getSbtVersion(buildRoot)).subflatMap(sbtDependency).value
4644
47- private def addGlobalPluginTemporarily (plugin : FileData ): Resource [F , Unit ] =
48- Resource .eval(sbtDir).flatMap { dir =>
49- List (" 0.13" , " 1.0" ).traverse_ { version =>
50- fileAlg.createTemporarily(dir / version / " plugins" / plugin.name, plugin.content)
51- }
52- }
53-
54- def addGlobalPlugins : Resource [F , Unit ] =
55- Resource .eval(logger.info(" Add global sbt plugins" )) >>
56- Resource .eval(stewardPlugin).flatMap(addGlobalPluginTemporarily)
57-
5845 override def containsBuild (buildRoot : BuildRoot ): F [Boolean ] =
5946 workspaceAlg
6047 .buildRootDir(buildRoot)
@@ -63,18 +50,28 @@ final class SbtAlg[F[_]](config: Config)(implicit
6350 private def getSbtVersion (buildRoot : BuildRoot ): F [Option [SbtVersion ]] =
6451 for {
6552 buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
66- maybeProperties <- fileAlg.readFile(buildRootDir / " project" / " build.properties" )
53+ maybeProperties <- fileAlg.readFile(buildRootDir / project / " build.properties" )
6754 version = maybeProperties.flatMap(parser.parseBuildProperties)
6855 } yield version
6956
7057 override def getDependencies (buildRoot : BuildRoot ): F [List [Scope .Dependencies ]] =
58+ addStewardPluginTemporarily(buildRoot).surround {
59+ for {
60+ buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
61+ commands = Nel .of(crossStewardDependencies, reloadPlugins, stewardDependencies)
62+ lines <- sbt(commands, buildRootDir)
63+ dependencies = parser.parseDependencies(lines)
64+ additionalDependencies <- getAdditionalDependencies(buildRoot)
65+ } yield additionalDependencies ::: dependencies
66+ }
67+
68+ private def addStewardPluginTemporarily (buildRoot : BuildRoot ): Resource [F , Unit ] =
7169 for {
72- buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
73- commands = Nel .of(crossStewardDependencies, reloadPlugins, stewardDependencies)
74- lines <- sbt(commands, buildRootDir)
75- dependencies = parser.parseDependencies(lines)
76- additionalDependencies <- getAdditionalDependencies(buildRoot)
77- } yield additionalDependencies ::: dependencies
70+ buildRootDir <- Resource .eval(workspaceAlg.buildRootDir(buildRoot))
71+ plugin <- Resource .eval(stewardPlugin[F ])
72+ _ <- fileAlg.createTemporarily(buildRootDir / project, plugin)
73+ _ <- fileAlg.createTemporarily(buildRootDir / project / project, plugin)
74+ } yield ()
7875
7976 override def runMigration (buildRoot : BuildRoot , migration : ScalafixMigration ): F [Unit ] =
8077 migration.targetOrDefault match {
@@ -83,31 +80,29 @@ final class SbtAlg[F[_]](config: Config)(implicit
8380 }
8481
8582 private def runSourcesMigration (buildRoot : BuildRoot , migration : ScalafixMigration ): F [Unit ] =
86- sbtScalaFixPluginVersion .foreachF { pluginVersion =>
87- addGlobalPluginTemporarily(scalaStewardScalafixSbt(pluginVersion)).surround {
88- workspaceAlg.buildRootDir(buildRoot).flatMap { buildRootDir =>
89- val withScalacOptions =
90- migration.scalacOptions.fold(Resource .unit[F ]) { opts =>
91- val file = scalaStewardScalafixOptions(opts.toList)
92- fileAlg.createTemporarily(buildRootDir / file.name, file.content )
93- }
83+ OptionT (latestSbtScalafixVersion) .foreachF { pluginVersion =>
84+ workspaceAlg.buildRootDir(buildRoot).flatMap { buildRootDir =>
85+ val plugin = scalaStewardSbtScalafix(pluginVersion)
86+ fileAlg.createTemporarily(buildRootDir / project, plugin).surround {
87+ val withScalacOptions = migration.scalacOptions.fold(Resource .unit[F ]) { opts =>
88+ val options = scalaStewardScalafixOptions(opts.toList)
89+ fileAlg.createTemporarily(buildRootDir, options )
90+ }
9491 val scalafixCmds = migration.rewriteRules.map(rule => s " $scalafixAll $rule" ).toList
9592 withScalacOptions.surround(sbt(Nel (scalafixEnable, scalafixCmds), buildRootDir).void)
9693 }
9794 }
9895 }
9996
100- private def sbtScalaFixPluginVersion : OptionT [F , String ] =
101- OptionT (
102- versionsCache
103- .getVersions(Scope (sbtScalaFixDependency, List (config.defaultResolver)), None )
104- .map(_.lastOption.map(_.value))
105- )
97+ private def latestSbtScalafixVersion : F [Option [Version ]] =
98+ versionsCache
99+ .getVersions(Scope (sbtScalafixDependency, List (config.defaultResolver)), None )
100+ .map(_.lastOption)
106101
107102 private def runBuildMigration (buildRoot : BuildRoot , migration : ScalafixMigration ): F [Unit ] =
108103 for {
109104 buildRootDir <- workspaceAlg.buildRootDir(buildRoot)
110- projectDir = buildRootDir / " project"
105+ projectDir = buildRootDir / project
111106 files0 <- (
112107 fileAlg.walk(buildRootDir, 1 ).filter(_.extension.contains(" .sbt" )) ++
113108 fileAlg.walk(projectDir, 3 ).filter(_.extension.exists(Set (" .sbt" , " .scala" )))
@@ -117,9 +112,6 @@ final class SbtAlg[F[_]](config: Config)(implicit
117112 }
118113 } yield ()
119114
120- private val sbtDir : F [File ] =
121- fileAlg.home.map(_ / " .sbt" )
122-
123115 private def sbt (sbtCommands : Nel [String ], repoDir : File ): F [List [String ]] =
124116 maybeIgnoreOptsFiles(repoDir).surround {
125117 val command =
@@ -133,7 +125,7 @@ final class SbtAlg[F[_]](config: Config)(implicit
133125 processAlg.execSandboxed(command, repoDir)
134126 }
135127
136- private def maybeIgnoreOptsFiles [ A ] (dir : File ): Resource [F , Unit ] =
128+ private def maybeIgnoreOptsFiles (dir : File ): Resource [F , Unit ] =
137129 if (config.ignoreOptsFiles) ignoreOptsFiles(dir) else Resource .unit[F ]
138130
139131 private def ignoreOptsFiles (dir : File ): Resource [F , Unit ] =
@@ -142,4 +134,6 @@ final class SbtAlg[F[_]](config: Config)(implicit
142134 private def getAdditionalDependencies (buildRoot : BuildRoot ): F [List [Scope .Dependencies ]] =
143135 getSbtDependency(buildRoot)
144136 .map(_.map(dep => Scope (List (dep), List (config.defaultResolver))).toList)
137+
138+ private val project = " project"
145139}
0 commit comments