@@ -5,6 +5,8 @@ import cats.effect.kernel.Deferred
55import cats .effect .kernel .Resource
66import cats .effect .IO
77import cats .syntax .all .*
8+ import fs2 .io .file .Files
9+ import fs2 .io .file .Path
810import fs2 .io .process .ProcessBuilder
911import fs2 .text
1012import ScalaBuildTargetInformation .*
@@ -19,6 +21,7 @@ import LoggingUtils.*
1921import org .scala .abusers .pc .PresentationCompilerDTOInterop .*
2022import org .scala .abusers .pc .PresentationCompilerProvider
2123import org .scala .abusers .sls .NioConverter .asNio
24+ import util .chaining .*
2225
2326import java .net .URI
2427import java .util .concurrent .CompletableFuture
@@ -206,14 +209,8 @@ class ServerImpl(
206209 inlayHintProvider = Opt (InlayHintOptions (resolveProvider = Opt (false ))),
207210 )
208211
209- private def connectWithBloop (
210- back : Communicate [IO ],
211- steward : ResourceSupervisor [IO ],
212- diagnosticManager : DiagnosticManager ,
213- ): IO [BuildServer ] = {
214- val temp = os.temp.dir(prefix = " sls" ) // TODO Investigate possible clashes during reconnection
215- val socketFile = temp / s " bloop.socket "
216- val bspProcess = ProcessBuilder (" bloop" , " bsp" , " --socket" , socketFile.toNIO.toString())
212+ private def connectWithBloop (back : Communicate [IO ], steward : ResourceSupervisor [IO ], diagnosticManager : DiagnosticManager ): IO [BuildServer ] = {
213+ def bspProcess (socketFile : os.Path ) = ProcessBuilder (" bloop" , " bsp" , " --socket" , socketFile.toNIO.toString())
217214 .spawn[IO ]
218215 .flatMap { bspSocketProc =>
219216 IO .deferred[Unit ].toResource.flatMap { started =>
@@ -242,8 +239,16 @@ class ServerImpl(
242239 .as(socketFile)
243240
244241 val bspClientRes = for {
245- socketPath <- bspProcess
246- _ <- Resource .eval(IO .sleep(1 .seconds) *> back.logMessage(s " Looking for socket at $socketPath" ))
242+ temp <- Files [IO ]
243+ .tempDirectory(
244+ dir = None ,
245+ prefix = " sls" ,
246+ permissions = None ,
247+ )
248+ .map(_.toNioPath.pipe(os.Path (_))) // TODO Investigate possible clashes during reconnection
249+ socketFile = temp / " bloop.socket"
250+ socketPath <- bspProcess(socketFile)
251+ _ <- Resource .eval(IO .sleep(1 .seconds) *> back.logMessage(s " Looking for socket at $socketPath" ))
247252 channel <- FS2Channel
248253 .resource[IO ]()
249254 .flatMap(_.withEndpoints(bspClientHandler(back, diagnosticManager)))
0 commit comments