Metals: semanticdb-scalac is silently disabled for Scala 2.12.8

Created on 11 Apr 2019  路  21Comments  路  Source: scalameta/metals

Describe the bug
I found some error messages in vscode's console

bad option: -P:semanticdb:synthetics:on
bad option: -P:semanticdb:failures:warning

To Reproduce
Steps to reproduce the behavior:

  1. ThisBuild / scalaVersion := "2.12.8"
  2. sbt metalsEnable bloopInstall
  3. See error

Expected behavior
No error message

Installation:

  • Operating system: macOS
  • Editor: Visual Studio Code
  • Metals version: v0.5.0-M1

Additional context
I have to manually add the following settings in my build.sbt in case of those errors

addCompilerPlugin("org.scalameta" % "semanticdb-scalac" % "4.1.5" cross CrossVersion.full)

Most helpful comment

It turns out that I have a corrupted JAR at ~/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalameta/semanticdb-scalac_2.12.8/4.1.4/semanticdb-scalac_2.12.8-4.1.4.jar. When sbt generates scalacOptions for compiler plugins, the scalac-plugin.xml resource is not found in the JAR. As a result, semanticdb-scalac_2.12.8-4.1.4.jar is not recognized as a compiler plugin to sbt, and the -Xplugin is omitted.

When I debug this problem some days ago, I tried to add export SCALAMETA_VERSION=4.1.5 to my ~/.bash_profile and forget to restart vscode. Therefore, metals in vscode still use the corrupted semanticdb-scalac_2.12.8-4.1.4.jar while sbt started from command line can see the new environment variable and installed a good semanticdb-scalac_2.12.8-4.1.5.jar.


Now I deleted my cached semanticdb-scalac_2.12.8-4.1.4.jar and sbt redownloaded it. Everything goes well now.

All 21 comments

Thanks for reporting! I am unable to reproduce, I created a minimal sbt build, ran "import build" and compilation works as expected. Can you try reproducing in https://github.com/olafurpg/vanilla ?

The error message goes away when I clone a clean repository and run "Import Build".

It is turned out that an sbt setting ThisBuild / scalaVersion := "2.12.8" who cause this error.

I usually create a local.sbt that contains Scala versions, which is ignored by .gitignore. Therefore, this error never occurs in a clean clone.

I added the local.sbt file and now it is reproducible.

Run the following command and click Import Build

git clone https://github.com/Atry/Binding.scala.git --branch=metals-error && cd Binding.scala && code .

Also note that the error message can be avoided by setting ThisBuild / scalaVersion := "2.12.7" instead of 2.12.8

@Atry I've tried the command verbatim and the build import succeeded on my computer.

Can you share which global sbt plugins you have on your machine?

idea.sbt

// Generated by IntelliJ-IDEA Scala plugin.
// Adds settings when starting sbt from IDEA.
// Manual changes to this file will be lost.
if (java.lang.System.getProperty("idea.runid", "false") == "2018.2") scala.collection.Seq(
resolvers += Resolver.file("intellij-scala-plugin", file(raw"/Users/twer/Library/Application Support/IntelliJIdea2018.2/Scala/repo"))(Resolver.ivyStylePatterns),
addSbtPlugin("org.jetbrains" % "sbt-structure-extractor" % "2018.2"),
addSbtPlugin("org.jetbrains" % "sbt-idea-shell" % "2017.2")
) else scala.collection.Seq.empty

metals.sbt

// DO NOT EDIT! This file is auto-generated.
// By default, this file does not do anything.
// If the environment variable METALS_ENABLED has the value 'true',
// then this file enables sbt-metals and sbt-bloop.

libraryDependencies := {
  import Defaults.sbtPluginExtra
  val oldDependencies = libraryDependencies.value
  if (System.getenv("METALS_ENABLED") == "true") {
    val bloopModule = "ch.epfl.scala" % "sbt-bloop" % "1.2.5"
    val metalsModule = "org.scalameta" % "sbt-metals" % "0.5.0-M1"
    val sbtVersion = Keys.sbtBinaryVersion.in(TaskKey[Unit]("pluginCrossBuild")).value
    val scalaVersion = Keys.scalaBinaryVersion.in(update).value
    val bloopPlugin = sbtPluginExtra(bloopModule, sbtVersion, scalaVersion)
    val metalsPlugin = sbtPluginExtra(metalsModule, sbtVersion, scalaVersion)
    List(bloopPlugin, metalsPlugin) ++ oldDependencies.filterNot { dep =>
      (dep.organization == "ch.epfl.scala" && dep.name == "sbt-bloop") ||
      (dep.organization == "org.scalameta" && dep.name == "sbt-metals")
    }
  } else {
    oldDependencies
  }
}

mavenResolvers.sbt

externalResolvers += "Sonatype OSS Staging" at "https://oss.sonatype.org/content/groups/staging/"

resolvers += Resolver.mavenLocal

If I run METALS_ENABLED=true sbt metalsEnable bloopInstall in a shell instead of clicking the "Import Build" button, then everything goes well after I restart vscode.

Thanks for the information and investigating further. What happens if you point the sbt launcher configuration to your sbt script? See https://scalameta.org/metals/docs/editors/vscode.html#custom-sbt-launcher By default, Metals uses java -jar sbt-launch.jar where sbt-launch.jar is embedded our resource directory.

Step 1

git clone https://github.com/Atry/Binding.scala.git --branch=metals-error && cd Binding.scala && code .

Step 2

Set vscode's sbt script to /usr/local/bin/sbt

Step 3

Click "Import Build"

Output in console window

Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
logging to file /Users/twer/workspace/Binding.scala/.metals/metals.log
time: initialize in 0.4s
running 'sbt metalsEnable bloopInstall'
[info] Loading global plugins from /Users/twer/.sbt/1.0/plugins/project
[info] Loading settings for project global-plugins from idea.sbt,mavenResolvers.sbt,metals.sbt ...
[info] Loading global plugins from /Users/twer/.sbt/1.0/plugins
[info] Loading settings for project binding-scala-build-build from plugins.sbt ...
[info] Loading project definition from /Users/twer/workspace/Binding.scala/project/project
[info] Updating ProjectRef(uri("file:/Users/twer/workspace/Binding.scala/project/project/"), "binding-scala-build-build")...
[info] Done updating.
[warn] There may be incompatibilities among your library dependencies; run 'evicted' to see detailed eviction warnings.
[success] Generated .bloop/binding-scala-build-build.json
[success] Total time: 3 s, completed 2019-4-12 22:24:20
[info] Loading settings for project binding-scala-build from coursier.sbt,plugins.sbt ...
[info] Loading project definition from /Users/twer/workspace/Binding.scala/project
[warn] Unrecognized repository Local Repository, ignoring it
[success] Generated .bloop/binding-scala-build.json
[success] Total time: 2 s, completed 2019-4-12 22:24:26
[warn] Unrecognized repository Local Repository, ignoring it
/Users/twer/workspace/Binding.scala/build.sbt:3: warning: lazy value CrossType in object AutoImport is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val SafeBuffer = crossProject.crossType(CrossType.Pure)
                                             ^
/Users/twer/workspace/Binding.scala/build.sbt:5: warning: lazy value CrossType in object AutoImport is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val Binding = crossProject.crossType(CrossType.Pure).dependsOn(SafeBuffer)
                                          ^
/Users/twer/workspace/Binding.scala/build.sbt:5: warning: method crossClasspathDependency in trait CrossProjectExtra is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val Binding = crossProject.crossType(CrossType.Pure).dependsOn(SafeBuffer)
                                                                    ^
/Users/twer/workspace/Binding.scala/build.sbt:7: warning: lazy value CrossType in object AutoImport is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val FutureBinding = crossProject.crossType(CrossType.Pure).dependsOn(Binding)
                                                ^
/Users/twer/workspace/Binding.scala/build.sbt:7: warning: method crossClasspathDependency in trait CrossProjectExtra is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val FutureBinding = crossProject.crossType(CrossType.Pure).dependsOn(Binding)
                                                                          ^
/Users/twer/workspace/Binding.scala/build.sbt:27: warning: lazy value CrossType in object AutoImport is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val XmlExtractor = crossProject.crossType(CrossType.Pure)
                                               ^
/Users/twer/workspace/Binding.scala/build.sbt:33: warning: lazy value CrossType in object AutoImport is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val fxml = crossProject.crossType(CrossType.Pure).dependsOn(Binding, XmlExtractor)
                                       ^
/Users/twer/workspace/Binding.scala/build.sbt:33: warning: method crossClasspathDependency in trait CrossProjectExtra is deprecated (since 0.6.23): The built-in cross-project feature of sbt-scalajs is deprecated. Use the separate sbt plugin sbt-crossproject instead: https://github.com/portable-scala/sbt-crossproject
lazy val fxml = crossProject.crossType(CrossType.Pure).dependsOn(Binding, XmlExtractor)
                                                                 ^
[info] Loading settings for project fxmlJVM from local.sbt,build.sbt ...
[info] Loading settings for project fxmlJS from local.sbt,build.sbt ...
[info] Loading settings for project XmlExtractorJVM from local.sbt,build.sbt ...
[info] Loading settings for project XmlExtractorJS from local.sbt,build.sbt ...
[info] Loading settings for project FutureBindingJVM from local.sbt,build.sbt ...
[info] Loading settings for project FutureBindingJS from local.sbt,build.sbt ...
[info] Loading settings for project BindingJVM from local.sbt,build.sbt ...
[info] Loading settings for project BindingJS from local.sbt,build.sbt ...
[info] Loading settings for project SafeBufferJVM from local.sbt,build.sbt ...
[info] Loading settings for project SafeBufferJS from local.sbt,build.sbt ...
[info] Loading settings for project JsPromiseBinding from build.sbt ...
/Users/twer/workspace/Binding.scala/Route/build.sbt:13: warning: value RuntimeDOM in trait DependencyBuilders is deprecated (since 0.6.20): Requesting a DOM-enabled JS env with `jsDependencies += RuntimeDOM` or `requiresDOM := true` will not be supported in Scala.js 1.x. Instead, explicitly select a suitable JS with `jsEnv`, e.g., `jsEnv := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv`.
jsDependencies += RuntimeDOM % Test
                  ^
[info] Loading settings for project Route from build.sbt ...
/Users/twer/workspace/Binding.scala/dom/build.sbt:42: warning: value RuntimeDOM in trait DependencyBuilders is deprecated (since 0.6.20): Requesting a DOM-enabled JS env with `jsDependencies += RuntimeDOM` or `requiresDOM := true` will not be supported in Scala.js 1.x. Instead, explicitly select a suitable JS with `jsEnv`, e.g., `jsEnv := new org.scalajs.jsenv.jsdomnodejs.JSDOMNodeJSEnv`.
jsDependencies in Test += RuntimeDOM
                          ^
/Users/twer/workspace/Binding.scala/dom/build.sbt:45: warning: method RhinoJSEnv in object AutoImport is deprecated (since 0.6.13): The Rhino JS environment is being phased out. It will be removed in Scala.js 1.0.0.
  jsEnv in ThisBuild := RhinoJSEnv().value
                        ^
[info] Loading settings for project dom from build.sbt ...
[info] Loading settings for project binding-scala from secret.sbt,local.sbt,build.sbt ...
[info] Resolving key references (10574 settings) ...
[info] Set current project to binding-scala (in build file:/Users/twer/workspace/Binding.scala/)
[info] Set current project to binding-scala (in build file:/Users/twer/workspace/Binding.scala/)
[info] semanticdb-scalac is enabled
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[warn] Unrecognized repository Local Repository, ignoring it
[success] Generated .bloop/SafeBufferJS.json
[success] Generated .bloop/SafeBufferJVM.json
[success] Generated .bloop/binding-scala.json
[success] Generated .bloop/XmlExtractorJVM.json
[success] Generated .bloop/XmlExtractorJS.json
[success] Generated .bloop/secret.json
[success] Generated .bloop/SafeBufferJS-test.json
[success] Generated .bloop/SafeBufferJVM-test.json
[success] Generated .bloop/binding-scala-test.json
[success] Generated .bloop/XmlExtractorJVM-test.json
[success] Generated .bloop/XmlExtractorJS-test.json
[success] Generated .bloop/secret-test.json
[success] Generated .bloop/BindingJS.json
[success] Generated .bloop/BindingJVM.json
[success] Generated .bloop/BindingJS-test.json
[success] Generated .bloop/BindingJVM-test.json
[success] Generated .bloop/FutureBindingJS.json
[success] Generated .bloop/JsPromiseBinding.json
[success] Generated .bloop/Route.json
[success] Generated .bloop/fxmlJS.json
[success] Generated .bloop/dom.json
[success] Generated .bloop/FutureBindingJVM.json
[success] Generated .bloop/fxmlJVM.json
[success] Generated .bloop/FutureBindingJS-test.json
[success] Generated .bloop/JsPromiseBinding-test.json
[success] Generated .bloop/Route-test.json
[success] Generated .bloop/fxmlJS-test.json
[success] Generated .bloop/dom-test.json
[success] Generated .bloop/FutureBindingJVM-test.json
[success] Generated .bloop/fxmlJVM-test.json
[success] Total time: 4 s, completed 2019-4-12 22:24:41
sbt exit: 0
time: ran 'sbt bloopInstall' in 32s
running embedded 'bloop bsp --protocol local --socket /var/folders/zx/pbgr6wjs0g14qj7zc064gjdm0000gq/T/bsp5204597696524958279/-gylvtdlck6cl.socket'
Failed to connect with build server, no functionality will work.
scala.meta.internal.metals.BloopServers$NoResponse$: no response: bloop bsp
    at scala.meta.internal.metals.BloopServers.NoResponse$lzycompute$1(BloopServers.scala:281)
    at scala.meta.internal.metals.BloopServers.NoResponse(BloopServers.scala:281)
    at scala.meta.internal.metals.BloopServers.$anonfun$callBloopMain$1(BloopServers.scala:180)
    at scala.util.Success.$anonfun$map$1(Try.scala:255)
    at scala.util.Success.map(Try.scala:213)
    at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
    at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
    at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Metals Docket report shows a table that contains only table header

After restart vscode (but not re-import build), I run Metal Doctor reports again

灞忓箷蹇収 2019-04-12 22 33 37

It seems that some randomly selected projects are broken. You distinguish broken projects and good projects from their bloop configuration:

BindingJS.json (Good)

{
    "version" : "1.1.2",
    "project" : {
        "name" : "BindingJS",
        "directory" : "/Users/twer/workspace/Binding.scala/Binding/.js",
        "sources" : [
            "/Users/twer/workspace/Binding.scala/Binding/.js/src/main/scala-2.12",
            "/Users/twer/workspace/Binding.scala/Binding/.js/src/main/scala",
            "/Users/twer/workspace/Binding.scala/Binding/.js/src/main/java",
            "/Users/twer/workspace/Binding.scala/Binding/src/main/scala-2.12",
            "/Users/twer/workspace/Binding.scala/Binding/src/main/scala",
            "/Users/twer/workspace/Binding.scala/Binding/.js/target/scala-2.12/src_managed/main"
        ],
        "dependencies" : [
            "SafeBufferJS"
        ],
        "classpath" : [
            "/Users/twer/workspace/Binding.scala/.bloop/SafeBufferJS/scala-2.12/classes",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_sjs0.6_2.12/2.1.0/extractor_sjs0.6_2.12-2.1.0.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_sjs0.6_2.12/7.2.7/scalaz-core_sjs0.6_2.12-7.2.7.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.12/0.6.27/scalajs-library_2.12-0.6.27.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_sjs0.6_2.12/3.1.1/core_sjs0.6_2.12-3.1.1.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_sjs0.6_2.12/7.2.7/scalaz-effect_sjs0.6_2.12-7.2.7.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8.jar"
        ],
        "out" : "/Users/twer/workspace/Binding.scala/.bloop/BindingJS",
        "classesDir" : "/Users/twer/workspace/Binding.scala/.bloop/BindingJS/scala-2.12/classes",
        "resources" : [
            "/Users/twer/workspace/Binding.scala/Binding/.js/src/main/resources",
            "/Users/twer/workspace/Binding.scala/Binding/.js/target/scala-2.12/resource_managed/main"
        ],
        "scala" : {
            "organization" : "org.scala-lang",
            "name" : "scala-compiler",
            "version" : "2.12.8",
            "options" : [
                "-feature",
                "-unchecked",
                "-Ywarn-infer-any",
                "-Ycache-plugin-class-loader:last-modified",
                "-Ycache-macro-class-loader:last-modified",
                "-Ypartial-unification",
                "-P:scalajs:mapSourceURI:file:/Users/twer/workspace/Binding.scala/->https://github.com/Atry/Binding.scala/raw/169fba0b75c78959ed4efb8dd910978db514d495/",
                "-Xexperimental",
                "-P:semanticdb:synthetics:on",
                "-P:semanticdb:failures:warning",
                "-P:semanticdb:sourceroot:/Users/twer/workspace/Binding.scala",
                "-Yrangepos",
                "-Xplugin-require:semanticdb",
                "-Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalamacros/paradise_2.12.8/2.1.0/paradise_2.12.8-2.1.0.jar",
                "-Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalameta/semanticdb-scalac_2.12.8/4.1.5/semanticdb-scalac_2.12.8-4.1.5.jar",
                "-Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-compiler_2.12.8/0.6.27/scalajs-compiler_2.12.8-0.6.27.jar",
                "-deprecation"
            ],
            "jars" : [
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.0.6/scala-xml_2.12-1.0.6.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8.jar"
            ],
            "setup" : {
                "order" : "mixed",
                "addLibraryToBootClasspath" : true,
                "addCompilerToClasspath" : false,
                "addExtraJarsToClasspath" : false,
                "manageBootClasspath" : true,
                "filterLibraryFromClasspath" : true
            }
        },
        "java" : {
            "options" : [
            ]
        },
        "test" : {
            "frameworks" : [
                {
                    "names" : [
                        "org.scalacheck.ScalaCheckFramework"
                    ]
                },
                {
                    "names" : [
                        "org.specs2.runner.Specs2Framework",
                        "org.specs2.runner.SpecsFramework"
                    ]
                },
                {
                    "names" : [
                        "org.specs.runner.SpecsFramework"
                    ]
                },
                {
                    "names" : [
                        "org.scalatest.tools.Framework",
                        "org.scalatest.tools.ScalaTestFramework"
                    ]
                },
                {
                    "names" : [
                        "com.novocode.junit.JUnitFramework"
                    ]
                }
            ],
            "options" : {
                "excludes" : [
                ],
                "arguments" : [
                ]
            }
        },
        "platform" : {
            "name" : "js",
            "config" : {
                "version" : "0.6.27",
                "mode" : "debug",
                "kind" : "none",
                "emitSourceMaps" : false,
                "jsdom" : false,
                "toolchain" : [
                ]
            },
            "mainClass" : [
            ]
        },
        "resolution" : {
            "modules" : [
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-compiler",
                    "version" : "2.12.8",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-compiler",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "d373b4ff7f7dcaf3c590813adc39c2ea518eb8c5"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-library",
                    "version" : "2.12.8",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-library",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "36b234834d8f842cdde963c8591efae6cf413e3f"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "45ccb865e040cbef5d5620571527831441392f24"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-reflect",
                    "version" : "2.12.8",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-reflect",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "682d33402cdae50258afa2c0860eb54688dab610"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8.jar"
                        },
                        {
                            "name" : "scala-reflect",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-reflect",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "com.thoughtworks.extractor",
                    "name" : "extractor_sjs0.6_2.12",
                    "version" : "2.1.0",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "extractor_sjs0.6_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_sjs0.6_2.12/2.1.0/extractor_sjs0.6_2.12-2.1.0.jar"
                        },
                        {
                            "name" : "extractor_sjs0.6_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_sjs0.6_2.12/2.1.0/extractor_sjs0.6_2.12-2.1.0-sources.jar"
                        },
                        {
                            "name" : "extractor_sjs0.6_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_sjs0.6_2.12/2.1.0/extractor_sjs0.6_2.12-2.1.0-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scalaz",
                    "name" : "scalaz-core_sjs0.6_2.12",
                    "version" : "7.2.7",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scalaz-core_sjs0.6_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_sjs0.6_2.12/7.2.7/scalaz-core_sjs0.6_2.12-7.2.7.jar"
                        },
                        {
                            "name" : "scalaz-core_sjs0.6_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_sjs0.6_2.12/7.2.7/scalaz-core_sjs0.6_2.12-7.2.7-sources.jar"
                        },
                        {
                            "name" : "scalaz-core_sjs0.6_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_sjs0.6_2.12/7.2.7/scalaz-core_sjs0.6_2.12-7.2.7-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "com.thoughtworks.enableIf",
                    "name" : "enableif_2.12",
                    "version" : "1.1.4",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "enableif_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4.jar"
                        },
                        {
                            "name" : "enableif_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4-sources.jar"
                        },
                        {
                            "name" : "enableif_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-js",
                    "name" : "scalajs-library_2.12",
                    "version" : "0.6.27",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scalajs-library_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.12/0.6.27/scalajs-library_2.12-0.6.27.jar"
                        },
                        {
                            "name" : "scalajs-library_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.12/0.6.27/scalajs-library_2.12-0.6.27-sources.jar"
                        },
                        {
                            "name" : "scalajs-library_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.12/0.6.27/scalajs-library_2.12-0.6.27-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.typelevel",
                    "name" : "macro-compat_2.12",
                    "version" : "1.1.1",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "macro-compat_2.12",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "ed809d26ef4237d7c079ae6cf7ebd0dfa7986adf"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1.jar"
                        },
                        {
                            "name" : "macro-compat_2.12",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "ade6d6ec81975cf514b0f9e2061614f2799cfe97"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1-sources.jar"
                        },
                        {
                            "name" : "macro-compat_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "com.thoughtworks.sde",
                    "name" : "core_sjs0.6_2.12",
                    "version" : "3.1.1",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "core_sjs0.6_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_sjs0.6_2.12/3.1.1/core_sjs0.6_2.12-3.1.1.jar"
                        },
                        {
                            "name" : "core_sjs0.6_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_sjs0.6_2.12/3.1.1/core_sjs0.6_2.12-3.1.1-sources.jar"
                        },
                        {
                            "name" : "core_sjs0.6_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_sjs0.6_2.12/3.1.1/core_sjs0.6_2.12-3.1.1-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang.modules",
                    "name" : "scala-xml_2.12",
                    "version" : "1.1.0",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-xml_2.12",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "2fb058ff138e407f3cba28748302bd8f5f90f330"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0.jar"
                        },
                        {
                            "name" : "scala-xml_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0-sources.jar"
                        },
                        {
                            "name" : "scala-xml_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scalaz",
                    "name" : "scalaz-effect_sjs0.6_2.12",
                    "version" : "7.2.7",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scalaz-effect_sjs0.6_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_sjs0.6_2.12/7.2.7/scalaz-effect_sjs0.6_2.12-7.2.7.jar"
                        },
                        {
                            "name" : "scalaz-effect_sjs0.6_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_sjs0.6_2.12/7.2.7/scalaz-effect_sjs0.6_2.12-7.2.7-sources.jar"
                        },
                        {
                            "name" : "scalaz-effect_sjs0.6_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_sjs0.6_2.12/7.2.7/scalaz-effect_sjs0.6_2.12-7.2.7-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-compiler",
                    "version" : "2.12.8",
                    "configurations" : "optional",
                    "artifacts" : [
                        {
                            "name" : "scala-compiler",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "d373b4ff7f7dcaf3c590813adc39c2ea518eb8c5"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-library",
                    "version" : "2.12.8",
                    "configurations" : "optional",
                    "artifacts" : [
                        {
                            "name" : "scala-library",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "36b234834d8f842cdde963c8591efae6cf413e3f"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "45ccb865e040cbef5d5620571527831441392f24"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-javadoc.jar"
                        }
                    ]
                }
            ]
        }
    }
}

BindingJVM.json (broken)

{
    "version" : "1.1.2",
    "project" : {
        "name" : "BindingJVM",
        "directory" : "/Users/twer/workspace/Binding.scala/Binding/.jvm",
        "sources" : [
            "/Users/twer/workspace/Binding.scala/Binding/.jvm/src/main/scala-2.12",
            "/Users/twer/workspace/Binding.scala/Binding/.jvm/src/main/scala",
            "/Users/twer/workspace/Binding.scala/Binding/.jvm/src/main/java",
            "/Users/twer/workspace/Binding.scala/Binding/src/main/scala-2.12",
            "/Users/twer/workspace/Binding.scala/Binding/src/main/scala",
            "/Users/twer/workspace/Binding.scala/Binding/.jvm/target/scala-2.12/src_managed/main"
        ],
        "dependencies" : [
            "SafeBufferJVM"
        ],
        "classpath" : [
            "/Users/twer/workspace/Binding.scala/.bloop/SafeBufferJVM/scala-2.12/classes",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_2.12/7.2.7/scalaz-effect_2.12-7.2.7.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_2.12/2.1.0/extractor_2.12-2.1.0.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_2.12/7.2.7/scalaz-core_2.12-7.2.7.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_2.12/3.1.1/core_2.12-3.1.1.jar",
            "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8.jar"
        ],
        "out" : "/Users/twer/workspace/Binding.scala/.bloop/BindingJVM",
        "classesDir" : "/Users/twer/workspace/Binding.scala/.bloop/BindingJVM/scala-2.12/classes",
        "resources" : [
            "/Users/twer/workspace/Binding.scala/Binding/.jvm/src/main/resources",
            "/Users/twer/workspace/Binding.scala/Binding/.jvm/target/scala-2.12/resource_managed/main"
        ],
        "scala" : {
            "organization" : "org.scala-lang",
            "name" : "scala-compiler",
            "version" : "2.12.8",
            "options" : [
                "-feature",
                "-unchecked",
                "-Ywarn-infer-any",
                "-Ycache-plugin-class-loader:last-modified",
                "-Ycache-macro-class-loader:last-modified",
                "-Ypartial-unification",
                "-Xexperimental",
                "-P:semanticdb:synthetics:on",
                "-P:semanticdb:failures:warning",
                "-P:semanticdb:sourceroot:/Users/twer/workspace/Binding.scala",
                "-Yrangepos",
                "-Xplugin-require:semanticdb",
                "-Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalamacros/paradise_2.12.8/2.1.0/paradise_2.12.8-2.1.0.jar",
                "-deprecation"
            ],
            "jars" : [
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.0.6/scala-xml_2.12-1.0.6.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/jline/jline/2.14.6/jline-2.14.6.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar",
                "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8.jar"
            ],
            "setup" : {
                "order" : "mixed",
                "addLibraryToBootClasspath" : true,
                "addCompilerToClasspath" : false,
                "addExtraJarsToClasspath" : false,
                "manageBootClasspath" : true,
                "filterLibraryFromClasspath" : true
            }
        },
        "java" : {
            "options" : [
            ]
        },
        "test" : {
            "frameworks" : [
                {
                    "names" : [
                        "org.scalacheck.ScalaCheckFramework"
                    ]
                },
                {
                    "names" : [
                        "org.specs2.runner.Specs2Framework",
                        "org.specs2.runner.SpecsFramework"
                    ]
                },
                {
                    "names" : [
                        "org.specs.runner.SpecsFramework"
                    ]
                },
                {
                    "names" : [
                        "org.scalatest.tools.Framework",
                        "org.scalatest.tools.ScalaTestFramework"
                    ]
                },
                {
                    "names" : [
                        "com.novocode.junit.JUnitFramework"
                    ]
                }
            ],
            "options" : {
                "excludes" : [
                ],
                "arguments" : [
                ]
            }
        },
        "platform" : {
            "name" : "jvm",
            "config" : {
                "home" : "/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home/jre",
                "options" : [
                ]
            },
            "mainClass" : [
            ]
        },
        "resolution" : {
            "modules" : [
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-compiler",
                    "version" : "2.12.8",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-compiler",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "d373b4ff7f7dcaf3c590813adc39c2ea518eb8c5"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-library",
                    "version" : "2.12.8",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-library",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "36b234834d8f842cdde963c8591efae6cf413e3f"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "45ccb865e040cbef5d5620571527831441392f24"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-reflect",
                    "version" : "2.12.8",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-reflect",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "682d33402cdae50258afa2c0860eb54688dab610"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8.jar"
                        },
                        {
                            "name" : "scala-reflect",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-reflect",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.12.8/scala-reflect-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scalaz",
                    "name" : "scalaz-effect_2.12",
                    "version" : "7.2.7",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scalaz-effect_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_2.12/7.2.7/scalaz-effect_2.12-7.2.7.jar"
                        },
                        {
                            "name" : "scalaz-effect_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_2.12/7.2.7/scalaz-effect_2.12-7.2.7-sources.jar"
                        },
                        {
                            "name" : "scalaz-effect_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-effect_2.12/7.2.7/scalaz-effect_2.12-7.2.7-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "com.thoughtworks.extractor",
                    "name" : "extractor_2.12",
                    "version" : "2.1.0",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "extractor_2.12",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "6fce854b6fb55ad0565f8339007e7f6342c9d367"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_2.12/2.1.0/extractor_2.12-2.1.0.jar"
                        },
                        {
                            "name" : "extractor_2.12",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "8cc9750bcb0b263b6db999e392a1dae2b752e646"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_2.12/2.1.0/extractor_2.12-2.1.0-sources.jar"
                        },
                        {
                            "name" : "extractor_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/extractor/extractor_2.12/2.1.0/extractor_2.12-2.1.0-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scalaz",
                    "name" : "scalaz-core_2.12",
                    "version" : "7.2.7",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scalaz-core_2.12",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "ee06c07e856bad6ce112b2a5b96e1df1609ad57f"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_2.12/7.2.7/scalaz-core_2.12-7.2.7.jar"
                        },
                        {
                            "name" : "scalaz-core_2.12",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "b6b6043f49900582dc34619ace8910246ed104c3"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_2.12/7.2.7/scalaz-core_2.12-7.2.7-sources.jar"
                        },
                        {
                            "name" : "scalaz-core_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalaz/scalaz-core_2.12/7.2.7/scalaz-core_2.12-7.2.7-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "com.thoughtworks.enableIf",
                    "name" : "enableif_2.12",
                    "version" : "1.1.4",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "enableif_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4.jar"
                        },
                        {
                            "name" : "enableif_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4-sources.jar"
                        },
                        {
                            "name" : "enableif_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/enableIf/enableif_2.12/1.1.4/enableif_2.12-1.1.4-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.typelevel",
                    "name" : "macro-compat_2.12",
                    "version" : "1.1.1",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "macro-compat_2.12",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "ed809d26ef4237d7c079ae6cf7ebd0dfa7986adf"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1.jar"
                        },
                        {
                            "name" : "macro-compat_2.12",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "ade6d6ec81975cf514b0f9e2061614f2799cfe97"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1-sources.jar"
                        },
                        {
                            "name" : "macro-compat_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/typelevel/macro-compat_2.12/1.1.1/macro-compat_2.12-1.1.1-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang.modules",
                    "name" : "scala-xml_2.12",
                    "version" : "1.1.0",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "scala-xml_2.12",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "2fb058ff138e407f3cba28748302bd8f5f90f330"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0.jar"
                        },
                        {
                            "name" : "scala-xml_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0-sources.jar"
                        },
                        {
                            "name" : "scala-xml_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-xml_2.12/1.1.0/scala-xml_2.12-1.1.0-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "com.thoughtworks.sde",
                    "name" : "core_2.12",
                    "version" : "3.1.1",
                    "configurations" : "default",
                    "artifacts" : [
                        {
                            "name" : "core_2.12",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_2.12/3.1.1/core_2.12-3.1.1.jar"
                        },
                        {
                            "name" : "core_2.12",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_2.12/3.1.1/core_2.12-3.1.1-sources.jar"
                        },
                        {
                            "name" : "core_2.12",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/com/thoughtworks/sde/core_2.12/3.1.1/core_2.12-3.1.1-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-compiler",
                    "version" : "2.12.8",
                    "configurations" : "optional",
                    "artifacts" : [
                        {
                            "name" : "scala-compiler",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "d373b4ff7f7dcaf3c590813adc39c2ea518eb8c5"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "sources",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-compiler",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.12.8/scala-compiler-2.12.8-javadoc.jar"
                        }
                    ]
                },
                {
                    "organization" : "org.scala-lang",
                    "name" : "scala-library",
                    "version" : "2.12.8",
                    "configurations" : "optional",
                    "artifacts" : [
                        {
                            "name" : "scala-library",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "36b234834d8f842cdde963c8591efae6cf413e3f"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "sources",
                            "checksum" : {
                                "type" : "sha1",
                                "digest" : "45ccb865e040cbef5d5620571527831441392f24"
                            },
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-sources.jar"
                        },
                        {
                            "name" : "scala-library",
                            "classifier" : "javadoc",
                            "path" : "/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.12.8/scala-library-2.12.8-javadoc.jar"
                        }
                    ]
                }
            ]
        }
    }
}

@Atry Thanks for the detailed reproduction! It's surprising to see the semanticdb-scalac plugin not getting enabled via libraryDependencies += compilerPlugin(semanticdbScalac) when it looks like the scalacOptions += List("-P:semanticdb:synthetics:on") settings are getting picked up. We enable these settings together

https://github.com/scalameta/metals/blob/5f530a2bbade38cafc4ad1b38a54e7f733b971ab/sbt-metals/src/main/scala/scala/meta/metals/MetalsPlugin.scala#L49-L63

This needs more investigation. In the meantime, I think a workaround is to

  • select the "Don't show again" option when asked to import the build
  • add addCompilerPlugin("org.scalameta" % "semanticdb-scalac" % "4.1.5" cross CrossVersion.full) to build.sbt
  • run METALS_ENABLED=true sbt bloopInstall (without metalsEnable)

I overridden bloopInstall for debugging (https://github.com/Atry/Binding.scala/blob/metals-error/Binding/.jvm/local.sbt)

In vscode, when I click "Import Build", I can see some logs below

[info] List(org.scala-lang:scala-library:2.12.8, com.thoughtworks.extractor:extractor:2.1.0, com.thoughtworks.enableIf:enableif:1.1.4, com.thoughtworks.sde:core:3.1.1, org.scalatest:scalatest:3.0.7:test, org.scala-lang:scala-reflect:2.12.8, org.typelevel:macro-compat:1.1.1, org.scala-lang:scala-compiler:2.12.8:provided, org.scalamacros:paradise:2.1.0:plugin->default(compile), org.scalameta:semanticdb-scalac_2.12.8:4.1.4:plugin->default(compile))
[info] List(-feature, -unchecked, -Ywarn-infer-any, -Ycache-plugin-class-loader:last-modified, -Ycache-macro-class-loader:last-modified, -Ypartial-unification, -Xexperimental, -P:semanticdb:synthetics:on, -P:semanticdb:failures:warning, -P:semanticdb:sourceroot:/Users/twer/workspace/Binding.scala, -Yrangepos, -Xplugin-require:semanticdb, -Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalamacros/paradise_2.12.8/2.1.0/paradise_2.12.8-2.1.0.jar, -deprecation)

The log indicates that the libraryDependencies settings are added as expected. Unfortunately scalacOptions does not contain the corresponding -Xplugin:... flags.

If I run METALS_ENABLED=true sbt metalsEnable bloopInstall from command line, the log is different:

[info] List(org.scala-lang:scala-library:2.12.8, com.thoughtworks.extractor:extractor:2.1.0, com.thoughtworks.enableIf:enableif:1.1.4, com.thoughtworks.sde:core:3.1.1, org.scalatest:scalatest:3.0.7:test, org.scala-lang:scala-reflect:2.12.8, org.typelevel:macro-compat:1.1.1, org.scala-lang:scala-compiler:2.12.8:provided, org.scalamacros:paradise:2.1.0:plugin->default(compile), org.scalameta:semanticdb-scalac_2.12.8:4.1.5:plugin->default(compile))
[info] List(-feature, -unchecked, -Ywarn-infer-any, -Ycache-plugin-class-loader:last-modified, -Ycache-macro-class-loader:last-modified, -Ypartial-unification, -Xexperimental, -P:semanticdb:synthetics:on, -P:semanticdb:failures:warning, -P:semanticdb:sourceroot:/Users/twer/workspace/Binding.scala, -Yrangepos, -Xplugin-require:semanticdb, -Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalamacros/paradise_2.12.8/2.1.0/paradise_2.12.8-2.1.0.jar, -Xplugin:/Users/twer/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalameta/semanticdb-scalac_2.12.8/4.1.5/semanticdb-scalac_2.12.8-4.1.5.jar, -deprecation)

A -Xplugin:... flag is created for the semanticdb-scalac when bloopInstall is executed in my shell.

Also the versions of semanticdb-scalac are different in command line (4.1.5) and in vscode (4.1.4). It looks like that my vscode runs an old version of sbt-metals

I just ran the steps in https://github.com/scalameta/metals/issues/647#issuecomment-482596843 including customizing the sbt script to /usr/local/bin/sbt and I am unable to reproduce.

Screenshot 2019-04-15 at 13 31 35

Does your sbt script contain customizations? I installed sbt with homebrew.

Could it be that you have sbt-lock installed? From Gitter https://gitter.im/scalameta/metals?at=5cb20e05c55bd14d35dbcb07

David van Geest @DWvanGeest Apr 13 18:27
@olafurpg good hints in that referenced issue. In my case it appears that sbt-lock is interfering somehow. Once I remove the plugin and the generated lock.sbt, things work as expected. I will try and file a more detailed bug.

I don't know sbt-lock and I think I don't use Ruby.

How is your /usr/local/bin/sbt script?

It turns out that I have a corrupted JAR at ~/.coursier/cache/v1/https/repo1.maven.org/maven2/org/scalameta/semanticdb-scalac_2.12.8/4.1.4/semanticdb-scalac_2.12.8-4.1.4.jar. When sbt generates scalacOptions for compiler plugins, the scalac-plugin.xml resource is not found in the JAR. As a result, semanticdb-scalac_2.12.8-4.1.4.jar is not recognized as a compiler plugin to sbt, and the -Xplugin is omitted.

When I debug this problem some days ago, I tried to add export SCALAMETA_VERSION=4.1.5 to my ~/.bash_profile and forget to restart vscode. Therefore, metals in vscode still use the corrupted semanticdb-scalac_2.12.8-4.1.4.jar while sbt started from command line can see the new environment variable and installed a good semanticdb-scalac_2.12.8-4.1.5.jar.


Now I deleted my cached semanticdb-scalac_2.12.8-4.1.4.jar and sbt redownloaded it. Everything goes well now.

It seems that coursier did not check file integrity if you kill JVM when downloading a file.

Thank you for tracking down the issue!

@Atry it could be that this issue is fixed if you upgrade to the latest coursier, it sounds similar to https://github.com/coursier/coursier/issues/988 according to @alexarchambault

Was this page helpful?
0 / 5 - 0 ratings