diff --git a/build.sbt b/build.sbt index d9c7d5843d5..4778037f83f 100644 --- a/build.sbt +++ b/build.sbt @@ -481,6 +481,7 @@ lazy val metals = project "localSnapshotVersion" -> localSnapshotVersion, "metalsVersion" -> version.value, "mdocVersion" -> V.mdoc, + "bazelBspVersion" -> V.bazelBsp, "bspVersion" -> V.bsp, "sbtVersion" -> sbtVersion.value, "bloopVersion" -> V.bloop, @@ -731,6 +732,7 @@ lazy val metalsDependencies = project "ch.epfl.scala" %% "gradle-bloop" % V.gradleBloop, "com.sourcegraph" % "semanticdb-java" % V.javaSemanticdb, "org.foundweekends.giter8" %% "giter8" % V.gitter8Version intransitive (), + "org.jetbrains.bsp" % "bazel-bsp" % V.bazelBsp intransitive (), ), ) .disablePlugins(ScalafixPlugin) diff --git a/metals/src/main/scala/scala/meta/internal/builds/BazelBuildTool.scala b/metals/src/main/scala/scala/meta/internal/builds/BazelBuildTool.scala index 914f0cc645c..1695b3e75e3 100644 --- a/metals/src/main/scala/scala/meta/internal/builds/BazelBuildTool.scala +++ b/metals/src/main/scala/scala/meta/internal/builds/BazelBuildTool.scala @@ -1,5 +1,6 @@ package scala.meta.internal.builds +import scala.meta.internal.metals.BuildInfo import scala.meta.internal.metals.JavaBinary import scala.meta.internal.metals.MetalsEnrichments._ import scala.meta.internal.metals.UserConfiguration @@ -78,7 +79,7 @@ case class BazelBuildTool( object BazelBuildTool { val name: String = "bazel" val bspName: String = "bazelbsp" - val version: String = "3.2.0-20240629-e3d8bdf-NIGHTLY" + val version: String = BuildInfo.bazelBspVersion val mainClass = "org.jetbrains.bsp.bazel.install.Install" diff --git a/metals/src/main/scala/scala/meta/internal/metals/Compilations.scala b/metals/src/main/scala/scala/meta/internal/metals/Compilations.scala index 14db0a6943c..ee1dc909a73 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/Compilations.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/Compilations.scala @@ -261,11 +261,11 @@ final class Compilations( val originId = "METALS-$" + UUID.randomUUID().toString val params = new b.CompileParams(targets.asJava) params.setOriginId(originId) - if ( - userConfiguration().verboseCompilation && (connection.isBloop || connection.isScalaCLI) - ) { - params.setArguments(List("--verbose", "--best-effort").asJava) - } else { params.setArguments(List("--best-effort").asJava) } + if (connection.isBloop || connection.isScalaCLI) { + if (userConfiguration().verboseCompilation) + params.setArguments(List("--verbose", "--best-effort").asJava) + else params.setArguments(List("--best-effort").asJava) + } targets.foreach { target => isCompiling(target) = true } diff --git a/metals/src/main/scala/scala/meta/internal/metals/MetalsEnrichments.scala b/metals/src/main/scala/scala/meta/internal/metals/MetalsEnrichments.scala index 63e1a9914dd..6bfbd82f778 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/MetalsEnrichments.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/MetalsEnrichments.scala @@ -970,7 +970,8 @@ object MetalsEnrichments val ld = new l.Diagnostic( diag.getRange.toLsp, fansi.Str(diag.getMessage, ErrorMode.Strip).plainText, - diag.getSeverity.toLsp, + if (diag.getSeverity == null) l.DiagnosticSeverity.Error + else diag.getSeverity.toLsp, if (diag.getSource == null) "scalac" else diag.getSource, ) Option(diag.getCode()).foreach { code => diff --git a/project/V.scala b/project/V.scala index 4580ffa83ba..6186a8d2780 100644 --- a/project/V.scala +++ b/project/V.scala @@ -17,6 +17,7 @@ object V { val ammonite3Version = "3.3.3" val ammonite = "3.0.0-M2-15-9bed9700" + val bazelBsp = "3.2.0-20240829-fd286ccb7-NIGHTLY" val betterMonadicFor = "0.3.1" val bloop = "2.0.0" val bloopConfig = "2.0.3" diff --git a/tests/slow/src/test/scala/tests/bazel/BazelLspSuite.scala b/tests/slow/src/test/scala/tests/bazel/BazelLspSuite.scala index 2f1fd0cb7f8..2d19c6253c1 100644 --- a/tests/slow/src/test/scala/tests/bazel/BazelLspSuite.scala +++ b/tests/slow/src/test/scala/tests/bazel/BazelLspSuite.scala @@ -28,6 +28,7 @@ class BazelLspSuite val buildTool: BazelBuildTool = BazelBuildTool(() => userConfig, workspace) val bazelVersion = "6.4.0" + val bazel7Version = "7.3.0" def bazelBspConfig: AbsolutePath = workspace.resolve(".bsp/bazelbsp.json") @@ -38,55 +39,57 @@ class BazelLspSuite val importMessage: String = GenerateBspAndConnect.params("bazel", "bazelbsp").getMessage() - test("basic") { - cleanWorkspace() - for { - _ <- initialize( - BazelBuildLayout(workspaceLayout, V.bazelScalaVersion, bazelVersion) - ) - _ = assertNoDiff( - client.workspaceMessageRequests, - List( - importMessage - ).mkString("\n"), - ) - _ = assert(bazelBspConfig.exists) - _ = client.messageRequests.clear() // restart - _ = assertStatus(_.isInstalled) - _ = assertNoDiff(client.workspaceDiagnostics, "") - _ <- server.didChange("WORKSPACE")(_ + "\n# comment") - _ <- server.didSave("WORKSPACE")(identity) - // Comment changes do not trigger "re-import project" request - _ = assertNoDiff(client.workspaceMessageRequests, "") - _ <- server.didChange("Hello.scala") { text => - text.replace("def hello: String", "def hello: Int") - } - _ <- server.didSave("Hello.scala")(identity) - _ = assertNoDiff( - client.workspaceDiagnostics, - """|Hello.scala:4:20: error: type mismatch; - | found : String("Hello") - | required: Int - | def hello: Int = "Hello" - | ^ - | def hello: Int = "Hello" - | ^ - |""".stripMargin, - ) - _ <- server.didChange(s"BUILD") { text => - text.replace("\"hello\"", "\"hello1\"") + for (bazelVersion <- List(bazelVersion, bazel7Version)) { + test(s"basic-$bazelVersion") { + cleanWorkspace() + for { + _ <- initialize( + BazelBuildLayout(workspaceLayout, V.bazelScalaVersion, bazelVersion) + ) + _ = assertNoDiff( + client.workspaceMessageRequests, + List( + importMessage + ).mkString("\n"), + ) + _ = assert(bazelBspConfig.exists) + _ = client.messageRequests.clear() // restart + _ = assertStatus(_.isInstalled) + _ = assertNoDiff(client.workspaceDiagnostics, "") + _ <- server.didChange("WORKSPACE")(_ + "\n# comment") + _ <- server.didSave("WORKSPACE")(identity) + // Comment changes do not trigger "re-import project" request + _ = assertNoDiff(client.workspaceMessageRequests, "") + _ <- server.didChange("Hello.scala") { text => + text.replace("def hello: String", "def hello: Int") + } + _ <- server.didSave("Hello.scala")(identity) + _ = assertNoDiff( + client.workspaceDiagnostics, + """|Hello.scala:4:20: error: type mismatch; + | found : String("Hello") + | required: Int + | def hello: Int = "Hello" + | ^ + | def hello: Int = "Hello" + | ^ + |""".stripMargin, + ) + _ <- server.didChange(s"BUILD") { text => + text.replace("\"hello\"", "\"hello1\"") + } + _ = assertNoDiff(client.workspaceMessageRequests, "") + _ = client.generateBspAndConnect = GenerateBspAndConnect.yes + _ <- server.didSave(s"BUILD")(identity) + } yield { + assertNoDiff( + client.workspaceMessageRequests, + List( + importBuildChangesMessage + ).mkString("\n"), + ) + server.assertBuildServerConnection() } - _ = assertNoDiff(client.workspaceMessageRequests, "") - _ = client.generateBspAndConnect = GenerateBspAndConnect.yes - _ <- server.didSave(s"BUILD")(identity) - } yield { - assertNoDiff( - client.workspaceMessageRequests, - List( - importBuildChangesMessage - ).mkString("\n"), - ) - server.assertBuildServerConnection() } }