diff --git a/build.sbt b/build.sbt index 365105c6d9f..992985c0909 100644 --- a/build.sbt +++ b/build.sbt @@ -468,8 +468,10 @@ lazy val metals = project V.lsp4j, // for DAP V.dap4j, - ("ch.epfl.scala" %% "scala-debug-adapter" % V.debugAdapter) - .cross(CrossVersion.for3Use2_13), + withExcludes( + ("ch.epfl.scala" %% "scala-debug-adapter" % V.debugAdapter) + .cross(CrossVersion.for3Use2_13) + ), // for finding paths of global log/cache directories "dev.dirs" % "directories" % "26", // ================== @@ -495,7 +497,7 @@ lazy val metals = project "com.outr" %% "scribe-file" % V.scribe, "com.outr" %% "scribe-slf4j2" % V.scribe, // needed for flyway database migrations // for JSON formatted doctor - "com.lihaoyi" %% "ujson" % "4.0.0", + "com.lihaoyi" %% "ujson" % "3.3.1", // For fetching projects' templates "com.lihaoyi" %% "requests" % "0.9.0", // for producing SemanticDB from Scala source files, to be sure we want the same version of scalameta diff --git a/dep.txt b/dep.txt new file mode 100644 index 00000000000..a8a743121ba --- /dev/null +++ b/dep.txt @@ -0,0 +1,694 @@ +[info] welcome to sbt 1.9.9 (Eclipse Adoptium Java 17.0.6) +[info] loading global plugins from /home/tgodzik/.sbt/1.0/plugins +[info] loading settings for project metals-build-build-build from metals.sbt ... +[info] loading project definition from /home/tgodzik/Documents/metals/project/project/project +[info] loading settings for project metals-build-build from metals.sbt ... +[info] loading project definition from /home/tgodzik/Documents/metals/project/project +[success] Generated .bloop/metals-build-build.json +[success] Total time: 1 s, completed Aug 16, 2024, 6:21:30 PM +[info] loading settings for project metals-build from metals.sbt,plugins.sbt ... +[info] loading project definition from /home/tgodzik/Documents/metals/project +[success] Generated .bloop/metals-build.json +[success] Total time: 1 s, completed Aug 16, 2024, 6:21:32 PM +[info] loading settings for project default-ce2872 from build.sbt ... +[info] resolving key references (19696 settings) ... +[info] _ _ +[info] /\/\ ___| |_ __ _| |___ +[info] / \ / _ \ __/ _` | / __| +[info] / /\/\ \ __/ || (_| | \__ \ +[info] \/ \/\___|\__\__,_|_|___/ +[info] +[info] Useful sbt tasks: +[info] a. unit/testOnly tests.DefinitionSuite - run a specific unit test suite. +[info] b. unit/testOnly tests.DefinitionSuite -- *exact-test-name* - run a specific test case inside the unit test suite. +[info] c. unit/testOnly tests.DefinitionSuite -- -F - use `-F` flag to show the full stack trace in case it is missing +[info] d. slow/testOnly -- tests.sbt.* - run all slow tests inside tests.sbt package, they will publish needed mtags locally. +[info] e. ~cross/testOnly tests.hover.HoverTermSuite - automatically rerun on changes a specific presentation compiler test, great for edit/test/debug workflows. +[info] f. +cross/test - run all presentation compiler tests for all non-deprecated Scala versions. +[info] g. publishLocal - publish Metals for the currently used Scala version. +[info] h. +publishLocal - publish Metals for all supported used Scala versions. +[info] i. quick-publish-local - publish Metals artifacts but with only limited set of Scala versions +[info] j. ++3.3.3 mtags/publishLocal - publish changes for a single Scala version, especially useful if working on a feature inside mtags module. `publishLocal` will still need to be run before at least once. +[warn] there's a key that's not used by any other settings/tasks: +[warn] +[warn] * ThisBuild / scalafixScalaBinaryVersion +[warn] +- /home/tgodzik/Documents/metals/build.sbt:39 +[warn] +[warn] note: a setting might still be used by a command; to exclude a key from this `lintUnused` check +[warn] either append it to `Global / excludeLintKeys` or call .withRank(KeyRanks.Invisible) on the key +[info] org.scalameta:metals_3:1.3.6-SNAPSHOT +[info] +-ch.epfl.scala:bloop-rifle_2.13:2.0.0-RC1 [S] +[info] | +-ch.epfl.scala:bsp4j:2.1.1 (evicted by: 2.2.0-M2) +[info] | +-ch.epfl.scala:bsp4j:2.2.0-M2 +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.generator:0.20.1 +[info] | | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.20.1 (evicted by: 0.23.. +[info] | | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | | | | +-com.google.code.gson:gson:2.11.0 +[info] | | | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | | | +[info] | | | | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | | | | +[info] | | | +-org.eclipse.xtend:org.eclipse.xtend.lib:2.28.0 +[info] | | | +-org.eclipse.xtend:org.eclipse.xtend.lib.macro:2.28.0 +[info] | | | | +-org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.28.0 +[info] | | | | +-com.google.guava:guava:33.2.1-jre +[info] | | | | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | | | | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicte.. +[info] | | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | | +-com.google.guava:failureaccess:1.0.2 +[info] | | | | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-conf.. +[info] | | | | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | | | | +-org.checkerframework:checker-qual:3.42.0 +[info] | | | | +[info] | | | +-org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.28.0 +[info] | | | +-com.google.guava:guava:33.2.1-jre +[info] | | | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicted .. +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +-com.google.guava:failureaccess:1.0.2 +[info] | | | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-confli.. +[info] | | | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | | | +-org.checkerframework:checker-qual:3.42.0 +[info] | | | +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.20.1 (evicted by: 0.23.1) +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | | +-com.google.code.gson:gson:2.11.0 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +[info] | | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | | +[info] | +-ch.epfl.scala:libdaemon_2.13:0.0.12 +[info] | +-io.github.alexarchambault.scala-cli.snailgun:snailgun-core_2.13:0.4.1-sc.. +[info] | +[info] +-ch.epfl.scala:bsp4j:2.2.0-M2 +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.generator:0.20.1 +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.20.1 (evicted by: 0.23.1) +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | | | +-com.google.code.gson:gson:2.11.0 +[info] | | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | | +[info] | | | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | | | +[info] | | +-org.eclipse.xtend:org.eclipse.xtend.lib:2.28.0 +[info] | | +-org.eclipse.xtend:org.eclipse.xtend.lib.macro:2.28.0 +[info] | | | +-org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.28.0 +[info] | | | +-com.google.guava:guava:33.2.1-jre +[info] | | | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicted .. +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +-com.google.guava:failureaccess:1.0.2 +[info] | | | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-confli.. +[info] | | | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | | | +-org.checkerframework:checker-qual:3.42.0 +[info] | | | +[info] | | +-org.eclipse.xtext:org.eclipse.xtext.xbase.lib:2.28.0 +[info] | | +-com.google.guava:guava:33.2.1-jre +[info] | | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicted by.. +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +-com.google.guava:failureaccess:1.0.2 +[info] | | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict.. +[info] | | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | | +-org.checkerframework:checker-qual:3.42.0 +[info] | | +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.20.1 (evicted by: 0.23.1) +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | +-com.google.code.gson:gson:2.11.0 +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +[info] | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | +[info] +-ch.epfl.scala:scala-debug-adapter_2.13:4.2.0 [S] +[info] | +-ch.epfl.scala:com-microsoft-java-debug-core:0.34.0+31 +[info] | | +-com.google.code.gson:gson:2.11.0 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +[info] | | +-commons-io:commons-io:2.16.1 +[info] | | +-io.reactivex.rxjava2:rxjava:2.2.21 +[info] | | | +-org.reactivestreams:reactive-streams:1.0.3 (evicted by: 1.0.4) +[info] | | | +-org.reactivestreams:reactive-streams:1.0.4 +[info] | | | +[info] | | +-org.apache.commons:commons-lang3:3.14.0 +[info] | | +-org.reactivestreams:reactive-streams:1.0.4 +[info] | | +[info] | +-org.ow2.asm:asm-util:9.7 +[info] | | +-org.ow2.asm:asm-analysis:9.7 +[info] | | | +-org.ow2.asm:asm-tree:9.7 +[info] | | | +-org.ow2.asm:asm:9.7 +[info] | | | +[info] | | +-org.ow2.asm:asm-tree:9.7 +[info] | | | +-org.ow2.asm:asm:9.7 +[info] | | | +[info] | | +-org.ow2.asm:asm:9.7 +[info] | | +[info] | +-org.ow2.asm:asm:9.7 +[info] | +-org.scala-lang.modules:scala-parallel-collections_2.13:1.0.4 [S] +[info] | +-org.scala-lang:scala-reflect:2.13.14 [S] +[info] | +-org.scala-sbt:test-agent:1.10.1 +[info] | | +-org.scala-sbt:test-interface:1.0 +[info] | | +[info] | +-org.scalameta:parsers_2.13:4.9.7 (evicted by: 4.9.9) +[info] | +-org.scalameta:parsers_2.13:4.9.9 [S] +[info] | +-org.scalameta:trees_2.13:4.9.9 [S] +[info] | +-org.scalameta:common_2.13:4.9.9 [S] +[info] | +-com.lihaoyi:sourcecode_2.13:0.4.2 [S] +[info] | +[info] +-ch.epfl.scala:scalafix-interfaces:0.12.1 +[info] | +-io.get-coursier:interface:1.0.19 +[info] | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | +-org.slf4j:slf4j-api:2.0.13 +[info] | +[info] +-com.google.guava:guava:33.2.1-jre +[info] | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicted by: 2.27.0) +[info] | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | +-com.google.guava:failureaccess:1.0.2 +[info] | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-gu.. +[info] | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | +-org.checkerframework:checker-qual:3.42.0 +[info] | +[info] +-com.googlecode.java-diff-utils:diffutils:1.3.0 +[info] +-com.h2database:h2:2.3.230 +[info] +-com.lihaoyi:requests_3:0.9.0 +[info] | +-com.lihaoyi:geny_3:1.0.0 (evicted by: 1.1.1) +[info] | +-com.lihaoyi:geny_3:1.1.1 +[info] | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.1.1 (evicted by: 3.4.2) +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-com.lihaoyi:ujson_3:4.0.0 +[info] | +-com.lihaoyi:upickle-core_3:4.0.0 +[info] | | +-com.lihaoyi:geny_3:1.1.1 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-com.outr:scribe-file_3:3.15.0 +[info] | +-com.outr:scribe_3:3.15.0 +[info] | | +-com.lihaoyi:sourcecode_3:0.4.2 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-com.outr:moduload_3:1.1.7 +[info] | | | +-org.scala-lang.modules:scala-collection-compat_3:2.11.0 (evicted by:.. +[info] | | | +-org.scala-lang.modules:scala-collection-compat_3:2.12.0 +[info] | | | | +-org.scala-lang:scala3-library_3:3.2.2 (evicted by: 3.4.2) +[info] | | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.3.0 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-com.outr:perfolation_3:1.2.11 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cyc.. +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-com.outr:scribe-slf4j2_3:3.15.0 +[info] | +-com.outr:scribe_3:3.15.0 +[info] | | +-com.lihaoyi:sourcecode_3:0.4.2 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-com.outr:moduload_3:1.1.7 +[info] | | | +-org.scala-lang.modules:scala-collection-compat_3:2.11.0 (evicted by:.. +[info] | | | +-org.scala-lang.modules:scala-collection-compat_3:2.12.0 +[info] | | | | +-org.scala-lang:scala3-library_3:3.2.2 (evicted by: 3.4.2) +[info] | | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.3.0 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-com.outr:perfolation_3:1.2.11 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cyc.. +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +-org.slf4j:slf4j-api:2.0.13 +[info] | +[info] +-com.outr:scribe_3:3.15.0 +[info] | +-com.lihaoyi:sourcecode_3:0.4.2 +[info] | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-com.outr:moduload_3:1.1.7 +[info] | | +-org.scala-lang.modules:scala-collection-compat_3:2.11.0 (evicted by: 2.. +[info] | | +-org.scala-lang.modules:scala-collection-compat_3:2.12.0 +[info] | | | +-org.scala-lang:scala3-library_3:3.2.2 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.3.0 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-com.outr:perfolation_3:1.2.11 +[info] | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-com.swoval:file-tree-views:2.1.12 +[info] +-dev.dirs:directories:26 +[info] +-io.get-coursier:coursier-sbt-maven-repository_2.13:2.1.10 [S] +[info] | +-io.get-coursier:coursier-core_2.13:2.1.10 [S] +[info] | +-io.get-coursier:coursier-util_2.13:2.1.10 [S] +[info] | +-io.github.alexarchambault:concurrent-reference-hash-map:1.1.0 +[info] | +[info] +-io.get-coursier:coursier_2.13:2.1.10 [S] +[info] | +-com.github.plokhotnyuk.jsoniter-scala:jsoniter-scala-core_2.13:2.13.5 (e.. +[info] | +-com.github.plokhotnyuk.jsoniter-scala:jsoniter-scala-core_2.13:2.13.5.2 .. +[info] | +-io.get-coursier:coursier-cache_2.13:2.1.10 [S] +[info] | | +-io.get-coursier.jniutils:windows-jni-utils:0.3.3 +[info] | | +-io.get-coursier:coursier-util_2.13:2.1.10 [S] +[info] | | +-io.github.alexarchambault.windows-ansi:windows-ansi:0.0.5 +[info] | | | +-org.fusesource.jansi:jansi:1.18 +[info] | | | +[info] | | +-org.codehaus.plexus:plexus-archiver:4.9.0 +[info] | | | +-com.github.luben:zstd-jni:1.5.5-10 +[info] | | | +-commons-io:commons-io:2.15.0 (evicted by: 2.16.1) +[info] | | | +-commons-io:commons-io:2.16.1 +[info] | | | +-javax.inject:javax.inject:1 +[info] | | | +-org.apache.commons:commons-compress:1.24.0 +[info] | | | +-org.codehaus.plexus:plexus-io:3.4.1 +[info] | | | | +-commons-io:commons-io:2.11.0 (evicted by: 2.16.1) +[info] | | | | +-commons-io:commons-io:2.16.1 +[info] | | | | +-javax.inject:javax.inject:1 +[info] | | | | +-org.codehaus.plexus:plexus-utils:3.5.0 (evicted by: 4.0.0) +[info] | | | | +-org.codehaus.plexus:plexus-utils:4.0.0 +[info] | | | | +[info] | | | +-org.codehaus.plexus:plexus-utils:4.0.0 +[info] | | | +-org.iq80.snappy:snappy:0.4 +[info] | | | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | | | +-org.slf4j:slf4j-api:2.0.13 +[info] | | | +-org.tukaani:xz:1.9 +[info] | | | +[info] | | +-org.codehaus.plexus:plexus-container-default:2.1.1 +[info] | | | +-org.apache.xbean:xbean-reflect:3.7 +[info] | | | +-org.codehaus.plexus:plexus-classworlds:2.6.0 +[info] | | | +-org.codehaus.plexus:plexus-utils:3.1.1 (evicted by: 4.0.0) +[info] | | | +-org.codehaus.plexus:plexus-utils:4.0.0 +[info] | | | +[info] | | +-org.virtuslab.scala-cli:config_2.13:0.2.1 [S] +[info] | | +-com.github.plokhotnyuk.jsoniter-scala:jsoniter-scala-core_2.13:2.13... +[info] | | +[info] | +-io.get-coursier:coursier-core_2.13:2.1.10 [S] +[info] | | +-io.get-coursier:coursier-util_2.13:2.1.10 [S] +[info] | | +-io.github.alexarchambault:concurrent-reference-hash-map:1.1.0 +[info] | | +[info] | +-io.get-coursier:coursier-proxy-setup:2.1.10 +[info] | +[info] +-io.get-coursier:interface:1.0.19 +[info] | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | +-org.slf4j:slf4j-api:2.0.13 +[info] | +[info] +-io.get-coursier:versions_2.13:0.3.2 [S] +[info] +-io.github.alexarchambault.ammonite:ammonite-runner_2.13:0.4.0 [S] +[info] | +-io.get-coursier:coursier-launcher_2.13:2.0.16 [S] +[info] | +-io.get-coursier:interface:1.0.19 +[info] | | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | | +-org.slf4j:slf4j-api:2.0.13 +[info] | | +[info] | +-io.get-coursier:interface:1.0.8 (evicted by: 1.0.19) +[info] | +[info] +-io.undertow:undertow-core:2.2.20.Final +[info] | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | +-org.jboss.threads:jboss-threads:3.1.0.Final +[info] | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | +-org.wildfly.common:wildfly-common:1.5.0.Final (evicted by: 1.5.4.Final) +[info] | | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | | +[info] | +-org.jboss.xnio:xnio-api:3.8.16.Final +[info] | | +-org.jboss.threads:jboss-threads:2.3.6.Final (evicted by: 3.1.0.Final) +[info] | | +-org.jboss.threads:jboss-threads:3.1.0.Final +[info] | | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | | +-org.wildfly.common:wildfly-common:1.5.0.Final (evicted by: 1.5.4.Fin.. +[info] | | | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | | | +[info] | | +-org.wildfly.client:wildfly-client-config:1.0.1.Final +[info] | | | +-org.jboss.logging:jboss-logging:3.3.1.Final (evicted by: 3.4.1.Final) +[info] | | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | | +[info] | | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | | +[info] | +-org.jboss.xnio:xnio-api:3.8.7.Final (evicted by: 3.8.16.Final) +[info] | +-org.jboss.xnio:xnio-nio:3.8.16.Final +[info] | | +-org.jboss.xnio:xnio-api:3.8.16.Final +[info] | | +-org.jboss.threads:jboss-threads:2.3.6.Final (evicted by: 3.1.0.Final) +[info] | | +-org.jboss.threads:jboss-threads:3.1.0.Final +[info] | | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | | +-org.wildfly.common:wildfly-common:1.5.0.Final (evicted by: 1.5.4.F.. +[info] | | | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | | | +[info] | | +-org.wildfly.client:wildfly-client-config:1.0.1.Final +[info] | | | +-org.jboss.logging:jboss-logging:3.3.1.Final (evicted by: 3.4.1.Fin.. +[info] | | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | | +[info] | | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | | +[info] | +-org.jboss.xnio:xnio-nio:3.8.7.Final (evicted by: 3.8.16.Final) +[info] | +[info] +-org.eclipse.jdt:org.eclipse.jdt.core:3.25.0 +[info] +-org.eclipse.lsp4j:org.eclipse.lsp4j.debug:0.23.1 +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc.debug:0.23.1 +[info] | +-com.google.code.gson:gson:2.11.0 +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +[info] | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | +-com.google.code.gson:gson:2.11.0 +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +[info] | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | +[info] +-org.eclipse.lsp4j:org.eclipse.lsp4j:0.23.1 +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | +-com.google.code.gson:gson:2.11.0 +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +[info] | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | +[info] +-org.eclipse.platform:org.eclipse.ant.core:3.5.500 +[info] +-org.eclipse.platform:org.eclipse.compare.core:3.6.600 +[info] +-org.eclipse.platform:org.eclipse.core.commands:3.9.500 +[info] +-org.eclipse.platform:org.eclipse.core.contenttype:3.7.500 +[info] +-org.eclipse.platform:org.eclipse.core.expressions:3.6.500 +[info] +-org.eclipse.platform:org.eclipse.core.filesystem:1.7.500 +[info] +-org.eclipse.platform:org.eclipse.core.jobs:3.10.500 +[info] +-org.eclipse.platform:org.eclipse.core.resources:3.13.500 +[info] +-org.eclipse.platform:org.eclipse.core.runtime:3.16.0 +[info] +-org.eclipse.platform:org.eclipse.core.variables:3.4.600 +[info] +-org.eclipse.platform:org.eclipse.equinox.app:1.4.300 +[info] +-org.eclipse.platform:org.eclipse.equinox.common:3.10.600 +[info] +-org.eclipse.platform:org.eclipse.equinox.preferences:3.7.600 +[info] +-org.eclipse.platform:org.eclipse.equinox.registry:3.8.600 +[info] +-org.eclipse.platform:org.eclipse.osgi:3.15.0 +[info] +-org.eclipse.platform:org.eclipse.team.core:3.8.700 +[info] +-org.eclipse.platform:org.eclipse.text:3.9.0 +[info] +-org.flywaydb:flyway-core:9.22.3 +[info] | +-com.fasterxml.jackson.dataformat:jackson-dataformat-toml:2.15.2 +[info] | | +-com.fasterxml.jackson.core:jackson-core:2.15.2 +[info] | | +-com.fasterxml.jackson.core:jackson-databind:2.15.2 +[info] | | +-com.fasterxml.jackson.core:jackson-annotations:2.15.2 +[info] | | +-com.fasterxml.jackson.core:jackson-core:2.15.2 +[info] | | +[info] | +-com.google.code.gson:gson:2.10.1 (evicted by: 2.11.0) +[info] | +-com.google.code.gson:gson:2.11.0 +[info] | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | +[info] +-org.jboss.xnio:xnio-nio:3.8.16.Final +[info] | +-org.jboss.xnio:xnio-api:3.8.16.Final +[info] | +-org.jboss.threads:jboss-threads:2.3.6.Final (evicted by: 3.1.0.Final) +[info] | +-org.jboss.threads:jboss-threads:3.1.0.Final +[info] | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | +-org.wildfly.common:wildfly-common:1.5.0.Final (evicted by: 1.5.4.Fin.. +[info] | | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | | +[info] | +-org.wildfly.client:wildfly-client-config:1.0.1.Final +[info] | | +-org.jboss.logging:jboss-logging:3.3.1.Final (evicted by: 3.4.1.Final) +[info] | | +-org.jboss.logging:jboss-logging:3.4.1.Final +[info] | | +[info] | +-org.wildfly.common:wildfly-common:1.5.4.Final +[info] | +[info] +-org.openjdk.jol:jol-core:0.17 +[info] +-org.scala-lang.modules:scala-parallel-collections_3:1.0.4 +[info] | +-org.scala-lang:scala3-library_3:3.0.2 (evicted by: 3.4.2) +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-org.scala-lang.modules:scala-xml_3:2.3.0 +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] +-org.scala-sbt.ipcsocket:ipcsocket:1.6.2 +[info] | +-net.java.dev.jna:jna-platform:5.12.0 +[info] | | +-net.java.dev.jna:jna:5.12.0 +[info] | | +[info] | +-net.java.dev.jna:jna:5.12.0 +[info] | +[info] +-org.scalameta:mdoc-interfaces:2.5.4 +[info] | +-io.get-coursier:interface:1.0.19 +[info] | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | +-org.slf4j:slf4j-api:2.0.13 +[info] | +[info] +-org.scalameta:metaconfig-core_3:0.13.0 +[info] | +-org.scala-lang.modules:scala-collection-compat_3:2.12.0 +[info] | | +-org.scala-lang:scala3-library_3:3.2.2 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala-reflect:2.13.14 [S] +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +-org.scalameta:metaconfig-pprint_3:0.13.0 +[info] | | +-com.lihaoyi:fansi_3:0.5.0 +[info] | | | +-com.lihaoyi:sourcecode_3:0.4.0 (evicted by: 0.4.2) +[info] | | | +-com.lihaoyi:sourcecode_3:0.4.2 +[info] | | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.typelevel:paiges-core_3:0.4.4 +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +[info] +-org.scalameta:mtags-java_3:1.3.6-SNAPSHOT +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +-org.scalameta:mtags-interfaces:1.3.6-SNAPSHOT +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j:0.23.1 +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | | +-com.google.code.gson:gson:2.11.0 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +[info] | | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | | +[info] | +-org.scalameta:mtags-shared_3.3.3:1.3.6-SNAPSHOT +[info] | +-com.google.guava:guava:33.2.1-jre +[info] | | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicted by: 2... +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +-com.google.guava:failureaccess:1.0.2 +[info] | | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-wit.. +[info] | | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | | +-org.checkerframework:checker-qual:3.42.0 +[info] | | +[info] | +-com.google.protobuf:protobuf-java:4.27.3 +[info] | +-io.get-coursier:interface:1.0.19 +[info] | | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | | +-org.slf4j:slf4j-api:2.0.13 +[info] | | +[info] | +-org.lz4:lz4-java:1.8.0 +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +-org.scalameta:mtags-interfaces:1.3.6-SNAPSHOT +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j:0.23.1 +[info] | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | +-com.google.code.gson:gson:2.11.0 +[info] | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | +[info] | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | +[info] +-org.scalameta:mtags_3.3.3:1.3.6-SNAPSHOT +[info] | +-com.lihaoyi:geny_3:1.0.0 (evicted by: 1.1.1) +[info] | +-com.lihaoyi:geny_3:1.1.1 +[info] | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-com.lihaoyi:pprint_3:0.7.3 +[info] | | +-com.lihaoyi:fansi_3:0.3.1 (evicted by: 0.5.0) +[info] | | +-com.lihaoyi:fansi_3:0.5.0 +[info] | | | +-com.lihaoyi:sourcecode_3:0.4.0 (evicted by: 0.4.2) +[info] | | | +-com.lihaoyi:sourcecode_3:0.4.2 +[info] | | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-com.lihaoyi:sourcecode_3:0.2.8 (evicted by: 0.4.2) +[info] | | +-com.lihaoyi:sourcecode_3:0.4.2 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.1 (evicted by: 3.4.2) +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.0.2 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-com.thoughtworks.qdox:qdox:2.1.0 +[info] | +-io.get-coursier:interface:1.0.19 +[info] | | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | | +-org.slf4j:slf4j-api:2.0.13 +[info] | | +[info] | +-org.jsoup:jsoup:1.18.1 +[info] | +-org.lz4:lz4-java:1.8.0 +[info] | +-org.scala-lang.modules:scala-java8-compat_3:1.0.2 +[info] | | +-org.scala-lang:scala3-library_3:3.0.2 (evicted by: 3.4.2) +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +[info] | +-org.scala-lang:scala3-compiler_3:3.3.3 +[info] | | +-org.jline:jline-reader:3.19.0 +[info] | | | +-org.jline:jline-terminal:3.19.0 +[info] | | | +[info] | | +-org.jline:jline-terminal-jna:3.19.0 +[info] | | | +-net.java.dev.jna:jna:5.12.0 +[info] | | | +-net.java.dev.jna:jna:5.3.1 (evicted by: 5.12.0) +[info] | | | +-org.jline:jline-terminal:3.19.0 +[info] | | | +[info] | | +-org.jline:jline-terminal:3.19.0 +[info] | | +-org.scala-lang.modules:scala-asm:9.5.0-scala-1 +[info] | | +-org.scala-lang:scala3-interfaces:3.3.3 +[info] | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +-org.scala-lang:tasty-core_3:3.3.3 +[info] | | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cyc.. +[info] | | | | +[info] | | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | | +[info] | | +-org.scala-sbt:compiler-interface:1.9.3 +[info] | | +-org.scala-sbt:util-interface:1.9.2 +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | +[info] | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | +-org.scalameta:mtags-shared_3.3.3:1.3.6-SNAPSHOT +[info] | | +-com.google.guava:guava:33.2.1-jre +[info] | | | +-com.google.code.findbugs:jsr305:3.0.2 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.26.1 (evicted by: 2... +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +-com.google.guava:failureaccess:1.0.2 +[info] | | | +-com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-wit.. +[info] | | | +-com.google.j2objc:j2objc-annotations:3.0.0 +[info] | | | +-org.checkerframework:checker-qual:3.42.0 +[info] | | | +[info] | | +-com.google.protobuf:protobuf-java:4.27.3 +[info] | | +-io.get-coursier:interface:1.0.19 +[info] | | | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | | | +-org.slf4j:slf4j-api:2.0.13 +[info] | | | +[info] | | +-org.lz4:lz4-java:1.8.0 +[info] | | +-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) +[info] | | | #-org.scala-lang:scala3-library_3:3.3.3 [S] (evicted by: 3.4.2) (cycle) +[info] | | | +[info] | | +-org.scala-lang:scala3-library_3:3.4.2 [S] +[info] | | +-org.scalameta:mtags-interfaces:1.3.6-SNAPSHOT +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j:0.23.1 +[info] | | +-org.eclipse.lsp4j:org.eclipse.lsp4j.jsonrpc:0.23.1 +[info] | | +-com.google.code.gson:gson:2.11.0 +[info] | | | +-com.google.errorprone:error_prone_annotations:2.27.0 +[info] | | | +[info] | | +-com.google.code.gson:gson:[2.9.1,3.0) (evicted by: 2.11.0) +[info] | | +[info] | +-org.scalameta:scalameta_2.13:4.9.9 +[info] | | +-org.scala-lang:scalap:2.13.11 +[info] | | +-org.scalameta:parsers_2.13:4.9.9 [S] +[info] | | +-org.scalameta:trees_2.13:4.9.9 [S] +[info] | | +-org.scalameta:common_2.13:4.9.9 [S] +[info] | | +-com.lihaoyi:sourcecode_2.13:0.4.2 [S] +[info] | | +[info] | +-org.scalameta:semanticdb-shared_2.13.14:4.9.9 +[info] | +-com.thesamet.scalapb:scalapb-runtime_2.13:0.11.17 +[info] | | +-com.google.protobuf:protobuf-java:3.19.6 (evicted by: 4.27.3) +[info] | | +-com.google.protobuf:protobuf-java:4.27.3 +[info] | | +-com.thesamet.scalapb:lenses_2.13:0.11.17 +[info] | | +[info] | +-org.scalameta:scalameta_2.13:4.9.9 +[info] | +-org.scala-lang:scalap:2.13.11 +[info] | +-org.scalameta:parsers_2.13:4.9.9 [S] +[info] | +-org.scalameta:trees_2.13:4.9.9 [S] +[info] | +-org.scalameta:common_2.13:4.9.9 [S] +[info] | +-com.lihaoyi:sourcecode_2.13:0.4.2 [S] +[info] | +[info] +-org.scalameta:scalafmt-dynamic_2.13:3.7.15 [S] +[info] | +-com.typesafe:config:1.4.2 +[info] | +-io.get-coursier:interface:0.0.17 (evicted by: 1.0.19) +[info] | +-io.get-coursier:interface:1.0.19 +[info] | | +-org.slf4j:slf4j-api:1.7.36 (evicted by: 2.0.13) +[info] | | +-org.slf4j:slf4j-api:2.0.13 +[info] | | +[info] | +-org.scalameta:scalafmt-interfaces:3.7.15 +[info] | +[info] +-org.scalameta:scalameta_2.13:4.9.9 +[info] | +-org.scala-lang:scalap:2.13.11 +[info] | +-org.scalameta:parsers_2.13:4.9.9 [S] +[info] | +-org.scalameta:trees_2.13:4.9.9 [S] +[info] | +-org.scalameta:common_2.13:4.9.9 [S] +[info] | +-com.lihaoyi:sourcecode_2.13:0.4.2 [S] +[info] | +[info] +-org.scalameta:semanticdb-metap_2.13.14:4.9.9 +[info] | +-org.scalameta:semanticdb-shared_2.13.14:4.9.9 +[info] | +-com.thesamet.scalapb:scalapb-runtime_2.13:0.11.17 +[info] | | +-com.google.protobuf:protobuf-java:3.19.6 (evicted by: 4.27.3) +[info] | | +-com.google.protobuf:protobuf-java:4.27.3 +[info] | | +-com.thesamet.scalapb:lenses_2.13:0.11.17 +[info] | | +[info] | +-org.scalameta:scalameta_2.13:4.9.9 +[info] | +-org.scala-lang:scalap:2.13.11 +[info] | +-org.scalameta:parsers_2.13:4.9.9 [S] +[info] | +-org.scalameta:trees_2.13:4.9.9 [S] +[info] | +-org.scalameta:common_2.13:4.9.9 [S] +[info] | +-com.lihaoyi:sourcecode_2.13:0.4.2 [S] +[info] | +[info] +-org.scalameta:semanticdb-shared_2.13.14:4.9.9 +[info] | +-com.thesamet.scalapb:scalapb-runtime_2.13:0.11.17 +[info] | | +-com.google.protobuf:protobuf-java:3.19.6 (evicted by: 4.27.3) +[info] | | +-com.google.protobuf:protobuf-java:4.27.3 +[info] | | +-com.thesamet.scalapb:lenses_2.13:0.11.17 +[info] | | +[info] | +-org.scalameta:scalameta_2.13:4.9.9 +[info] | +-org.scala-lang:scalap:2.13.11 +[info] | +-org.scalameta:parsers_2.13:4.9.9 [S] +[info] | +-org.scalameta:trees_2.13:4.9.9 [S] +[info] | +-org.scalameta:common_2.13:4.9.9 [S] +[info] | +-com.lihaoyi:sourcecode_2.13:0.4.2 [S] +[info] | +[info] +-org.virtuslab.scala-cli:scala-cli-bsp:1.4.3 +[info] +[success] Total time: 1 s, completed Aug 16, 2024, 6:21:36 PM diff --git a/metals/src/main/scala/scala/meta/internal/implementation/Supermethods.scala b/metals/src/main/scala/scala/meta/internal/implementation/Supermethods.scala index e6fff1f3217..2f2b9538508 100644 --- a/metals/src/main/scala/scala/meta/internal/implementation/Supermethods.scala +++ b/metals/src/main/scala/scala/meta/internal/implementation/Supermethods.scala @@ -81,6 +81,7 @@ class Supermethods( filePath, textDocument, ) + // TODO fallback to compilers symbolInformation <- findSymbol(symbolOcc.symbol) gotoSymbol <- { if (symbolOcc.role.isDefinition) { diff --git a/metals/src/main/scala/scala/meta/internal/metals/ConnectionProvider.scala b/metals/src/main/scala/scala/meta/internal/metals/ConnectionProvider.scala index 91debfe58dd..d145f9af8c6 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/ConnectionProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/ConnectionProvider.scala @@ -240,7 +240,8 @@ class ConnectionProvider( case _ if !session.canReloadWorkspace => connect(CreateSession()) case _ => - session.workspaceReload + session + .workspaceReload() .flatMap(_ => connect(new ImportBuildAndIndex(session))) .map { _ => scribe.info("Correctly reloaded workspace") diff --git a/metals/src/main/scala/scala/meta/internal/metals/Indexer.scala b/metals/src/main/scala/scala/meta/internal/metals/Indexer.scala index 1eb47a8ae65..aee740bf9f3 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/Indexer.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/Indexer.scala @@ -62,7 +62,7 @@ case class Indexer(indexProviders: IndexProviders)(implicit rc: ReportContext) { }, ) tracked.foreach { _ => - statusBar().addMessage( + statusBar.addMessage( s"${clientConfig.icons().rocket} Indexing complete!" ) if (clientConfig.initialConfig.statistics.isMemory) { diff --git a/metals/src/main/scala/scala/meta/internal/metals/MetalsLspService.scala b/metals/src/main/scala/scala/meta/internal/metals/MetalsLspService.scala index 04664bfc878..dd19874f11c 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/MetalsLspService.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/MetalsLspService.scala @@ -1571,8 +1571,8 @@ abstract class MetalsLspService( ): Future[Unit] = { paths .find { path => - if (clientConfig.isDidFocusProvider() || focusedDocument().isDefined) { - focusedDocument().contains(path) && + if (clientConfig.isDidFocusProvider() || focusedDocument.isDefined) { + focusedDocument.contains(path) && path.isWorksheet } else { path.isWorksheet diff --git a/metals/src/main/scala/scala/meta/internal/metals/ProjectMetalsLspService.scala b/metals/src/main/scala/scala/meta/internal/metals/ProjectMetalsLspService.scala index 23151fb08c8..68c439e767a 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/ProjectMetalsLspService.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/ProjectMetalsLspService.scala @@ -533,7 +533,7 @@ class ProjectMetalsLspService( ).ignoreValue case buildTools => for { - Some(buildTool) <- bspConfigGenerator.chooseBuildServerProvider( + case Some(buildTool) <- bspConfigGenerator.chooseBuildServerProvider( buildTools ) _ <- connect( diff --git a/metals/src/main/scala/scala/meta/internal/metals/ReferenceProvider.scala b/metals/src/main/scala/scala/meta/internal/metals/ReferenceProvider.scala index 97db92551a9..93b52ac8f09 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/ReferenceProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/ReferenceProvider.scala @@ -14,6 +14,7 @@ import scala.util.matching.Regex import scala.meta.Importee import scala.meta.internal.metals.MetalsEnrichments.given +import scala.meta.internal.metals.MetalsEnrichments._ import scala.meta.internal.mtags.DefinitionAlternatives.GlobalSymbol import scala.meta.internal.mtags.Semanticdbs import scala.meta.internal.mtags.Symbol diff --git a/metals/src/main/scala/scala/meta/internal/metals/SqlSharedIndices.scala b/metals/src/main/scala/scala/meta/internal/metals/SqlSharedIndices.scala index 1a642a590a1..8bc24ea222f 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/SqlSharedIndices.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/SqlSharedIndices.scala @@ -12,5 +12,5 @@ class SqlSharedIndices migrations = "/shared-db/migration", ) { - val jvmTypeHierarchy: JarTypeHierarchy = new JarTypeHierarchy(() => connect) + val jvmTypeHierarchy: JarTypeHierarchy = new JarTypeHierarchy(() => connect()) } diff --git a/metals/src/main/scala/scala/meta/internal/metals/codeactions/ConvertToNamedArguments.scala b/metals/src/main/scala/scala/meta/internal/metals/codeactions/ConvertToNamedArguments.scala index 5f6b90a1356..03399ff54e5 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/codeactions/ConvertToNamedArguments.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/codeactions/ConvertToNamedArguments.scala @@ -149,7 +149,7 @@ class ConvertToNamedArguments( ServerCommands .ConvertToNamedArgsRequest( position, - apply.argIndices.map(Integer.valueOf).asJava, + apply.argIndices.map(Integer.valueOf).toArray, ) ) diff --git a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugDiscovery.scala b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugDiscovery.scala index 9599e26a86f..379b6596c57 100644 --- a/metals/src/main/scala/scala/meta/internal/metals/debug/DebugDiscovery.scala +++ b/metals/src/main/scala/scala/meta/internal/metals/debug/DebugDiscovery.scala @@ -326,7 +326,7 @@ class DebugDiscovery( .flatMap(scalaTarget => JavaBinary.javaBinaryFromPath(scalaTarget.jvmHome) ) - .orElse(userConfig().usedJavaBinary) + .orElse(userConfig().usedJavaBinary()) buildTargetClasses .jvmRunEnvironment(params.getTargets().get(0)) .map { envItem => diff --git a/metals/src/main/scala/scala/meta/internal/rename/RenameProvider.scala b/metals/src/main/scala/scala/meta/internal/rename/RenameProvider.scala index 744efd65a01..60e65596a13 100644 --- a/metals/src/main/scala/scala/meta/internal/rename/RenameProvider.scala +++ b/metals/src/main/scala/scala/meta/internal/rename/RenameProvider.scala @@ -50,6 +50,7 @@ import org.eclipse.lsp4j.VersionedTextDocumentIdentifier import org.eclipse.lsp4j.WorkspaceEdit import org.eclipse.lsp4j.jsonrpc.messages.{Either => LSPEither} import org.eclipse.lsp4j.{Range => LSPRange} +import scala.meta.internal.pc.PcSymbolInformation final class RenameProvider( referenceProvider: ReferenceProvider, @@ -117,6 +118,7 @@ final class RenameProvider( token: CancelToken, ): Future[WorkspaceEdit] = { val source = params.getTextDocument.getUri.toAbsolutePath + // val scalaVersion = val localRename = compilers .rename(params, token) .map(_.asScala.toList) @@ -164,7 +166,8 @@ final class RenameProvider( if (suggestedName.isBackticked) suggestedName.stripBackticks else suggestedName - val newName = Identifier.backtickWrap(withoutBackticks) + val newName = + KeywordWrapper.Scala3().backtickWrap(withoutBackticks) def isNotRenamedSymbol( textDocument: TextDocument, @@ -179,15 +182,6 @@ final class RenameProvider( foundName.contains(realName) } - def shouldCheckImplementation( - symbol: String, - path: AbsolutePath, - textDocument: TextDocument, - ) = - !symbol.desc.isType && !(symbol.isLocal && symbolHierarchyOps - .defaultSymbolSearch(path, textDocument)(symbol) - .exists(info => info.isTrait || info.isClass)) - val allReferences = for { (occurence, semanticDb) <- symbolOccurrence.toIterable @@ -235,13 +229,14 @@ final class RenameProvider( source, newName, ) + shouldCheckImplementationFut = shouldCheckImplementation( + occurence.symbol, + source, + semanticDb, + ) implReferences = implementations( txtParams, - shouldCheckImplementation( - occurence.symbol, - source, - semanticDb, - ), + shouldCheckImplementationFut, newName, ) } yield Future @@ -327,6 +322,32 @@ final class RenameProvider( Future.sequence(all.map(waiting => waiting())).ignoreValue } + private def shouldCheckImplementation( + symbol: String, + path: AbsolutePath, + textDocument: TextDocument, + ): Future[Boolean] = { + val notLocalAndType = !symbol.desc.isType && !symbol.isLocal + + if (notLocalAndType) Future.successful(true) + else if (!symbol.isLocal) Future.successful(false) + else + symbolHierarchyOps + .defaultSymbolSearch(path, textDocument)(symbol) + .match { + case Some(info) => + Future.successful(info.isTrait || info.isClass) + case None => + compilers.info(path, symbol).map { + case None => false + case Some(value) => + value.kind.getValue() == 13 || + value.kind.getValue() == 14 + } + + } + } + /** * In case of import renames, we can only rename the symbol in file. * Global rename will not return any results, so this method will be used as @@ -466,31 +487,32 @@ final class RenameProvider( private def implementations( textParams: TextDocumentPositionParams, - shouldCheckImplementation: Boolean, + shouldCheckImplementationFut: Future[Boolean], newName: String, - ): Future[Seq[Location]] = { - if (shouldCheckImplementation) { - for { - implLocs <- implementationProvider.implementations(textParams) - result <- { - val result = for { - implLoc <- implLocs - locParams = toReferenceParams(implLoc, includeDeclaration = true) - } yield { - referenceProvider - .references( - locParams, - findRealRange = AdjustRange(findRealRange(newName)), - includeSynthetic, - ) - .map(_.flatMap(_.locations)) + ): Future[Seq[Location]] = shouldCheckImplementationFut.flatMap { + shouldCheckImplementation => + if (shouldCheckImplementation) { + for { + implLocs <- implementationProvider.implementations(textParams) + result <- { + val result = for { + implLoc <- implLocs + locParams = toReferenceParams(implLoc, includeDeclaration = true) + } yield { + referenceProvider + .references( + locParams, + findRealRange = AdjustRange(findRealRange(newName)), + includeSynthetic, + ) + .map(_.flatMap(_.locations)) + } + Future.sequence(result) } - Future.sequence(result) - } - } yield result.flatten - } else { - Future.successful(Nil) - } + } yield result.flatten + } else { + Future.successful(Nil) + } } private def canRenameSymbol( diff --git a/metals/src/main/scala/scala/meta/internal/search/GlobalClassTable.scala b/metals/src/main/scala/scala/meta/internal/search/GlobalClassTable.scala deleted file mode 100644 index f74aad8e946..00000000000 --- a/metals/src/main/scala/scala/meta/internal/search/GlobalClassTable.scala +++ /dev/null @@ -1,33 +0,0 @@ -package scala.meta.internal.search -import scala.collection.concurrent.TrieMap - -import scala.meta.internal.metals.BuildTargets -import scala.meta.internal.symtab.GlobalSymbolTable -import scala.meta.io.AbsolutePath -import scala.meta.io.Classpath - -import ch.epfl.scala.bsp4j.BuildTargetIdentifier - -final class GlobalClassTable( - buildTargets: BuildTargets -) { - private val buildTargetsIndexes = - TrieMap.empty[BuildTargetIdentifier, GlobalSymbolTable] - - def globalSymbolTableFor( - source: AbsolutePath - ): Option[GlobalSymbolTable] = - synchronized { - for { - buildTargetId <- buildTargets.inverseSources(source) - jarClasspath <- buildTargets.targetJarClasspath(buildTargetId) - classpath = new Classpath(jarClasspath) - } yield { - buildTargetsIndexes.getOrElseUpdate( - buildTargetId, - GlobalSymbolTable(classpath, includeJdk = true), - ) - } - } - -} diff --git a/metals/src/main/scala/scala/meta/internal/search/SymbolHierarchyOps.scala b/metals/src/main/scala/scala/meta/internal/search/SymbolHierarchyOps.scala index 813b5d0ef9b..b4f4340c4bf 100644 --- a/metals/src/main/scala/scala/meta/internal/search/SymbolHierarchyOps.scala +++ b/metals/src/main/scala/scala/meta/internal/search/SymbolHierarchyOps.scala @@ -22,7 +22,6 @@ import scala.meta.internal.semanticdb.SymbolOccurrence import scala.meta.internal.semanticdb.TextDocument import scala.meta.internal.semanticdb.TypeRef import scala.meta.internal.semanticdb.XtensionSemanticdbSymbolInformation -import scala.meta.internal.symtab.GlobalSymbolTable import scala.meta.io.AbsolutePath import org.eclipse.lsp4j.Location @@ -36,18 +35,14 @@ class SymbolHierarchyOps( buffer: Buffers, trees: Trees, ) { - private val globalTable = new GlobalClassTable(buildTargets) def defaultSymbolSearch( anyWorkspacePath: AbsolutePath, textDocument: TextDocument, - ): String => Option[SymbolInformation] = { - lazy val global = - globalTable.globalSymbolTableFor(anyWorkspacePath) - symbol => { + ): String => Option[SymbolInformation] = { symbol => + { textDocument.symbols .find(_.symbol == symbol) .orElse(findSymbolInformation(symbol)) - .orElse(global.flatMap(_.safeInfo(symbol))) } } @@ -195,15 +190,6 @@ object SymbolHierarchyOps { .find(sym => sym.symbol == symbol) } - implicit class XtensionGlobalSymbolTable(symtab: GlobalSymbolTable) { - def safeInfo(symbol: String): Option[SymbolInformation] = - try { - symtab.info(symbol) - } catch { - case NonFatal(_) => None - } - } - def isClassLike(info: SymbolInformation): Boolean = info.isObject || info.isClass || info.isTrait || info.isInterface diff --git a/metals/src/main/scala/scala/meta/internal/tvp/ScalacpCopyPaste.scala b/metals/src/main/scala/scala/meta/internal/tvp/ScalacpCopyPaste.scala deleted file mode 100644 index 1129a168fd1..00000000000 --- a/metals/src/main/scala/scala/meta/internal/tvp/ScalacpCopyPaste.scala +++ /dev/null @@ -1,498 +0,0 @@ -package scala.meta.internal.tvp - -import java.{util => ju} - -import scala.collection.mutable -import scala.reflect.NameTransformer -import scala.tools.scalap.scalax.rules.scalasig._ - -import scala.meta.internal.scalacp._ -import scala.meta.internal.semanticdb.Scala._ -import scala.meta.internal.semanticdb.Scala.{Descriptor => d} -import scala.meta.internal.semanticdb.Scala.{DisplayNames => dn} -import scala.meta.internal.semanticdb.Scala.{Names => n} -import scala.meta.internal.semanticdb.SymbolInformation.{Kind => k} -import scala.meta.internal.semanticdb.SymbolInformation.{Property => p} -import scala.meta.internal.semanticdb.{Language => l} -import scala.meta.internal.{semanticdb => s} - -/** - * This class contains copy-pasted code from scala.meta.internal.scalacp with minor changes. - * - * If the `Scalacp` class was not final then we could avoid this copy-pasting. Changes are - * documented with "// scalacp deviation" comments. - */ -object ScalacpCopyPaste { - lazy val symbolCache = new ju.HashMap[Symbol, String] - implicit class XtensionSymbolSSymbol(sym: Symbol) { - def toSemantic: String = { - def uncached(sym: Symbol): String = { - if (sym.isSemanticdbGlobal) Symbols.Global(sym.owner, sym.descriptor) - else freshSymbol() - } - val ssym = symbolCache.get(sym) - if (ssym != null) { - ssym - } else { - val ssym = uncached(sym) - symbolCache.put(sym, ssym) - ssym - } - } - } - - implicit class XtensionSymbolSSpec(sym: Symbol) { - def isSemanticdbGlobal: Boolean = !isSemanticdbLocal - def isSemanticdbLocal: Boolean = { - val owner = sym.parent.getOrElse(NoSymbol) - def definitelyGlobal = sym.isPackage - def definitelyLocal = - sym == NoSymbol || - (owner.isInstanceOf[MethodSymbol] && !sym.isParam) || - ((owner.isAlias || (owner.isType && owner.isDeferred)) && !sym.isParam) || - // NOTE: Scalap doesn't expose locals. - // sym.isSelfParameter || - // sym.isLocalDummy || - sym.isRefinementClass || - sym.isAnonymousClass || - sym.isAnonymousFunction || - (sym.isInstanceOf[TypeSymbol] && sym.isExistential) - def ownerLocal = sym.parent.map(_.isSemanticdbLocal).getOrElse(false) - !definitelyGlobal && (definitelyLocal || ownerLocal) - } - def owner: String = { - if (sym.isRootPackage) Symbols.None - else if (sym.isEmptyPackage) Symbols.RootPackage - else if (sym.isToplevelPackage) Symbols.RootPackage - else { - sym.parent match { - case Some(NoSymbol) => "" - case Some(parent) => parent.ssym - case None => sys.error(s"unsupported symbol $sym") - } - } - } - def symbolName: String = { - if (sym.isRootPackage) n.RootPackage.value - else if (sym.isEmptyPackage) n.EmptyPackage.value - else if (sym.isConstructor) n.Constructor.value - else { - def loop(value: String): String = { - val i = value.lastIndexOf("$$") - if (i > 0) loop(value.substring(i + 2)) - else NameTransformer.decode(value).stripSuffix(" ") - } - loop(sym.name) - } - } - def descriptor: Descriptor = { - sym match { - case sym: SymbolInfoSymbol => - sym.kind match { - case k.LOCAL | k.OBJECT | k.PACKAGE_OBJECT => - d.Term(symbolName) - case k.METHOD if sym.isValMethod => - d.Term(symbolName) - case k.METHOD | k.CONSTRUCTOR | k.MACRO => - val overloads = { - val peers = sym.parent.get.semanticdbDecls.syms - peers.filter { - case peer: MethodSymbol => - peer.symbolName == sym.symbolName && !peer.isValMethod - case _ => false - } - } - val disambiguator = { - if (overloads.lengthCompare(1) == 0) "()" - else { - val index = overloads.indexOf(sym) - if (index <= 0) "()" - else s"(+${index})" - } - } - d.Method(symbolName, disambiguator) - case k.TYPE | k.CLASS | k.TRAIT => - d.Type(symbolName) - case k.PACKAGE => - d.Package(symbolName) - case k.PARAMETER => - d.Parameter(symbolName) - case k.TYPE_PARAMETER => - d.TypeParameter(symbolName) - case skind => - sys.error(s"unsupported kind $skind for symbol $sym") - } - case sym: ExternalSymbol => - // scalacp deviation: since we are only interested in definitions (not - // signatures) it's safe to emit `d.Package` for all term references. - if (sym.entry.entryType == 9) d.Type(symbolName) - else if (sym.entry.entryType == 10) d.Package(symbolName) - else d.Type(symbolName) - case NoSymbol => - d.None - } - } - def semanticdbDecls: SemanticdbDecls = { - val decls = - sym.children.filter(decl => decl.isUseful && !decl.isTypeParam) - SemanticdbDecls(decls.toList) - } - } - - implicit class XtensionSymbolsSSpec(syms: Seq[Symbol]) { - def semanticdbDecls: SemanticdbDecls = { - SemanticdbDecls(syms.filter(_.isUseful)) - } - - def sscope(linkMode: LinkMode): s.Scope = { - linkMode match { - case SymlinkChildren => - s.Scope(symlinks = syms.map(_.ssym)) - case HardlinkChildren => - syms.map(registerHardlink) - val hardlinks = syms.map { - case sym: SymbolInfoSymbol => - sym.toSymbolInformation(HardlinkChildren) - case sym => sys.error(s"unsupported symbol $sym") - } - s.Scope(hardlinks = hardlinks) - } - } - } - - case class SemanticdbDecls(syms: Seq[Symbol]) { - def sscope(linkMode: LinkMode): s.Scope = { - linkMode match { - case SymlinkChildren => - val sbuf = List.newBuilder[String] - syms.foreach { sym => - val ssym = sym.ssym - sbuf += ssym - if (sym.isUsefulField && sym.isMutable) { - val setterSymbolName = ssym.desc.name.toString + "_=" - val setterSym = - Symbols.Global(ssym.owner, d.Method(setterSymbolName, "()")) - sbuf += setterSym - } - } - s.Scope(sbuf.result()) - case HardlinkChildren => - val sbuf = List.newBuilder[s.SymbolInformation] - syms.foreach { sym => - registerHardlink(sym) - val sinfo = sym match { - case sym: SymbolInfoSymbol => - sym.toSymbolInformation(HardlinkChildren) - case sym => sys.error(s"unsupported symbol $sym") - } - sbuf += sinfo - if (sym.isUsefulField && sym.isMutable) { - Synthetics.setterInfos(sinfo, HardlinkChildren).foreach(sbuf.+=) - } - } - s.Scope(hardlinks = sbuf.result()) - } - } - } - - implicit class XtensionSymbol(sym: Symbol) { - def ssym: String = sym.toSemantic - def self: Type = - sym match { - case sym: ClassSymbol => - sym.selfType - .map { - case RefinedType(_, List(_, self)) => self - case _ => NoType - } - .getOrElse(NoType) - case _ => - NoType - } - def isRootPackage: Boolean = sym.path == "" - def isEmptyPackage: Boolean = sym.path == "" - def isToplevelPackage: Boolean = sym.parent.isEmpty - def isModuleClass: Boolean = sym.isInstanceOf[ClassSymbol] && sym.isModule - def moduleClass: Symbol = - sym match { - case sym: SymbolInfoSymbol if sym.isModule => - sym.infoType match { - case TypeRefType(_, moduleClass, _) => moduleClass - case _ => NoSymbol - } - case _ => - NoSymbol - } - def isClass: Boolean = sym.isInstanceOf[ClassSymbol] && !sym.isModule - def isObject: Boolean = sym.isInstanceOf[ObjectSymbol] - def isType: Boolean = sym.isInstanceOf[TypeSymbol] - def isAlias: Boolean = sym.isInstanceOf[AliasSymbol] - def isMacro: Boolean = sym.isMethod && sym.hasFlag(0x00008000) - def isConstructor: Boolean = - sym.isMethod && (sym.name == "" || sym.name == "$init$") - def isPackageObject: Boolean = sym.name == "package" - def isTypeParam: Boolean = sym.isType && sym.isParam - def isAnonymousClass: Boolean = sym.name.contains("$anon") - def isAnonymousFunction: Boolean = sym.name.contains("$anonfun") - def isSyntheticConstructor: Boolean = - sym match { - case sym: SymbolInfoSymbol => - val owner = sym.symbolInfo.owner - sym.isConstructor && (owner.isModuleClass || owner.isTrait) - case _ => - false - } - def isLocalChild: Boolean = sym.name == "" - def isExtensionMethod: Boolean = sym.name.contains("$extension") - def isSyntheticValueClassCompanion: Boolean = { - sym match { - case sym: SymbolInfoSymbol => - if (sym.isModuleClass) { - sym.infoType match { - case ClassInfoType(_, List(TypeRefType(_, _, _))) => - sym.isSynthetic && sym.semanticdbDecls.syms.isEmpty - case _ => - false - } - } else if (sym.isModule) { - sym.moduleClass.isSyntheticValueClassCompanion - } else { - false - } - case _ => - false - } - } - def isValMethod: Boolean = { - sym match { - case sym: SymbolInfoSymbol => - sym.kind.isMethod && { - (sym.isAccessor && sym.isStable) || - (isUsefulField && !sym.isMutable) - } - case _ => - false - } - } - def isScalacField: Boolean = { - val isField = sym - .isInstanceOf[MethodSymbol] && !sym.isMethod && !sym.isParam - val isJavaDefined = sym.isJava - isField && !isJavaDefined - } - def isUselessField: Boolean = { - val peers = sym.parent.map(_.children.toList).getOrElse(Nil) - val getter = - peers.find(m => m.isAccessor && m.name == sym.name.stripSuffix(" ")) - sym.isScalacField && getter.nonEmpty - } - def isUsefulField: Boolean = { - sym.isScalacField && !sym.isUselessField - } - def isSyntheticCaseAccessor: Boolean = { - sym.isCaseAccessor && sym.name.contains("$") - } - def isRefinementClass: Boolean = { - sym.name == "" - } - def isUseless: Boolean = { - sym == NoSymbol || - sym.isAnonymousClass || - sym.isSyntheticConstructor || - sym.isModuleClass || - sym.isLocalChild || - sym.isExtensionMethod || - sym.isSyntheticValueClassCompanion || - sym.isUselessField || - sym.isSyntheticCaseAccessor || - sym.isRefinementClass - } - def isUseful: Boolean = !sym.isUseless - def isDefaultParameter: Boolean = { - sym.hasFlag(0x02000000) && sym.isParam - } - } - - private var nextId = 0 - private def freshSymbol(): String = { - val result = Symbols.Local(nextId.toString) - nextId += 1 - result - } - - lazy val hardlinks = new ju.HashSet[String] - private def registerHardlink(sym: Symbol): Unit = { - hardlinks.add(sym.ssym) - } - - private val primaryCtors = mutable.Map[String, Int]() - implicit class XtensionGSymbolSSymbolInformation(sym: SymbolInfoSymbol) { - private def language: s.Language = { - // NOTE: We have no way to figure out whether an external symbol - // comes from Java or Scala. Moreover, we can't even find out - // whether it's a package or an object. Therefore, we default to l.SCALA. - l.SCALA - } - - private[meta] def kind: s.SymbolInformation.Kind = { - sym match { - // NOTE: Scalacp doesn't care about self parameters - // because they are local, i.e. not saved in scala signatures. - // case _ if sym.isSelfParameter => - // k.SELF_PARAMETER - case sym: MethodSymbol if sym.isMethod => - if (sym.isConstructor) k.CONSTRUCTOR - else if (sym.isMacro) k.MACRO - // NOTE: Scalap doesn't expose locals. - // else if (sym.isGetter && sym.isLazy && sym.isLocalToBlock) k.LOCAL - else k.METHOD - case _: ObjectSymbol | _: ClassSymbol if sym.isModule => - if (sym.isPackage) k.PACKAGE - else if (sym.isPackageObject) k.PACKAGE_OBJECT - else k.OBJECT - case sym: MethodSymbol => - // NOTE: This is craziness. In scalap, parameters, val and vars - // are also modelled with method symbols. - if (sym.isParam) k.PARAMETER - // NOTE: Scalap doesn't expose locals. - // else if (gsym.isLocalToBlock) k.LOCAL - // NOTE: Scalap doesn't expose JAVA_ENUM. - else if (sym.isJava /* || sym.isJavaEnum */ ) k.FIELD - else k.METHOD - case sym: ClassSymbol if !sym.isModule => - if (sym.isTrait && sym.isJava) k.INTERFACE - else if (sym.isTrait) k.TRAIT - else k.CLASS - case _: TypeSymbol | _: AliasSymbol => - if (sym.isParam) k.TYPE_PARAMETER - else k.TYPE - case _ => - sys.error(s"unsupported symbol $sym") - } - } - - private[meta] def properties: Int = { - var flags = 0 - def flip(sprop: s.SymbolInformation.Property) = flags |= sprop.value - def isAbstractClass = sym.isClass && sym.isAbstract && !sym.isTrait - def isAbstractMethod = sym.isMethod && sym.isDeferred - def isAbstractType = sym.isType && !sym.isParam && sym.isDeferred - if (sym.isPackage) { - () - } else if (sym.isJava) { - if (isAbstractClass || kind.isInterface || isAbstractMethod) - flip(p.ABSTRACT) - // NOTE: Scalap doesn't expose JAVA_ENUM. - if (sym.isFinal /* || sym.isJavaEnum */ ) flip(p.FINAL) - // NOTE: Scalap doesn't expose JAVA_ENUM. - // if (sym.isJavaEnum) flip(p.ENUM) - if (sym.isStatic) flip(p.STATIC) - ??? - } else { - if (isAbstractClass || isAbstractMethod || isAbstractType) - flip(p.ABSTRACT) - if (sym.isFinal || sym.isModule) flip(p.FINAL) - if (sym.isSealed) flip(p.SEALED) - if (sym.isImplicit) flip(p.IMPLICIT) - if (sym.isLazy) flip(p.LAZY) - if (sym.isCase && (sym.isClass || sym.isModule)) flip(p.CASE) - if (sym.isType && sym.isCovariant) flip(p.COVARIANT) - if (sym.isType && sym.isContravariant) flip(p.CONTRAVARIANT) - // NOTE: Scalap doesn't expose locals. - if (/*kind.isLocal ||*/ sym.isUsefulField) { - if (sym.isMutable) flip(p.VAR) - else flip(p.VAL) - } - if (sym.isAccessor) { - if (sym.isStable) flip(p.VAL) - else flip(p.VAR) - } - if (sym.isParam) { - sym.parent.foreach { - case parent: SymbolInfoSymbol => - if ((parent.properties & p.PRIMARY.value) != 0) { - parent.parent.foreach { grandParent => - val classMembers = grandParent.children - val accessor = - classMembers.find(m => - m.isParamAccessor && m.symbolName == sym.symbolName - ) - accessor.foreach { accessor => - val isStable = { - if (accessor.isMethod) accessor.isStable - else !accessor.isMutable - } - if (!isStable) flip(p.VAR) - else if (accessor.isMethod) flip(p.VAL) - else () - } - } - } - case _ => - () - } - } - if (sym.isConstructor) { - val primaryIndex = - primaryCtors.getOrElseUpdate(sym.path, sym.entry.index) - if (sym.entry.index == primaryIndex) flip(p.PRIMARY) - } - if (sym.isDefaultParameter) flip(p.DEFAULT) - } - flags - } - - private def displayName: String = { - if (sym.isRootPackage) dn.RootPackage - else if (sym.isEmptyPackage) dn.EmptyPackage - else if (sym.isConstructor) dn.Constructor - else if (sym.name.startsWith("_$")) dn.Anonymous - else if (sym.isPackageObject) sym.ssym.owner.desc.value - else sym.symbolName - } - - private def sig(linkMode: LinkMode): s.Signature = - s.NoSignature // scalacp deviation - - private def annotations: List[s.Annotation] = { - Nil // scalacp deviation - } - - private def access: s.Access = { - kind match { - case k.LOCAL | k.PARAMETER | k.SELF_PARAMETER | k.TYPE_PARAMETER | - k.PACKAGE | k.PACKAGE_OBJECT => - s.NoAccess - case _ => - sym.symbolInfo.privateWithin match { - case None => - if (sym.isPrivate && sym.isLocal) s.PrivateThisAccess() - else if (sym.isPrivate) s.PrivateAccess() - else if (sym.isProtected && sym.isLocal) s.ProtectedThisAccess() - else if (sym.isProtected) s.ProtectedAccess() - else s.PublicAccess() - case Some(privateWithin: Symbol) => - val ssym = privateWithin.ssym - if (sym.isProtected) s.ProtectedWithinAccess(ssym) - else s.PrivateWithinAccess(ssym) - case Some(other) => - sys.error(s"unsupported privateWithin: ${other.getClass} $other") - } - } - } - - def toSymbolInformation(linkMode: LinkMode): s.SymbolInformation = { - s.SymbolInformation( - symbol = sym.ssym, - language = language, - kind = kind, - properties = properties, - displayName = displayName, - signature = sig(linkMode), - annotations = annotations, - access = access, - ) - } - } - -} diff --git a/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala b/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala index e486df5d9dc..fd38998632d 100644 --- a/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala +++ b/mtags/src/main/scala-2/scala/meta/internal/mtags/MtagsEnrichments.scala @@ -55,148 +55,6 @@ trait MtagsEnrichments extends ScalametaCommonEnrichments { buf.result() } } - implicit class XtensionCancelChecker(token: CancelChecker) { - def isCancelled: Boolean = - try { - token.checkCanceled() - false - } catch { - case _: CancellationException => - true - } - } - implicit class XtensionSemanticdbProperties(properties: Int) { - def isEnum: Boolean = (properties & p.ENUM.value) != 0 - def isVar: Boolean = (properties & p.VAR.value) != 0 - def isVal: Boolean = (properties & p.VAL.value) != 0 - } - - implicit class XtensionToken(token: Token) { - def isWhiteSpaceOrComment: Boolean = - token match { - case _: Token.Whitespace | _: Token.Comment => - true - case _ => false - } - } - - implicit class XtensionURIMtags(value: URI) { - def toAbsolutePath: AbsolutePath = toAbsolutePath(followSymlink = true) - def toAbsolutePath(followSymlink: Boolean): AbsolutePath = { - val path = - if (value.getScheme() == "jar") - Try { - AbsolutePath(Paths.get(value)) - } match { - case Success(path) => path - case Failure(_) => - // don't close - put up with the resource staying open so all AbsolutePath methods don't have to be wrapped - m.internal.io.PlatformFileIO.newFileSystem( - value, - new java.util.HashMap[String, String]() - ) - AbsolutePath(Paths.get(value)) - } - else - AbsolutePath(Paths.get(value)) - if (followSymlink) - path.dealias - else - path - } - } - - implicit class XtensionStringMtags(value: String) { - - def stripBackticks: String = value.stripPrefix("`").stripSuffix("`") - def isBackticked: Boolean = - value.size > 1 && value.head == '`' && value.last == '`' - def toAbsolutePath: AbsolutePath = toAbsolutePath(true) - def toAbsolutePath(followSymlink: Boolean): AbsolutePath = { - - /* Windows sometimes treats % literally, but not sure if it's always the case. - * https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/url-encoding-unc-paths-not-url-decoded - * This function tries to apply different heuristics to get the proper file system. - */ - def withTryDecode(value: String)(f: String => AbsolutePath) = { - try { - if (Properties.isWin) f(URLDecoder.decode(value, "UTF-8")) - else f(value) - } catch { - // fallback to try without decoding - case _: NoSuchFileException | _: FileSystemNotFoundException - if Properties.isWin => - f(value) - // prevents infinity recursion and double check for double escaped % - case _: NoSuchFileException | _: FileSystemNotFoundException - if value.contains("%25") => - f(URLDecoder.decode(value, "UTF-8")) - } - } - - // jar schemes must have "jar:file:"" instead of "jar:file%3A" or jar file system won't recognise the URI. - // but don't overdecode as URIs may not be recognised e.g. "com-microsoft-java-debug-core-0.32.0%2B1.jar" is correct - if (value.toUpperCase.startsWith("JAR%3AFILE")) - withTryDecode(value)( - URLDecoder.decode(_, "UTF-8").toAbsolutePath(followSymlink) - ) - else if (value.toUpperCase.startsWith("JAR:FILE%3A")) - withTryDecode(value)( - URLDecoder.decode(_, "UTF-8").toAbsolutePath(followSymlink) - ) - else if (value.toUpperCase.startsWith("JAR")) { - try URI.create(value).toAbsolutePath(followSymlink) - catch { - case _: NoSuchFileException | _: FileSystemNotFoundException => - withTryDecode(value.stripPrefix("jar:"))( - new URI("jar", _, null).toAbsolutePath(followSymlink) - ) - } - } else { - val stripped = value.stripPrefix("metals:") - val percentEncoded = URIEncoderDecoder.encode(stripped) - URI.create(percentEncoded).toAbsolutePath(followSymlink) - } - } - def lastIndexBetween( - char: Char, - lowerBound: Int, - upperBound: Int - ): Int = { - val safeLowerBound = Math.max(0, lowerBound) - var index = upperBound - while (index >= safeLowerBound && value(index) != char) { - index -= 1 - } - if (index < safeLowerBound) -1 else index - } - } - - implicit class XtensionRangeLspInverse(range: l.Range) { - def toLocation(uri: URI): l.Location = new l.Location(uri.toString(), range) - } - - implicit class XtensionPositionLspInverse(pos: l.Position) { - - /** - * LSP position translated to scalameta position. Might return None if - * pos is not contained in input - * - * @param input file input the position relates to - * @return scalameta position with offset if the pos is contained in the file - */ - def toMeta(input: m.Input): Option[m.Position] = { - Try( - m.Position.Range( - input, - pos.getLine, - pos.getCharacter, - pos.getLine, - pos.getCharacter - ) - ).toOption - } - } implicit class XtensionPositionMtags(pos: Position) { def encloses(other: Position): Boolean = diff --git a/mtags/src/main/scala/scala/meta/internal/mtags/ScalametaCommonEnrichments.scala b/mtags/src/main/scala/scala/meta/internal/mtags/ScalametaCommonEnrichments.scala index e168aea76ff..ff97cbc15a7 100644 --- a/mtags/src/main/scala/scala/meta/internal/mtags/ScalametaCommonEnrichments.scala +++ b/mtags/src/main/scala/scala/meta/internal/mtags/ScalametaCommonEnrichments.scala @@ -11,6 +11,7 @@ import java.nio.file.Path import java.nio.file.Paths import java.nio.file.StandardCopyOption import java.nio.file.StandardOpenOption +import java.util.concurrent.CancellationException import java.util.logging.Level import java.util.logging.Logger @@ -733,6 +734,8 @@ trait ScalametaCommonEnrichments extends CommonMtagsEnrichments { } } + // TODO make sure everything was ported + implicit class XtensionRangeLspInverse(range: l.Range) { def toLocation(uri: URI): l.Location = new l.Location(uri.toString(), range) }