From 66796d99e2beca20920cfdaf3897c7180b107f1d Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Tue, 27 Jun 2023 16:08:59 +0200 Subject: [PATCH 1/2] bugfix: Make mtags-shared published with full scala version This seems to have caused the issues in https://github.com/scalameta/metals/issues/5293 by bringing in snapshot version of the scala 3 library Also, added a forceVersion parameters to avoid cases like this in the future. --- build.sbt | 2 +- .../scala/meta/internal/metals/Embedded.scala | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/build.sbt b/build.sbt index 887aafc18f7..6b118241dd3 100644 --- a/build.sbt +++ b/build.sbt @@ -251,7 +251,7 @@ lazy val mtagsShared = project crossScalaVersions := { V.supportedScalaVersions ++ V.nightlyScala3Versions }, - crossVersion := CrossVersion.binary, + crossVersion := CrossVersion.full, Compile / packageSrc / publishArtifact := true, libraryDependencies ++= List( "org.lz4" % "lz4-java" % "1.8.0", diff --git a/metals/src/main/scala/scala/meta/internal/metals/Embedded.scala b/metals/src/main/scala/scala/meta/internal/metals/Embedded.scala index 355f1bf0390..0383799dcfa 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/Embedded.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/Embedded.scala @@ -118,11 +118,7 @@ final class Embedded( case None => resolutionParams case Some(version) => resolutionParams.forceVersions( - List( - Dependency.of("org.scala-lang", "scala3-library_3", version), - Dependency.of("org.scala-lang", "scala3-compiler_3", version), - Dependency.of("org.scala-lang", "tasty-core_3", version), - ).map(d => (d.getModule, d.getVersion)).toMap.asJava + Embedded.scala3CompilerDependencies(version) ) } val jars = @@ -180,6 +176,12 @@ object Embedded { ), ) + private[Embedded] def scala3CompilerDependencies(version: String) = List( + Dependency.of("org.scala-lang", "scala3-library_3", version), + Dependency.of("org.scala-lang", "scala3-compiler_3", version), + Dependency.of("org.scala-lang", "tasty-core_3", version), + ).map(d => (d.getModule, d.getVersion)).toMap.asJava + def fetchSettings( dep: Dependency, scalaVersion: Option[String], @@ -197,6 +199,10 @@ object Embedded { Dependency.of("org.scala-lang", "scala-reflect", scalaVersion), ).map(d => (d.getModule, d.getVersion)).toMap.asJava ) + else + resolutionParams.forceVersions( + scala3CompilerDependencies(scalaVersion) + ) } Fetch From 088a02127fb04e5ab2f7f0c792ae4408de5d711c Mon Sep 17 00:00:00 2001 From: Tomasz Godzik Date: Tue, 27 Jun 2023 17:30:39 +0200 Subject: [PATCH 2/2] improvement: Add test for iskra libary and improve mtags3 workaround mtags3 is a workaround to make scala 3 support work without selecting version in cross-version to Scala 3 --- build.sbt | 4 +- .../feature/CompletionCrossLspSuite.scala | 50 +++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/build.sbt b/build.sbt index 6b118241dd3..2b169c8a273 100644 --- a/build.sbt +++ b/build.sbt @@ -355,6 +355,8 @@ lazy val mtags3 = project sharedSettings, mtagsSettings, Compile / unmanagedSourceDirectories += (ThisBuild / baseDirectory).value / "mtags" / "src" / "main" / "scala", + Compile / unmanagedSourceDirectories += (ThisBuild / baseDirectory).value / "mtags-shared" / "src" / "main" / "scala", + Compile / unmanagedSourceDirectories += (ThisBuild / baseDirectory).value / "mtags-shared" / "src" / "main" / "scala-3", moduleName := "mtags3", scalaVersion := V.scala3, target := (ThisBuild / baseDirectory).value / "mtags" / "target" / "target3", @@ -363,7 +365,7 @@ lazy val mtags3 = project (ThisBuild / baseDirectory).value / ".scalafix3.conf" ), ) - .dependsOn(mtagsShared) + .dependsOn(interfaces) .enablePlugins(BuildInfoPlugin) lazy val mtags = project diff --git a/tests/slow/src/test/scala/tests/feature/CompletionCrossLspSuite.scala b/tests/slow/src/test/scala/tests/feature/CompletionCrossLspSuite.scala index eeb2e1dab61..d2a14f6bb1f 100644 --- a/tests/slow/src/test/scala/tests/feature/CompletionCrossLspSuite.scala +++ b/tests/slow/src/test/scala/tests/feature/CompletionCrossLspSuite.scala @@ -153,4 +153,54 @@ class CompletionCrossLspSuite } yield () } + test("iskra-scala3") { + cleanWorkspace() + for { + _ <- initialize( + s"""/metals.json + |{ + | "a": { + | "scalaVersion": "${V.scala3}", + | "libraryDependencies": [ + | "org.virtuslab::iskra:0.0.3" + | ] + | } + |} + |/a/src/main/scala/Main.scala + | + |import org.virtuslab.iskra.api.* + |import org.virtuslab.iskra.api.given + | + |given spark: SparkSession = SparkSession + | .builder() + | .master("local") + | .appName("my-spark-app") + | .getOrCreate() + | + |object demo { + | + | case class Foo(x: Int, y: Int) + | + | val df = Seq(Foo(1, 420), Foo(2, 50)).toTypedDF + | // @@ + | df.select { + | val sum = ($$.x + $$.y).as("sum") + | ($$.x, $$.y, sum) + | } + | + |} + | + |""".stripMargin + ) + _ <- server.didOpen("a/src/main/scala/Main.scala") + _ = assertNoDiagnostics() + _ <- assertCompletion( + "df.sel@@", + """|select: Select[?] + |""".stripMargin, + filename = Some("a/src/main/scala/Main.scala"), + ) + } yield () + } + }