From bc2ed8c836af51d4715668bf05ae513ccf399d69 Mon Sep 17 00:00:00 2001 From: Piotr Chabelski Date: Thu, 24 Apr 2025 13:17:16 +0200 Subject: [PATCH] Declare BSP server as capable of providing output paths --- .../scala/scala/build/bsp/BspServer.scala | 1 + .../scala/cli/integration/BspSuite.scala | 36 +++++++++++++++++-- .../cli/integration/BspTestDefinitions.scala | 4 ++- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/modules/build/src/main/scala/scala/build/bsp/BspServer.scala b/modules/build/src/main/scala/scala/build/bsp/BspServer.scala index 95c85c0d11..e2896ab46b 100644 --- a/modules/build/src/main/scala/scala/build/bsp/BspServer.scala +++ b/modules/build/src/main/scala/scala/build/bsp/BspServer.scala @@ -173,6 +173,7 @@ class BspServer( capabilities.setJvmTestEnvironmentProvider(true) capabilities.setCanReload(true) capabilities.setDependencyModulesProvider(true) + capabilities.setOutputPathsProvider(true) capabilities } diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspSuite.scala b/modules/integration/src/test/scala/scala/cli/integration/BspSuite.scala index d2c6bc6867..f8233acc24 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BspSuite.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BspSuite.scala @@ -81,6 +81,35 @@ trait BspSuite { _: ScalaCliSuite => TestBspClient, b.BuildServer & b.ScalaBuildServer & b.JavaBuildServer & b.JvmBuildServer ) => Future[T] + ): T = withBspInitResults( + inputs, + args, + attempts, + pauseDuration, + bspOptions, + bspEnvs, + reuseRoot, + stdErrOpt, + extraOptionsOverride + )((root, client, server, _: b.InitializeBuildResult) => f(root, client, server)) + + def withBspInitResults[T]( + inputs: TestInputs, + args: Seq[String], + attempts: Int = if (TestUtil.isCI) 3 else 1, + pauseDuration: FiniteDuration = 5.seconds, + bspOptions: List[String] = List.empty, + bspEnvs: Map[String, String] = Map.empty, + reuseRoot: Option[os.Path] = None, + stdErrOpt: Option[os.RelPath] = None, + extraOptionsOverride: Seq[String] = extraOptions + )( + f: ( + os.Path, + TestBspClient, + b.BuildServer & b.ScalaBuildServer & b.JavaBuildServer & b.JvmBuildServer, + b.InitializeBuildResult + ) => Future[T] ): T = { def attempt(): Try[T] = Try { @@ -118,11 +147,14 @@ trait BspSuite { _: ScalaCliSuite => val (localClient, remoteServer0, _) = TestBspClient.connect(proc.stdout, proc.stdin, pool) remoteServer = remoteServer0 - Await.result( + val initRes: b.InitializeBuildResult = Await.result( whileBspServerIsRunning(remoteServer.buildInitialize(initParams(root)).asScala), Duration.Inf ) - Await.result(whileBspServerIsRunning(f(root, localClient, remoteServer)), Duration.Inf) + Await.result( + whileBspServerIsRunning(f(root, localClient, remoteServer, initRes)), + Duration.Inf + ) } finally { if (remoteServer != null) diff --git a/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala b/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala index ebb54abf7a..48f11f5c96 100644 --- a/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala +++ b/modules/integration/src/test/scala/scala/cli/integration/BspTestDefinitions.scala @@ -844,7 +844,9 @@ abstract class BspTestDefinitions extends ScalaCliSuite with TestScalaVersionArg |} |""".stripMargin ) - withBsp(inputs, Seq(".")) { (root, _, remoteServer) => + withBspInitResults(inputs, Seq(".")) { (root, _, remoteServer, buildInitRes) => + val serverCapabilities: b.BuildServerCapabilities = buildInitRes.getCapabilities + expect(serverCapabilities.getOutputPathsProvider) async { val buildTargetsResp = await(remoteServer.workspaceBuildTargets().asScala) val target = {