diff --git a/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala b/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala index d235dd6c4e..4cbca3b2fa 100644 --- a/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala +++ b/modules/build/src/test/scala/scala/build/tests/ActionableDiagnosticTests.scala @@ -208,7 +208,30 @@ class ActionableDiagnosticTests extends munit.FunSuite { val testLibDiagnosticOpt = updateDiagnostics.collectFirst { case diagnostic: ActionableDependencyUpdateDiagnostic => diagnostic } - println(testLibDiagnosticOpt) + expect(testLibDiagnosticOpt.isEmpty) + } + } + + test("actionable actions should not suggest update if uses version: latest") { + val testInputs = TestInputs( + os.rel / "Foo.scala" -> + s"""//> using toolkit "latest" + | + |object Hello extends App { + | os.list(os.pwd).foreach(println) + |} + |""".stripMargin + ) + testInputs.withBuild(baseOptions, buildThreads, None, actionableDiagnostics = true) { + (_, _, maybeBuild) => + val build = maybeBuild.orThrow + + val updateDiagnostics = + ActionablePreprocessor.generateActionableDiagnostics(build.options).orThrow + + val testLibDiagnosticOpt = updateDiagnostics.collectFirst { + case diagnostic: ActionableDependencyUpdateDiagnostic => diagnostic + } expect(testLibDiagnosticOpt.isEmpty) } } diff --git a/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala b/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala index bbe42cb3d4..a5d83f1f3b 100644 --- a/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala +++ b/modules/options/src/main/scala/scala/build/actionable/ActionableDependencyHandler.scala @@ -1,7 +1,7 @@ package scala.build.actionable import coursier.Versions -import coursier.core.Version +import coursier.core.{Latest, Version} import coursier.parse.RepositoryParser import dependency._ @@ -29,8 +29,7 @@ case object ActionableDependencyHandler val dependency = setting.value val currentVersion = dependency.version val latestVersion = value(findLatestVersion(buildOptions, dependency)) - - if (Version(latestVersion) > Version(currentVersion)) + if (Version(latestVersion) > Version(currentVersion) && !isLatestSyntaxVersion(currentVersion)) if (dependency.userParams.contains("toolkit")) Some(ActionableDependencyUpdateDiagnostic( setting.positions, @@ -51,6 +50,9 @@ case object ActionableDependencyHandler None } + /** Versions like 'latest.*': 'latest.release', 'latest.integration', 'latest.stable' + */ + private def isLatestSyntaxVersion(version: String): Boolean = Latest(version).nonEmpty private def findLatestVersion( buildOptions: BuildOptions, dependency: AnyDependency