From bab03bfb7bdfd9130bdbcbad4e6776bc087fda77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Krzewski?= Date: Wed, 7 Dec 2022 18:50:43 +0100 Subject: [PATCH] Exclude MDoc dependencies on project's classpath to avoid conflicts --- .../scala/meta/internal/metals/Embedded.scala | 24 ++++++++++--------- .../worksheets/WorksheetProvider.scala | 7 +++++- .../tests/worksheets/WorksheetLspSuite.scala | 24 +++++++++++++++++++ 3 files changed, 43 insertions(+), 12 deletions(-) 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 eba3fc18db2..7554364c269 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/Embedded.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/Embedded.scala @@ -135,17 +135,7 @@ final class Embedded( // Full mdoc classpath seems to be causing some issue with akka // We want to keep a minimal set of jars needed here - val runtimeClasspath = jars.filter { path => - val pathString = path.toString - pathString.contains("scala-lang") || - pathString.contains("fansi") || - pathString.contains("pprint") || - pathString.contains("sourcecode") || - pathString.contains("mdoc") || - pathString.contains("scalameta") || - pathString.contains("metaconfig") || - pathString.contains("diffutils") - } + val runtimeClasspath = jars.filter(Embedded.filterMDocLibraries) val urls = runtimeClasspath.iterator.map(_.toUri().toURL()).toArray new URLClassLoader(urls, parent) } @@ -335,4 +325,16 @@ object Embedded { downloadDependency(dependency, Some(scalaVersion)) } + def filterMDocLibraries(path: Path) = { + val pathString = path.toString + pathString.contains("scala-lang") || + pathString.contains("fansi") || + pathString.contains("pprint") || + pathString.contains("sourcecode") || + pathString.contains("mdoc") || + pathString.contains("scalameta") || + pathString.contains("metaconfig") || + pathString.contains("diffutils") + } + } diff --git a/metals/src/main/scala/scala/meta/internal/worksheets/WorksheetProvider.scala b/metals/src/main/scala/scala/meta/internal/worksheets/WorksheetProvider.scala index 1161c351351..72250dae570 100644 --- a/metals/src/main/scala/scala/meta/internal/worksheets/WorksheetProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/worksheets/WorksheetProvider.scala @@ -421,7 +421,12 @@ class WorksheetProvider( .asJava val mdoc = embedded .mdoc(info.scalaVersion) - .withClasspath(info.fullClasspath.distinct.asJava) + .withClasspath( + info.fullClasspath + .filterNot(Embedded.filterMDocLibraries) + .distinct + .asJava + ) .withScalacOptions(scalacOptions) mdocs(key) = MdocRef(scalaVersion, mdoc) mdoc diff --git a/tests/unit/src/test/scala/tests/worksheets/WorksheetLspSuite.scala b/tests/unit/src/test/scala/tests/worksheets/WorksheetLspSuite.scala index 78fd5877042..f3de30856d8 100644 --- a/tests/unit/src/test/scala/tests/worksheets/WorksheetLspSuite.scala +++ b/tests/unit/src/test/scala/tests/worksheets/WorksheetLspSuite.scala @@ -186,4 +186,28 @@ class WorksheetLspSuite extends tests.BaseWorksheetLspSuite(V.scala213) { _ = assertNoDiagnostics() } yield () } + + test("pprint") { + cleanWorkspace() + val path = "a/src/main/scala/hi.worksheet.sc" + for { + _ <- initialize( + s""" + |/metals.json + |{ + | "a": { + | "libraryDependencies": ["com.lihaoyi::pprint:0.6.0"] + | } + |} + |/${path} + |new java.sql.Date(100L) + |""".stripMargin + ) + _ <- server.didOpen(path) + _ = assertNoDiff( + client.workspaceDecorations, + "new java.sql.Date(100L) // : java.sql.Date = 1970-01-01", + ) + } yield () + } }