diff --git a/metals/src/main/scala/scala/meta/internal/metals/BuildServerConnection.scala b/metals/src/main/scala/scala/meta/internal/metals/BuildServerConnection.scala index 739dea09502..46e2cb89e1e 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/BuildServerConnection.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/BuildServerConnection.scala @@ -612,7 +612,12 @@ object BuildServerConnection { Cancelable(() => listening.cancel(false)) val result = try { - BuildServerConnection.initialize(projectRoot, server, serverName) + BuildServerConnection.initialize( + projectRoot, + server, + serverName, + config, + ) } catch { case e: TimeoutException => conn.cancelables.foreach(_.cancel()) @@ -705,12 +710,13 @@ object BuildServerConnection { workspace: AbsolutePath, server: MetalsBuildServer, serverName: String, + config: MetalsServerConfig, ): InitializeBuildResult = { val extraParams = BspExtraBuildParams( BuildInfo.javaSemanticdbVersion, BuildInfo.scalametaVersion, BuildInfo.supportedScala2Versions.asJava, - true, + config.enableBestEffort, ) val capabilities = new BuildClientCapabilities( diff --git a/metals/src/main/scala/scala/meta/internal/metals/MetalsServerConfig.scala b/metals/src/main/scala/scala/meta/internal/metals/MetalsServerConfig.scala index de3b750d82a..073d04837e4 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/MetalsServerConfig.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/MetalsServerConfig.scala @@ -120,6 +120,10 @@ final case class MetalsServerConfig( .filter(_.forall(Character.isDigit(_))) .map(_.toInt) .getOrElse(60), + enableBestEffort: Boolean = MetalsServerConfig.binaryOption( + "metals.enable-best-effort", + default = false, + ), ) { override def toString: String = List[String]( @@ -143,6 +147,7 @@ final case class MetalsServerConfig( s"build-server-ping-interval=${pingInterval}", s"worksheet-timeout=$worksheetTimeout", s"debug-server-start-timeout=$debugServerStartTimeout", + s"enable-best-effort=$enableBestEffort", ).mkString("MetalsServerConfig(\n ", ",\n ", "\n)") } object MetalsServerConfig { diff --git a/tests/unit/src/test/scala/tests/best-effort/BestEffortCompilationSuite.scala b/tests/unit/src/test/scala/tests/best-effort/BestEffortCompilationSuite.scala index 941f4a968db..b7d6317d1f7 100644 --- a/tests/unit/src/test/scala/tests/best-effort/BestEffortCompilationSuite.scala +++ b/tests/unit/src/test/scala/tests/best-effort/BestEffortCompilationSuite.scala @@ -1,11 +1,16 @@ package tests.`best-effort` +import scala.meta.internal.metals.MetalsServerConfig + import tests.BaseNonCompilingLspSuite class BestEffortCompilationSuite extends BaseNonCompilingLspSuite("best-effort-compilation") { val scalaVersion = "3.5.0-RC1" + override def serverConfig: MetalsServerConfig = + super.serverConfig.copy(enableBestEffort = true) + override val scalaVersionConfig = s"\"scalaVersion\": \"${scalaVersion}\"" override val saveAfterChanges: Boolean = true override val scala3Diagnostics: Boolean = true