Skip to content

Commit cb99b13

Browse files
lwronskiKamil Podsiadlo
andauthored
Add support for running main classes in Metals (#221)
Co-authored-by: Kamil Podsiadlo <[email protected]> Co-authored-by: Kamil Podsiadlo <[email protected]>
1 parent 52cb816 commit cb99b13

File tree

8 files changed

+43
-5
lines changed

8 files changed

+43
-5
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ out/
33
.metals/
44
.vscode/
55
.scala
6-
.bsp
6+
.bsp
7+
.idea/

modules/bloop-rifle/src/main/scala/scala/build/bloop/BuildServer.scala

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,7 @@ package scala.build.bloop
22

33
import ch.epfl.scala.bsp4j
44

5+
import scala.build.bsp.ScalaDebugServer
6+
57
trait BuildServer extends bsp4j.BuildServer with bsp4j.ScalaBuildServer with bsp4j.JavaBuildServer
8+
with ScalaDebugServer
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package scala.build.bsp;
2+
3+
import ch.epfl.scala.bsp4j.{DebugSessionAddress, DebugSessionParams}
4+
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
5+
6+
import java.util.concurrent.CompletableFuture;
7+
8+
trait ScalaDebugServer {
9+
@JsonRequest("debugSession/start")
10+
def buildTargetDebugSession(params: DebugSessionParams): CompletableFuture[DebugSessionAddress]
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package scala.build.bsp
2+
3+
import ch.epfl.scala.{bsp4j => b}
4+
5+
import java.util.concurrent.CompletableFuture
6+
7+
trait ScalaDebugServerForwardStubs extends ScalaDebugServer {
8+
protected def forwardTo: ScalaDebugServer
9+
override def buildTargetDebugSession(
10+
params: b.DebugSessionParams
11+
): CompletableFuture[b.DebugSessionAddress] =
12+
forwardTo.buildTargetDebugSession(params)
13+
}

modules/build/src/main/scala/scala/build/bsp/BspServer.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,11 @@ import scala.concurrent.{Future, Promise}
1010
import scala.jdk.CollectionConverters._
1111

1212
class BspServer(
13-
bloopServer: b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer,
13+
bloopServer: b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer with ScalaDebugServer,
1414
compile: (() => CompletableFuture[b.CompileResult]) => CompletableFuture[b.CompileResult],
1515
logger: Logger
1616
) extends b.BuildServer with b.ScalaBuildServer with b.JavaBuildServer with BuildServerForwardStubs
17+
with ScalaDebugServerForwardStubs
1718
with ScalaBuildServerForwardStubs with JavaBuildServerForwardStubs with HasGeneratedSources {
1819

1920
private var extraDependencySources: Seq[os.Path] = Nil
@@ -163,8 +164,9 @@ class BspServer(
163164
for (target <- res0.getTargets.asScala) {
164165
val capabilities = target.getCapabilities
165166
// TODO Re-enable once we support this via BSP
166-
capabilities.setCanRun(false)
167-
capabilities.setCanTest(false)
167+
capabilities.setCanDebug(true)
168+
capabilities.setCanRun(true)
169+
capabilities.setCanTest(true)
168170
}
169171
res0
170172
}

modules/build/src/main/scala/scala/build/bsp/BuildServerForwardStubs.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package scala.build.bsp
22

3+
import ch.epfl.scala.bsp4j.{DependencyModulesParams, DependencyModulesResult}
34
import ch.epfl.scala.{bsp4j => b}
45

56
import java.util.concurrent.CompletableFuture
@@ -36,4 +37,7 @@ trait BuildServerForwardStubs extends b.BuildServer {
3637
forwardTo.workspaceBuildTargets()
3738
override def workspaceReload(): CompletableFuture[Object] =
3839
forwardTo.workspaceReload()
40+
override def buildTargetDependencyModules(params: DependencyModulesParams)
41+
: CompletableFuture[DependencyModulesResult] =
42+
forwardTo.buildTargetDependencyModules(params)
3943
}

modules/build/src/main/scala/scala/build/bsp/LoggingBuildServer.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package scala.build.bsp
22

3+
import ch.epfl.scala.bsp4j.{DependencyModulesParams, DependencyModulesResult}
34
import ch.epfl.scala.{bsp4j => b}
45

56
import java.util.concurrent.CompletableFuture
@@ -44,4 +45,7 @@ trait LoggingBuildServer extends b.BuildServer {
4445
underlying.workspaceBuildTargets().logF
4546
override def workspaceReload(): CompletableFuture[Object] =
4647
underlying.workspaceReload().logF
48+
override def buildTargetDependencyModules(params: DependencyModulesParams)
49+
: CompletableFuture[DependencyModulesResult] =
50+
underlying.buildTargetDependencyModules(pprint.stderr.log(params)).logF
4751
}

project/deps.sc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ object Deps {
4444
def ammonite = ivy"com.lihaoyi:::ammonite:2.4.0-23-76673f7f"
4545
def asm = ivy"org.ow2.asm:asm:9.1"
4646
def bloopConfig = ivy"ch.epfl.scala::bloop-config:1.4.8-124-49a6348a"
47-
def bsp4j = ivy"ch.epfl.scala:bsp4j:2.0.0-M13"
47+
def bsp4j = ivy"ch.epfl.scala:bsp4j:2.0.0-M14"
4848
def caseApp = ivy"com.github.alexarchambault::case-app:2.1.0-M7"
4949
def collectionCompat = ivy"org.scala-lang.modules::scala-collection-compat:2.5.0"
5050
def coursierJvm = ivy"io.get-coursier::coursier-jvm:${Versions.coursier}"

0 commit comments

Comments
 (0)