diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala index 763b960e8b..9de7eb8431 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/MillAlg.scala @@ -90,11 +90,18 @@ final class MillAlg[F[_]](defaultResolvers: List[Resolver])(implicit override protected val scalafixIssue: Option[String] = Some("https://github.com/scala-steward-org/scala-steward/issues/2838") - private def getMillVersion(buildRootDir: File): F[Option[Version]] = - List( - buildRootDir / s".$millVersionName", - buildRootDir / ".config" / millVersionName - ).collectFirstSomeM(fileAlg.readFile).map(_.flatMap(parser.parseMillVersion)) + private def getMillVersion(buildRootDir: File): F[Option[Version]] = { + val fromConfigFile = + List( + buildRootDir / s".$millVersionName", + buildRootDir / ".config" / millVersionName + ).collectFirstSomeM(fileAlg.readFile).map(_.flatMap(parser.parseMillVersion)) + val fromBuildFile = List(buildRootDir / "build.mill", buildRootDir / "build.mill.scala") + .collectFirstSomeM(fileAlg.readFile) + .map(_.flatMap(parser.parseBuildFileMillVersion)) + + fromBuildFile.orElse(fromConfigFile) + } private def getMillPluginDeps( millVersion: Version, diff --git a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala index beb1fc9273..c02526b02c 100644 --- a/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala +++ b/modules/core/src/main/scala/org/scalasteward/core/buildtool/mill/parser.scala @@ -46,6 +46,13 @@ object parser { def parseMillVersion(s: String): Option[Version] = Option(s.trim).filter(_.nonEmpty).map(Version.apply) + private val millVersionRegex = """\s*\/\/\|\s*mill-version:\s*['"]?(.+?)['"]?\s*""".r + def parseBuildFileMillVersion(s: String): Option[Version] = { + s.linesIterator.collectFirst { + case millVersionRegex(version) => Version(version) + } + } + /** Used to correctly format the Mill plugin artifacts will when included look like: * - import $ivy.`com.goyeau::mill-scalafix::0.2.10` * diff --git a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala index d8ff1df99b..be1f51942d 100644 --- a/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala +++ b/modules/core/src/test/scala/org/scalasteward/core/buildtool/mill/MillVersionParserTest.scala @@ -19,4 +19,31 @@ class MillVersionParserTest extends FunSuite { val parsed = parser.parseMillVersion(versionFileContent).map(_.value) assertEquals(parsed, expected) } + + test(s"parse version from build.mill file") { + val buildMillFileContent = """ + |//| + |//| mill-version: 1.0.5 + |""".stripMargin + val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value) + assertEquals(parsed, Some("1.0.5")) + } + + test(s"parse quoted version from build.mill file") { + val buildMillFileContent = """ + |//| + |//| mill-version: "1.0.5" + |""".stripMargin + val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value) + assertEquals(parsed, Some("1.0.5")) + } + + test(s"parse single quoted version from build.mill file") { + val buildMillFileContent = """ + |//| + |//| mill-version: '1.0.5' + |""".stripMargin + val parsed = parser.parseBuildFileMillVersion(buildMillFileContent).map(_.value) + assertEquals(parsed, Some("1.0.5")) + } } diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 00fd3689ff..490efdbbab 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -44,6 +44,6 @@ object Dependencies { val scalacheck = "org.scalacheck" %% "scalacheck" % "1.19.0" val scalaStewardMillPluginArtifactName = "scala-steward-mill-plugin" val scalaStewardMillPlugin = - "org.scala-steward" % s"${scalaStewardMillPluginArtifactName}_mill0.11_2.13" % "0.18.2" + "org.scala-steward" % s"${scalaStewardMillPluginArtifactName}_mill1_3" % "0.18.2-9-0ad5e5" val tomlj = "org.tomlj" % "tomlj" % "1.1.1" }