Skip to content

Commit c87e8fc

Browse files
committed
bugfix: Use actual method arguments from DAP server interface
Previously we would use LaunchRequestArguments, but those are actually not used and what is actually returned is a Map. This become a problem after the fix that deserialized arguments to correct params. Now, we use Map instead. Raised the issue here eclipse-lsp4j/lsp4j#842 Also fixed tests to use newest toolkit instead.
1 parent 16c7c66 commit c87e8fc

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

metals/src/main/scala/scala/meta/internal/metals/debug/DebugProtocol.scala

+10-6
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import com.google.gson.JsonElement
1212
import org.eclipse.lsp4j.debug.CompletionsArguments
1313
import org.eclipse.lsp4j.debug.DisconnectArguments
1414
import org.eclipse.lsp4j.debug.InitializeRequestArguments
15-
import org.eclipse.lsp4j.debug.LaunchRequestArguments
1615
import org.eclipse.lsp4j.debug.OutputEventArguments
1716
import org.eclipse.lsp4j.debug.SetBreakpointsArguments
1817
import org.eclipse.lsp4j.debug.SetBreakpointsResponse
@@ -137,11 +136,16 @@ object DebugProtocol {
137136
object LaunchRequest {
138137
def unapply(request: DebugRequestMessage): Option[DebugMode] = {
139138
if (request.getMethod != "launch") None
140-
else
141-
parse[LaunchRequestArguments](request.getParams).toOption.map {
142-
case args if args.getNoDebug => DebugMode.Disabled
143-
case _ => DebugMode.Enabled
144-
}
139+
else {
140+
parse[java.util.Map[String, Object]](request.getParams).toOption
141+
.map { map =>
142+
map.asScala.get("noDebug") match {
143+
case Some(value: java.lang.Boolean) if value => DebugMode.Disabled
144+
case Some(value: java.lang.Boolean) if !value => DebugMode.Enabled
145+
case _ => DebugMode.Enabled
146+
}
147+
}
148+
}
145149
}
146150
}
147151

tests/slow/src/test/scala/tests/scalacli/ScalaCliSuite.scala

+11-3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import scala.meta.internal.metals.ServerCommands
1212
import scala.meta.internal.metals.debug.TestDebugger
1313
import scala.meta.internal.metals.scalacli.ScalaCli
1414
import scala.meta.internal.metals.{BuildInfo => V}
15+
import scala.meta.internal.mtags.CoursierComplete
1516

1617
import org.eclipse.{lsp4j => l}
1718
import tests.FileLayout
@@ -472,14 +473,21 @@ class ScalaCliSuite extends BaseScalaCliSuite(V.scala3) {
472473
} yield ()
473474
}
474475

476+
val coursierComplete = new CoursierComplete(scalaVersion)
477+
val newestToolkit: String = coursierComplete
478+
.complete("org.scala-lang::toolkit:")
479+
.headOption
480+
.map(_.split(":").last)
481+
.getOrElse("default")
482+
475483
test("properly-reindex") {
476484
cleanWorkspace()
477485
server.client.importBuild = Messages.ImportBuild.yes
478486
for {
479487
_ <- scalaCliInitialize(useBsp = true)(
480488
s"""|/Main.scala
481-
|//> using scala 2.13.11
482-
|// > using toolkit default
489+
|//> using scala ${scalaVersion}
490+
|// > using toolkit ${newestToolkit}
483491
|
484492
|object Main {
485493
| println(os.pwd)
@@ -491,7 +499,7 @@ class ScalaCliSuite extends BaseScalaCliSuite(V.scala3) {
491499
_ <- server.didOpen("Main.scala")
492500
_ = assertEquals(
493501
server.client.workspaceDiagnostics,
494-
"""|Main.scala:5:13: error: not found: value os
502+
"""|Main.scala:5:13: error: Not found: os
495503
| println(os.pwd)
496504
| ^^
497505
|""".stripMargin,

0 commit comments

Comments
 (0)