scalameta / metals

Scala language server with rich IDE features 🚀
https://scalameta.org/metals/
Apache License 2.0
2.04k stars 318 forks source link

Metals cannot follow definitions of some items #3975

Open frioux opened 2 years ago

frioux commented 2 years ago

Describe the bug

At work we use Gradle. It seems like any types that we import via an includeBuild cannot be followed by metals. This means you can't go to those definitions, you can't autocomplete them, etc.

I made a reproduction by taking a very small slice of our monorepo to try. If I knew gradle more it'd be smaller, apologies for that. The repro is in https://github.com/frioux/metalsBug, if you open examples/spark/src/main/scala/spark_example/App.scala and try to goto defintion of ZRConfig it doesn't work, but other things (like String, or Config or whatever) do in fact work.

Let me know how I can help if you can't figure out how to proceed from here.

I wouldn't be surprised if this were in fact a Bloop bug but I really do not know what I am doing here so I'm starting with this ticket

Expected behavior

Goto definition should work.

Operating system

Linux

Editor/Extension

Nvim/Vim (other)

Version of Metals

v0.11.5

Extra context or search terms

ckipp01 commented 2 years ago

Thanks for the report @frioux. Just to tie these all together (and for visibility, let's continue the conversation here, not on Discord), I hit on the same issue that @dos65 mentioned on Discord. When I opened App.scala while it did correctly identify root in nvim-metals as example/spark/ the import fails with the following:

2022.06.02 12:16:42 ERROR > Could not get unknown property 'repoRootDir' for build of type org.gradle.invocation.DefaultGradle.
2022.06.02 12:16:42 ERROR
2022.06.02 12:16:42 ERROR * Try:
2022.06.02 12:16:42 ERROR Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
2022.06.02 12:16:42 ERROR
2022.06.02 12:16:42 ERROR * Get more help at https://help.gradle.org
2022.06.02 12:16:42 ERROR
2022.06.02 12:16:42 ERROR BUILD FAILED in 587ms
2022.06.02 12:16:42 INFO  time: ran 'gradle bloopInstall' in 1.06s
2022.06.02 12:16:42 ERROR Gradle command failed: /Users/ckipp/Documents/scala-workspace/metalsBug/examples/spark/gradlew --console=plain --init-script /var/folders/fq/nx_jsnyd6550xp03czx898d40000gn/T/metals17476371495373258339/init-script.gradle bloopInstall

Same question as @dos65, where do these variables come from?

frioux commented 2 years ago

Ah sorry about that. First you need to symlink ~/.gradle/init.d/init-repos.gradle to the path of https://github.com/frioux/metalsBug/blob/main/common/gradle/init-repos.gradle, then set the env var STARTERVIEW to the root of your repo. That should unblock you.

On Thu, Jun 2, 2022, at 4:23 AM, Chris Kipp wrote:

Thanks for the report @frioux https://github.com/frioux. Just to tie these all together (and for visibility, let's continue the conversation here, not on Discord), I hit on the same issue that @dos65 https://github.com/dos65 mentioned on Discord. When I opened App.scala while it did correctly identify root in nvim-metals as example/spark/ the import fails with the following:

2022.06.02 12:16:42 ERROR > Could not get unknown property 'repoRootDir' for build of type org.gradle.invocation.DefaultGradle. 2022.06.02 12:16:42 ERROR 2022.06.02 12:16:42 ERROR * Try: 2022.06.02 12:16:42 ERROR Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. 2022.06.02 12:16:42 ERROR 2022.06.02 12:16:42 ERROR * Get more help at https://help.gradle.org 2022.06.02 12:16:42 ERROR 2022.06.02 12:16:42 ERROR BUILD FAILED in 587ms 2022.06.02 12:16:42 INFO time: ran 'gradle bloopInstall' in 1.06s 2022.06.02 12:16:42 ERROR Gradle command failed: /Users/ckipp/Documents/scala-workspace/metalsBug/examples/spark/gradlew --console=plain --init-script /var/folders/fq/nx_jsnyd6550xp03czx898d40000gn/T/metals17476371495373258339/init-script.gradle bloopInstall Same question as @dos65 https://github.com/dos65, where do these variables come from?

— Reply to this email directly, view it on GitHub https://github.com/scalameta/metals/issues/3975#issuecomment-1144750943, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAB7Y6W3H4Y5WHO3W33R43VNCKUJANCNFSM5XS6S5EA. You are receiving this because you were mentioned.Message ID: @.***>

-- fREW Schmidt https://blog.afoolishmanifesto.com

ckipp01 commented 2 years ago

Alright, more issues. After doing the steps I still wasn't able to do a bloop install.

2022.06.02 15:06:13 ERROR
2022.06.02 15:06:13 INFO  See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings
2022.06.02 15:06:13 ERROR * What went wrong:
2022.06.02 15:06:13 ERROR A problem occurred evaluating root project 'spark_example'.
2022.06.02 15:06:13 ERROR > Failed to apply plugin 'bloop'.
2022.06.02 15:06:13 ERROR    > Cannot add extension with name 'bloop', as there is an extension already registered with that name.
2022.06.02 15:06:13 ERROR
2022.06.02 15:06:13 ERROR * Try:
2022.06.02 15:06:13 ERROR Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
2022.06.02 15:06:13 ERROR
2022.06.02 15:06:13 ERROR * Get more help at https://help.gradle.org
2022.06.02 15:06:13 ERROR
2022.06.02 15:06:13 ERROR BUILD FAILED in 4s

After removing all of the Bloop stuff from your build definition and letting Metals just handle the import I was able to get the import to succeed, however it doesn't recognize your com.ziprecruiter dependency, which causes compilation not to work in your project. The only reference I see to this dep in your setup is in dependencies.gradle in this line:

dependencies {
    compileOnly(
            [group: 'org.scala-lang', name: 'scala-compiler',version: "2.12.15"],
            [group: 'org.scala-lang', name: 'scala-library', version: "2.12.15"],
    )
    implementation "com.ziprecruiter:zr-config"
}

However, how does that work? When looking for any com.ziprecruiter deps, I don't see any.

❯ cs complete-dep com.zip
com.zipfworks
com.zippoy
com.zipwhip

Are these hosted privately by your company?

Total aside, since I don't know Gradle well, but why in dependencies.gradle are you including 2.12 artifacts of the scala compiler, but then in your build.gradle you're including 2.13 artifacts?

frioux commented 2 years ago

I am surprised that the bloop config caused issues, but who knows. The dep you are not seeing is present in the repo and should be configured by https://github.com/frioux/metalsBug/blob/main/examples/spark/settings.gradle.

Maybe go into examples/spark and run ./gradlew build , to see it working?

On Thu, Jun 2, 2022, at 6:14 AM, Chris Kipp wrote:

Alright, more issues. After doing the steps I still wasn't able to do a bloop install.

2022.06.02 15:06:13 ERROR 2022.06.02 15:06:13 INFO See https://docs.gradle.org/7.2/userguide/command_line_interface.html#sec:command_line_warnings 2022.06.02 15:06:13 ERROR * What went wrong: 2022.06.02 15:06:13 ERROR A problem occurred evaluating root project 'spark_example'. 2022.06.02 15:06:13 ERROR > Failed to apply plugin 'bloop'. 2022.06.02 15:06:13 ERROR > Cannot add extension with name 'bloop', as there is an extension already registered with that name. 2022.06.02 15:06:13 ERROR 2022.06.02 15:06:13 ERROR * Try: 2022.06.02 15:06:13 ERROR Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. 2022.06.02 15:06:13 ERROR 2022.06.02 15:06:13 ERROR * Get more help at https://help.gradle.org 2022.06.02 15:06:13 ERROR 2022.06.02 15:06:13 ERROR BUILD FAILED in 4s After removing all of the Bloop stuff from your build definition and letting Metals just handle the import I was able to get the import to succeed, however it doesn't recognize your com.ziprecruiter dependency, which causes compilation not to work in your project. The only reference I see to this dep in your setup is in dependencies.gradle in this line:

dependencies { compileOnly( [group: 'org.scala-lang', name: 'scala-compiler',version: "2.12.15"], [group: 'org.scala-lang', name: 'scala-library', version: "2.12.15"], ) implementation "com.ziprecruiter:zr-config" } However, how does that work? When looking for any com.ziprecruiter deps, I don't see any.

❯ cs complete-dep com.zip com.zipfworks com.zippoy com.zipwhip Are these hosted privately by your company?

— Reply to this email directly, view it on GitHub https://github.com/scalameta/metals/issues/3975#issuecomment-1144850130, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAB7Y7YIEOH2EYUNEVAGC3VNCXUDANCNFSM5XS6S5EA. You are receiving this because you were mentioned.Message ID: @.***>

-- fREW Schmidt https://blog.afoolishmanifesto.com

ckipp01 commented 2 years ago

🤔 weird after running ./gradlew build , to see it working? I was able to get it to compile, and then looking at the classpath entry in the .bloop/spark-example.json I do see "/Users/ckipp/Documents/scala-workspace/metalsBug/common/scala/config/build/classes/scala/main", listed there where the classes should be located, but I really don't know what's going on without really digging in further.

Arthurm1 commented 2 years ago

Looking at this on my phone so it's a bit tricky.

The way gradle works is that it always builds the jars for projects and sub projects.

This appears to be a multi project build and the project that doesn't compile is depending on the zr-config project.

Normally you'd depend on another project using something like implementation project(':zr-config') This would be fine in bloop as the project would have the zr-config classes dir in its classpath. But the way the dependency has been declared is telling gradle to use the jar that the zr-config project builds as it's declared as implementation "com.ziprecruiter:zr-config" as though it was downloading it from maven

This will never work in bloop as bloop doesn't build jars

Is there any reason you can't change the build to use the standard project dependency declaration as above?

frioux commented 2 years ago

Just to be 100% clear: bloop does successfully compile this project. It may not surface metadata to metals as expected or hoped for, but it builds just fine.

As for why the weird structure, I honestly couldn't tell you. People who've worked on Scala and Java projects much more than I have set it up this way. It may be related to the fact that it's a monorepo with over 300 gradle based subprojects in it.

On Thu, Jun 2, 2022, at 8:49 AM, Arthur McGibbon wrote:

Looking at this on my phone so it's a bit tricky.

The way gradle works is that it always builds the jars for projects and sub projects.

This appears to be a multi project build and the project that doesn't compile is depending on the zr-config project.

Normally you'd depend on another project using something like implementation project(':zr-config') This would be fine in bloop as the project would have the zr-config classes dir in its classpath. But the way the dependency has been declared is telling gradle to use the jar that the zr-config project builds as it's declared as implementation "com.ziprecruiter:zr-config" as though it was downloading it from maven

This will never work in bloop as bloop doesn't build jars

Is there any reason you can't change the build to use the standard project dependency declaration as above?

— Reply to this email directly, view it on GitHub https://github.com/scalameta/metals/issues/3975#issuecomment-1145018565, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAB7Y5I5HAUHSV5NQMY253VNDJXDANCNFSM5XS6S5EA. You are receiving this because you were mentioned.Message ID: @.***>

-- fREW Schmidt https://blog.afoolishmanifesto.com

Arthurm1 commented 2 years ago

I can't examine the files locally but I imagine the reason bloop compiles is because you've already created the jar using gradle and that is what bloop is using. In the workspace .bloop, there should be a number of JSON files. Can you post them here? I suspect the classpath is referring to the jar instead of the classes dir of the zr-config project.

frioux commented 2 years ago

Here's the main one, I think you're right:

{
    "version": "1.4.0",
    "project": {
        "name": "spark_example",
        "directory": "/home/frew/code/eg/examples/spark",
        "workspaceDir": "/home/frew/code/eg/examples/spark",
        "sources": [
            "/home/frew/code/eg/examples/spark/src/main/scala",
            "/home/frew/code/eg/examples/spark/src/main/java"
        ],
        "dependencies": [

        ],
        "classpath": [
            "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-compiler/2.12.15/f90aef0503d858da15b4ecb3de24e6a92df73f34/scala-compiler-2.12.15.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.15/3eca572cf97238683a8a545dabb22b52781547c8/scala-reflect-2.12.15.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.15/f2e89c89340282c9625ac57efb451056f31af57/scala-library-2.12.15.jar",
            "/home/frew/code/eg/common/scala/config/build/classes/java/main",
            "/home/frew/code/eg/common/scala/config/build/classes/scala/main",
            "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/29.0-jre/801142b4c3d0f0770dd29abea50906cacfddd447/guava-29.0-jre.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.0.6/e22de3366a698a9f744106fb6dda4335838cf6a7/scala-xml_2.12-1.0.6.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1dcf1de382a0bf95a3d8b0849546c88bac1292c9/failureaccess-1.0.1.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/b421526c5f297295adef1c886e5246c39d4ac629/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/25ea2e8b0c338a877313bd4672d3fe056ea78f0d/jsr305-3.0.2.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/2.11.1/8c43bf8f99b841d23aadda6044329dad9b63c185/checker-qual-2.11.1.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.3.4/dac170e4594de319655ffb62f41cbd6dbb5e601e/error_prone_annotations-2.3.4.jar",
            "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.3/ba035118bc8bac37d7eff77700720999acd9986d/j2objc-annotations-1.3.jar"
        ],
        "out": "/home/frew/code/eg/examples/spark/.bloop/spark_example/build",
        "classesDir": "/home/frew/code/eg/examples/spark/.bloop/spark_example/build/classes",
        "resources": [
            "/home/frew/code/eg/examples/spark/src/main/resources"
        ],
        "scala": {
            "organization": "org.scala-lang",
            "name": "scala-compiler",
            "version": "2.12.15",
            "options": [
                "-deprecation",
                "-encoding",
                "utf8",
                "-feature",
                "-target:jvm-1.8",
                "-unchecked"
            ],
            "jars": [
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-compiler/2.12.15/f90aef0503d858da15b4ecb3de24e6a92df73f34/scala-compiler-2.12.15.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-sbt/compiler-bridge_2.12/1.3.5/7970db798162352a0424936b1b1680b7478ecd5d/compiler-bridge_2.12-1.3.5-sources.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-sbt/compiler-interface/1.3.5/1f7379ff56b1795b523838cd06ff24272104c380/compiler-interface-1.3.5.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.15/3eca572cf97238683a8a545dabb22b52781547c8/scala-reflect-2.12.15.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.15/f2e89c89340282c9625ac57efb451056f31af57/scala-library-2.12.15.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.0.6/e22de3366a698a9f744106fb6dda4335838cf6a7/scala-xml_2.12-1.0.6.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.protobuf/protobuf-java/3.7.0/dbb5e9230a91f2a6d011096c2b9c10a5a6e5f7f2/protobuf-java-3.7.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-sbt/util-interface/1.3.0/edc7556e112da142bf7e9ead1440d024fd3314c4/util-interface-1.3.0.jar"
            ],
            "setup": {
                "order": "java->scala",
                "addLibraryToBootClasspath": true,
                "addCompilerToClasspath": false,
                "addExtraJarsToClasspath": false,
                "manageBootClasspath": true,
                "filterLibraryFromClasspath": true
            }
        },
        "java": {
            "options": [
                "-source",
                "1.8",
                "-target",
                "1.8",
                "-h",
                "/home/frew/code/eg/examples/spark/build/generated/sources/headers/java/main",
                "-g",
                "-sourcepath",
                "",
                "-proc:none",
                "-XDuseUnsharedTable=true"
            ]
        },
        "platform": {
            "name": "jvm",
            "config": {
                "home": "/usr/lib/jvm/java-8-openjdk-amd64",
                "options": [

                ]
            },
            "mainClass": [
                "spark_example.App"
            ],
            "classpath": [
                "/home/frew/code/eg/common/scala/config/build/libs/zr-config.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/29.0-jre/801142b4c3d0f0770dd29abea50906cacfddd447/guava-29.0-jre.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-jackson_2.12/3.6.10/7ca4c3ca9e6d88a23a8df5352ce06b74ec49c350/json4s-jackson_2.12-3.6.10.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-core_2.12/3.6.10/c71012a951922389e476e9171511951698a96db7/json4s-core_2.12-3.6.10.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.outr/profig_2.12/2.3.5/c6ca625f3ee768db64f6ab5e57f9f869f43ace77/profig_2.12-2.3.5.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-ast_2.12/3.6.10/41f27fc8233ca4d91d72a05a6718837a141bfb1/json4s-ast_2.12-3.6.10.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-scalap_2.12/3.6.10/26fdfe0cb7a86c12f641af9f9b95ad5722e4dd8/json4s-scalap_2.12-3.6.10.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.outr/profig-macros_2.12/2.3.5/65cbc551446b233d1bfd72a1142a3976bc242be0/profig-macros_2.12-2.3.5.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-generic-extras_2.12/0.11.1/6e886f3b77de9c7a596d35b85ecf8d87ef5a80ac/circe-generic-extras_2.12-0.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-generic_2.12/0.11.1/825bc9539589a769f54dd3403f720e6318032eab/circe-generic_2.12-0.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-parser_2.12/0.11.1/d1344e494eae02303ca6dc2c6dbec5d9fdca61c1/circe-parser_2.12-0.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-jawn_2.12/0.11.1/66614df65c269b8fb909fa141419ddb641231e8e/circe-jawn_2.12-0.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-yaml_2.12/0.9.0/ccef49aa20eb64ee3e3affe41dc3fb944fa3b285/circe-yaml_2.12-0.9.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-core_2.12/0.11.1/537b5544654d031aebc849777caae6938e07eba8/circe-core_2.12-0.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.akka-js/shocon-parser_2.12/0.4.1/b98e43a96a8f97dd56f6e198cf3ebd55a980e211/shocon-parser_2.12-0.4.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.1.1/f56ecaf2e5b7138c87449303c763fd1654543fde/scala-xml_2.12-1.1.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-core_2.12/1.5.0/f0c04b4e58a26a73c2c5d35b41f2e12932903686/cats-core_2.12-1.5.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-macros_2.12/1.5.0/8b396ee93c26acd438329e3951b76d327be3201d/cats-macros_2.12-1.5.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/machinist_2.12/0.6.6/4086874ad28be846916347dd74ba5395c63eaf50/machinist_2.12-0.6.6.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.8/682d33402cdae50258afa2c0860eb54688dab610/scala-reflect-2.12.8.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-numbers_2.12/0.11.1/312278e28d8b58659dcf02133e8c783bae168b40/circe-numbers_2.12-0.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.chuusai/shapeless_2.12/2.3.3/6041e2c4871650c556a9c6842e43c04ed462b11f/shapeless_2.12-2.3.3.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/fastparse_2.12/1.0.0/2473a344aa1200fd50b7ff78281188c172f9cfcb/fastparse_2.12-1.0.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/jawn-parser_2.12/0.14.1/dfd46f09c332100fcaa9daa4bf3468714b4543b1/jawn-parser_2.12-0.14.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-kernel_2.12/1.5.0/d651570f029d32ff30424c2562cffa4ce719a479/cats-kernel_2.12-1.5.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/macro-compat_2.12/1.1.1/ed809d26ef4237d7c079ae6cf7ebd0dfa7986adf/macro-compat_2.12-1.1.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/fastparse-utils_2.12/1.0.0/2900ec8460abec27913f4154b338e61fd482607/fastparse-utils_2.12-1.0.0.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/sourcecode_2.12/0.1.4/ef9a771975cb0860f2b42778c5cf1f5d76818979/sourcecode_2.12-0.1.4.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.11/1a0634714a956c1aae9abefc83acaf6d4eabfa7d/scala-library-2.12.11.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1dcf1de382a0bf95a3d8b0849546c88bac1292c9/failureaccess-1.0.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/b421526c5f297295adef1c886e5246c39d4ac629/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/25ea2e8b0c338a877313bd4672d3fe056ea78f0d/jsr305-3.0.2.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/2.11.1/8c43bf8f99b841d23aadda6044329dad9b63c185/checker-qual-2.11.1.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.3.4/dac170e4594de319655ffb62f41cbd6dbb5e601e/error_prone_annotations-2.3.4.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.3/ba035118bc8bac37d7eff77700720999acd9986d/j2objc-annotations-1.3.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.9.10.6/fbe40c0535b836082be7e3f8cac79275b9c8ff4a/jackson-databind-2.9.10.6.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.thoughtworks.paranamer/paranamer/2.8/619eba74c19ccf1da8ebec97a2d7f8ba05773dd6/paranamer-2.8.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.9.10/53ab2f0f92e87ea4874c8c6997335c211d81e636/jackson-annotations-2.9.10.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.9.10/66b715dec9dd8b0f39f3296e67e05913bf422d0c/jackson-core-2.9.10.jar",
                "/home/frew/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.23/ec62d74fe50689c28c0ff5b35d3aebcaa8b5be68/snakeyaml-1.23.jar"
            ]
        },
        "resolution": {
            "modules": [
                {
                    "organization": "org.typelevel",
                    "name": "cats-kernel_2.12",
                    "version": "1.5.0",
                    "artifacts": [
                        {
                            "name": "cats-kernel_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-kernel_2.12/1.5.0/d651570f029d32ff30424c2562cffa4ce719a479/cats-kernel_2.12-1.5.0.jar"
                        },
                        {
                            "name": "cats-kernel_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-kernel_2.12/1.5.0/bfc841bc458a3329b9a47aae06287df631df1b68/cats-kernel_2.12-1.5.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-jawn_2.12",
                    "version": "0.11.1",
                    "artifacts": [
                        {
                            "name": "circe-jawn_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-jawn_2.12/0.11.1/4c506d4e0dd21747c1e97de958c36740b3d8ffd6/circe-jawn_2.12-0.11.1-sources.jar"
                        },
                        {
                            "name": "circe-jawn_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-jawn_2.12/0.11.1/66614df65c269b8fb909fa141419ddb641231e8e/circe-jawn_2.12-0.11.1.jar"
                        }
                    ]
                },
                {
                    "organization": "org.typelevel",
                    "name": "machinist_2.12",
                    "version": "0.6.6",
                    "artifacts": [
                        {
                            "name": "machinist_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/machinist_2.12/0.6.6/1aafa2c22a3fb1e2c1385a1c2b796340a166ff0b/machinist_2.12-0.6.6-sources.jar"
                        },
                        {
                            "name": "machinist_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/machinist_2.12/0.6.6/4086874ad28be846916347dd74ba5395c63eaf50/machinist_2.12-0.6.6.jar"
                        }
                    ]
                },
                {
                    "organization": "com.lihaoyi",
                    "name": "sourcecode_2.12",
                    "version": "0.1.4",
                    "artifacts": [
                        {
                            "name": "sourcecode_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/sourcecode_2.12/0.1.4/ffb135dacaf0d989c260a486c8b86867bcab2e22/sourcecode_2.12-0.1.4-sources.jar"
                        },
                        {
                            "name": "sourcecode_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/sourcecode_2.12/0.1.4/ef9a771975cb0860f2b42778c5cf1f5d76818979/sourcecode_2.12-0.1.4.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scalatestplus",
                    "name": "junit-4-12_2.13",
                    "version": "3.2.0.0",
                    "artifacts": [
                        {
                            "name": "junit-4-12_2.13",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalatestplus/junit-4-12_2.13/3.2.0.0/ac557bb3f52704e02ea4024a6fed85a92cc4369a/junit-4-12_2.13-3.2.0.0.jar"
                        },
                        {
                            "name": "junit-4-12_2.13",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalatestplus/junit-4-12_2.13/3.2.0.0/c2ae6abadf359356d56c6b3db2620b6b11590c9/junit-4-12_2.13-3.2.0.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.chuusai",
                    "name": "shapeless_2.12",
                    "version": "2.3.3",
                    "artifacts": [
                        {
                            "name": "shapeless_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.chuusai/shapeless_2.12/2.3.3/6041e2c4871650c556a9c6842e43c04ed462b11f/shapeless_2.12-2.3.3.jar"
                        },
                        {
                            "name": "shapeless_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.chuusai/shapeless_2.12/2.3.3/2511271188a92962fcf31a9a217b8122f75453a/shapeless_2.12-2.3.3-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.outr",
                    "name": "profig-macros_2.12",
                    "version": "2.3.5",
                    "artifacts": [
                        {
                            "name": "profig-macros_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.outr/profig-macros_2.12/2.3.5/28860c5b010fe7075fe7b0e156b3a7ea4356c194/profig-macros_2.12-2.3.5-sources.jar"
                        },
                        {
                            "name": "profig-macros_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.outr/profig-macros_2.12/2.3.5/65cbc551446b233d1bfd72a1142a3976bc242be0/profig-macros_2.12-2.3.5.jar"
                        }
                    ]
                },
                {
                    "organization": "org.typelevel",
                    "name": "jawn-parser_2.12",
                    "version": "0.14.1",
                    "artifacts": [
                        {
                            "name": "jawn-parser_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/jawn-parser_2.12/0.14.1/dfd46f09c332100fcaa9daa4bf3468714b4543b1/jawn-parser_2.12-0.14.1.jar"
                        },
                        {
                            "name": "jawn-parser_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/jawn-parser_2.12/0.14.1/6741fcada49796505b1e61f86b1baea7acca4ba1/jawn-parser_2.12-0.14.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scalatest",
                    "name": "scalatest-core_2.13",
                    "version": "3.2.0",
                    "artifacts": [
                        {
                            "name": "scalatest-core_2.13",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalatest/scalatest-core_2.13/3.2.0/29eb9344c741ca67459381d8cbd0c7765d9f20ef/scalatest-core_2.13-3.2.0.jar"
                        },
                        {
                            "name": "scalatest-core_2.13",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalatest/scalatest-core_2.13/3.2.0/9dea3c566abcedbd4f77290dc0b5e0df03e7d112/scalatest-core_2.13-3.2.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-library",
                    "version": "2.13.2",
                    "artifacts": [
                        {
                            "name": "scala-library",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.13.2/280d2a51b3130cf869cb416404b2c0e44e433f3e/scala-library-2.13.2.jar"
                        },
                        {
                            "name": "scala-library",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.13.2/3486811eaca109f05fd7c8a3d772c141ab9d368f/scala-library-2.13.2-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.lihaoyi",
                    "name": "fastparse_2.12",
                    "version": "1.0.0",
                    "artifacts": [
                        {
                            "name": "fastparse_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/fastparse_2.12/1.0.0/2473a344aa1200fd50b7ff78281188c172f9cfcb/fastparse_2.12-1.0.0.jar"
                        },
                        {
                            "name": "fastparse_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/fastparse_2.12/1.0.0/b1fdfd4c95bdb3f49ec78837be78d657a5ac86c0/fastparse_2.12-1.0.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.typelevel",
                    "name": "macro-compat_2.12",
                    "version": "1.1.1",
                    "artifacts": [
                        {
                            "name": "macro-compat_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/macro-compat_2.12/1.1.1/ed809d26ef4237d7c079ae6cf7ebd0dfa7986adf/macro-compat_2.12-1.1.1.jar"
                        },
                        {
                            "name": "macro-compat_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/macro-compat_2.12/1.1.1/ade6d6ec81975cf514b0f9e2061614f2799cfe97/macro-compat_2.12-1.1.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-generic-extras_2.12",
                    "version": "0.11.1",
                    "artifacts": [
                        {
                            "name": "circe-generic-extras_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-generic-extras_2.12/0.11.1/6e886f3b77de9c7a596d35b85ecf8d87ef5a80ac/circe-generic-extras_2.12-0.11.1.jar"
                        },
                        {
                            "name": "circe-generic-extras_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-generic-extras_2.12/0.11.1/c8a20967b654bc1fdd547e7d2848ecbb3087b28b/circe-generic-extras_2.12-0.11.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.checkerframework",
                    "name": "checker-qual",
                    "version": "2.11.1",
                    "artifacts": [
                        {
                            "name": "checker-qual",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/2.11.1/8c43bf8f99b841d23aadda6044329dad9b63c185/checker-qual-2.11.1.jar"
                        },
                        {
                            "name": "checker-qual",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/2.11.1/81dbb91c8dc3c53ae7066ce9e70ed7efb0551261/checker-qual-2.11.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.outr",
                    "name": "profig_2.12",
                    "version": "2.3.5",
                    "artifacts": [
                        {
                            "name": "profig_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.outr/profig_2.12/2.3.5/b592bf6c30ccbeb1c42b97b6249e30bde9ca6c8c/profig_2.12-2.3.5-sources.jar"
                        },
                        {
                            "name": "profig_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.outr/profig_2.12/2.3.5/c6ca625f3ee768db64f6ab5e57f9f869f43ace77/profig_2.12-2.3.5.jar"
                        }
                    ]
                },
                {
                    "organization": "com.fasterxml.jackson.core",
                    "name": "jackson-databind",
                    "version": "2.9.10.6",
                    "artifacts": [
                        {
                            "name": "jackson-databind",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.9.10.6/fbe40c0535b836082be7e3f8cac79275b9c8ff4a/jackson-databind-2.9.10.6.jar"
                        },
                        {
                            "name": "jackson-databind",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-databind/2.9.10.6/a1c52c114891471c86da0b2c742badc4a3a0f63/jackson-databind-2.9.10.6-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-reflect",
                    "version": "2.12.15",
                    "artifacts": [
                        {
                            "name": "scala-reflect",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.15/3eca572cf97238683a8a545dabb22b52781547c8/scala-reflect-2.12.15.jar"
                        },
                        {
                            "name": "scala-reflect",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.15/2dba219f833d494a920c8d884d68788e2c508f18/scala-reflect-2.12.15-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.google.guava",
                    "name": "guava",
                    "version": "29.0-jre",
                    "artifacts": [
                        {
                            "name": "guava",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/29.0-jre/33e6868bc0fcb9b4b493123eeec78d1352934e87/guava-29.0-jre-sources.jar"
                        },
                        {
                            "name": "guava",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/29.0-jre/801142b4c3d0f0770dd29abea50906cacfddd447/guava-29.0-jre.jar"
                        }
                    ]
                },
                {
                    "organization": "com.google.guava",
                    "name": "failureaccess",
                    "version": "1.0.1",
                    "artifacts": [
                        {
                            "name": "failureaccess",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1d064e61aad6c51cc77f9b59dc2cccc78e792f5a/failureaccess-1.0.1-sources.jar"
                        },
                        {
                            "name": "failureaccess",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1dcf1de382a0bf95a3d8b0849546c88bac1292c9/failureaccess-1.0.1.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-reflect",
                    "version": "2.13.2",
                    "artifacts": [
                        {
                            "name": "scala-reflect",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.13.2/11f47bb48cc482aee6a47fb058eca05e576e7411/scala-reflect-2.13.2-sources.jar"
                        },
                        {
                            "name": "scala-reflect",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.13.2/2a6dd4989a27aba0dd43bc297045cff633d70064/scala-reflect-2.13.2.jar"
                        }
                    ]
                },
                {
                    "organization": "com.google.guava",
                    "name": "listenablefuture",
                    "version": "9999.0-empty-to-avoid-conflict-with-guava",
                    "artifacts": [
                        {
                            "name": "listenablefuture",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/b421526c5f297295adef1c886e5246c39d4ac629/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scalactic",
                    "name": "scalactic_2.13",
                    "version": "3.2.0",
                    "artifacts": [
                        {
                            "name": "scalactic_2.13",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalactic/scalactic_2.13/3.2.0/8b4aa21937d3de4b0396bc503231f4a7560d8908/scalactic_2.13-3.2.0-sources.jar"
                        },
                        {
                            "name": "scalactic_2.13",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalactic/scalactic_2.13/3.2.0/3935d8629ea203fbfa7d3a3b1599d21646ea32f6/scalactic_2.13-3.2.0.jar"
                        }
                    ]
                },
                {
                    "organization": "org.json4s",
                    "name": "json4s-jackson_2.12",
                    "version": "3.6.10",
                    "artifacts": [
                        {
                            "name": "json4s-jackson_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-jackson_2.12/3.6.10/7ca4c3ca9e6d88a23a8df5352ce06b74ec49c350/json4s-jackson_2.12-3.6.10.jar"
                        },
                        {
                            "name": "json4s-jackson_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-jackson_2.12/3.6.10/26993f8a527cdce2be25cbe63101567aa0f470fb/json4s-jackson_2.12-3.6.10-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.google.j2objc",
                    "name": "j2objc-annotations",
                    "version": "1.3",
                    "artifacts": [
                        {
                            "name": "j2objc-annotations",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.3/ba035118bc8bac37d7eff77700720999acd9986d/j2objc-annotations-1.3.jar"
                        },
                        {
                            "name": "j2objc-annotations",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.3/d26c56180205cbb50447c3eca98ecb617cf9f58b/j2objc-annotations-1.3-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-library",
                    "version": "2.12.15",
                    "artifacts": [
                        {
                            "name": "scala-library",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.15/5e789d895ee2b8b02577db7b6bbb5409798b7daf/scala-library-2.12.15-sources.jar"
                        },
                        {
                            "name": "scala-library",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.15/f2e89c89340282c9625ac57efb451056f31af57/scala-library-2.12.15.jar"
                        }
                    ]
                },
                {
                    "organization": "org.json4s",
                    "name": "json4s-core_2.12",
                    "version": "3.6.10",
                    "artifacts": [
                        {
                            "name": "json4s-core_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-core_2.12/3.6.10/4a96f7fb1b91201efbfc70c53c80e904fcc6884c/json4s-core_2.12-3.6.10-sources.jar"
                        },
                        {
                            "name": "json4s-core_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-core_2.12/3.6.10/c71012a951922389e476e9171511951698a96db7/json4s-core_2.12-3.6.10.jar"
                        }
                    ]
                },
                {
                    "organization": "org.json4s",
                    "name": "json4s-scalap_2.12",
                    "version": "3.6.10",
                    "artifacts": [
                        {
                            "name": "json4s-scalap_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-scalap_2.12/3.6.10/26fdfe0cb7a86c12f641af9f9b95ad5722e4dd8/json4s-scalap_2.12-3.6.10.jar"
                        },
                        {
                            "name": "json4s-scalap_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-scalap_2.12/3.6.10/a8435f89698e55aaa70dc5c027befe3c0784ac9c/json4s-scalap_2.12-3.6.10-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.typelevel",
                    "name": "cats-core_2.12",
                    "version": "1.5.0",
                    "artifacts": [
                        {
                            "name": "cats-core_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-core_2.12/1.5.0/f0c04b4e58a26a73c2c5d35b41f2e12932903686/cats-core_2.12-1.5.0.jar"
                        },
                        {
                            "name": "cats-core_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-core_2.12/1.5.0/888ee4094820ead6cde31add3f2f41d4ea14d681/cats-core_2.12-1.5.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-compiler",
                    "version": "2.12.15",
                    "artifacts": [
                        {
                            "name": "scala-compiler",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-compiler/2.12.15/e0a6ec991859c91fc40204bb478f85f076365424/scala-compiler-2.12.15-sources.jar"
                        },
                        {
                            "name": "scala-compiler",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-compiler/2.12.15/f90aef0503d858da15b4ecb3de24e6a92df73f34/scala-compiler-2.12.15.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-numbers_2.12",
                    "version": "0.11.1",
                    "artifacts": [
                        {
                            "name": "circe-numbers_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-numbers_2.12/0.11.1/9929b114b0eb57732bbf98ba0bae6491f2ae0ea2/circe-numbers_2.12-0.11.1-sources.jar"
                        },
                        {
                            "name": "circe-numbers_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-numbers_2.12/0.11.1/312278e28d8b58659dcf02133e8c783bae168b40/circe-numbers_2.12-0.11.1.jar"
                        }
                    ]
                },
                {
                    "organization": "org.hamcrest",
                    "name": "hamcrest-core",
                    "version": "1.3",
                    "artifacts": [
                        {
                            "name": "hamcrest-core",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/42a25dc3219429f0e5d060061f71acb49bf010a0/hamcrest-core-1.3.jar"
                        },
                        {
                            "name": "hamcrest-core",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.hamcrest/hamcrest-core/1.3/1dc37250fbc78e23a65a67fbbaf71d2e9cbc3c0b/hamcrest-core-1.3-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang.modules",
                    "name": "scala-xml_2.12",
                    "version": "1.1.1",
                    "artifacts": [
                        {
                            "name": "scala-xml_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.1.1/f56ecaf2e5b7138c87449303c763fd1654543fde/scala-xml_2.12-1.1.1.jar"
                        },
                        {
                            "name": "scala-xml_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.1.1/556a78441b13aea4f2f4eebe0b4bcd6e9e4975f9/scala-xml_2.12-1.1.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-yaml_2.12",
                    "version": "0.9.0",
                    "artifacts": [
                        {
                            "name": "circe-yaml_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-yaml_2.12/0.9.0/1e7e95b99dc9aac98f8bffa4365cb3cb74adb445/circe-yaml_2.12-0.9.0-sources.jar"
                        },
                        {
                            "name": "circe-yaml_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-yaml_2.12/0.9.0/ccef49aa20eb64ee3e3affe41dc3fb944fa3b285/circe-yaml_2.12-0.9.0.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scalatest",
                    "name": "scalatest-compatible",
                    "version": "3.2.0",
                    "artifacts": [
                        {
                            "name": "scalatest-compatible",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalatest/scalatest-compatible/3.2.0/1e6b13866e543f4637fe36c956ef61d1eb9b4a8a/scalatest-compatible-3.2.0-sources.jar"
                        },
                        {
                            "name": "scalatest-compatible",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scalatest/scalatest-compatible/3.2.0/29c6b56040fdd0fe1af3255d7acacd691a960ff3/scalatest-compatible-3.2.0.jar"
                        }
                    ]
                },
                {
                    "organization": "org.akka-js",
                    "name": "shocon-parser_2.12",
                    "version": "0.4.1",
                    "artifacts": [
                        {
                            "name": "shocon-parser_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.akka-js/shocon-parser_2.12/0.4.1/7e850870fe4e91089c21bc460cfefac69f59a6c5/shocon-parser_2.12-0.4.1-sources.jar"
                        },
                        {
                            "name": "shocon-parser_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.akka-js/shocon-parser_2.12/0.4.1/b98e43a96a8f97dd56f6e198cf3ebd55a980e211/shocon-parser_2.12-0.4.1.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang.modules",
                    "name": "scala-xml_2.12",
                    "version": "1.0.6",
                    "artifacts": [
                        {
                            "name": "scala-xml_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.0.6/e22de3366a698a9f744106fb6dda4335838cf6a7/scala-xml_2.12-1.0.6.jar"
                        },
                        {
                            "name": "scala-xml_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.12/1.0.6/429925530fb0f9a6fb26e5160532b7b3426557c0/scala-xml_2.12-1.0.6-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "junit",
                    "name": "junit",
                    "version": "4.12",
                    "artifacts": [
                        {
                            "name": "junit",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/a6c32b40bf3d76eca54e3c601e5d1470c86fcdfa/junit-4.12-sources.jar"
                        },
                        {
                            "name": "junit",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/junit/junit/4.12/2973d150c0dc1fefe998f834810d68f278ea58ec/junit-4.12.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-reflect",
                    "version": "2.12.8",
                    "artifacts": [
                        {
                            "name": "scala-reflect",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.8/682d33402cdae50258afa2c0860eb54688dab610/scala-reflect-2.12.8.jar"
                        },
                        {
                            "name": "scala-reflect",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-reflect/2.12.8/2b4a5bbdc19f8ab34d474f30dbca957addc8ae09/scala-reflect-2.12.8-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.fasterxml.jackson.core",
                    "name": "jackson-annotations",
                    "version": "2.9.10",
                    "artifacts": [
                        {
                            "name": "jackson-annotations",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.9.10/53ab2f0f92e87ea4874c8c6997335c211d81e636/jackson-annotations-2.9.10.jar"
                        },
                        {
                            "name": "jackson-annotations",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-annotations/2.9.10/62d22990d6d2798103792f6edcd54714c2f6fbf4/jackson-annotations-2.9.10-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-generic_2.12",
                    "version": "0.11.1",
                    "artifacts": [
                        {
                            "name": "circe-generic_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-generic_2.12/0.11.1/825bc9539589a769f54dd3403f720e6318032eab/circe-generic_2.12-0.11.1.jar"
                        },
                        {
                            "name": "circe-generic_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-generic_2.12/0.11.1/a4bcb5b3c7611d1cdd6dfab68e5035361bf09a9a/circe-generic_2.12-0.11.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang",
                    "name": "scala-library",
                    "version": "2.12.11",
                    "artifacts": [
                        {
                            "name": "scala-library",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.11/1a0634714a956c1aae9abefc83acaf6d4eabfa7d/scala-library-2.12.11.jar"
                        },
                        {
                            "name": "scala-library",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.12.11/10a1c93ef50b6f1ca7c2223c8d84fab484222731/scala-library-2.12.11-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.scala-lang.modules",
                    "name": "scala-xml_2.13",
                    "version": "1.2.0",
                    "artifacts": [
                        {
                            "name": "scala-xml_2.13",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.13/1.2.0/f6abd60d28c189f05183b26c5363713d1d126b83/scala-xml_2.13-1.2.0.jar"
                        },
                        {
                            "name": "scala-xml_2.13",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.scala-lang.modules/scala-xml_2.13/1.2.0/7a7c99769f3823091a150378f37a1d7b7ed73055/scala-xml_2.13-1.2.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.google.code.findbugs",
                    "name": "jsr305",
                    "version": "3.0.2",
                    "artifacts": [
                        {
                            "name": "jsr305",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/b19b5927c2c25b6c70f093767041e641ae0b1b35/jsr305-3.0.2-sources.jar"
                        },
                        {
                            "name": "jsr305",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/25ea2e8b0c338a877313bd4672d3fe056ea78f0d/jsr305-3.0.2.jar"
                        }
                    ]
                },
                {
                    "organization": "com.google.errorprone",
                    "name": "error_prone_annotations",
                    "version": "2.3.4",
                    "artifacts": [
                        {
                            "name": "error_prone_annotations",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.3.4/950adf6dcd7361e3d1e544a6e13b818587f95d14/error_prone_annotations-2.3.4-sources.jar"
                        },
                        {
                            "name": "error_prone_annotations",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.3.4/dac170e4594de319655ffb62f41cbd6dbb5e601e/error_prone_annotations-2.3.4.jar"
                        }
                    ]
                },
                {
                    "organization": "com.lihaoyi",
                    "name": "fastparse-utils_2.12",
                    "version": "1.0.0",
                    "artifacts": [
                        {
                            "name": "fastparse-utils_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/fastparse-utils_2.12/1.0.0/2900ec8460abec27913f4154b338e61fd482607/fastparse-utils_2.12-1.0.0.jar"
                        },
                        {
                            "name": "fastparse-utils_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.lihaoyi/fastparse-utils_2.12/1.0.0/891f76cff455350adc2f122421b67855f93c8dc3/fastparse-utils_2.12-1.0.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-parser_2.12",
                    "version": "0.11.1",
                    "artifacts": [
                        {
                            "name": "circe-parser_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-parser_2.12/0.11.1/7c9359746dad4db38ced3b9fc9e39aa359302dff/circe-parser_2.12-0.11.1-sources.jar"
                        },
                        {
                            "name": "circe-parser_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-parser_2.12/0.11.1/d1344e494eae02303ca6dc2c6dbec5d9fdca61c1/circe-parser_2.12-0.11.1.jar"
                        }
                    ]
                },
                {
                    "organization": "org.typelevel",
                    "name": "cats-macros_2.12",
                    "version": "1.5.0",
                    "artifacts": [
                        {
                            "name": "cats-macros_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-macros_2.12/1.5.0/8b396ee93c26acd438329e3951b76d327be3201d/cats-macros_2.12-1.5.0.jar"
                        },
                        {
                            "name": "cats-macros_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.typelevel/cats-macros_2.12/1.5.0/6349985de0e1c25781d5ec4824b840d585e1ed56/cats-macros_2.12-1.5.0-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "io.circe",
                    "name": "circe-core_2.12",
                    "version": "0.11.1",
                    "artifacts": [
                        {
                            "name": "circe-core_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-core_2.12/0.11.1/537b5544654d031aebc849777caae6938e07eba8/circe-core_2.12-0.11.1.jar"
                        },
                        {
                            "name": "circe-core_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/io.circe/circe-core_2.12/0.11.1/c48b3ec3ec7b9fd210f6fc6d7269122bee5283a3/circe-core_2.12-0.11.1-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.yaml",
                    "name": "snakeyaml",
                    "version": "1.23",
                    "artifacts": [
                        {
                            "name": "snakeyaml",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.23/1186bcf89d33080275bab74a0b0f495af5c812ef/snakeyaml-1.23-sources.jar"
                        },
                        {
                            "name": "snakeyaml",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.yaml/snakeyaml/1.23/ec62d74fe50689c28c0ff5b35d3aebcaa8b5be68/snakeyaml-1.23.jar"
                        }
                    ]
                },
                {
                    "organization": "com.fasterxml.jackson.core",
                    "name": "jackson-core",
                    "version": "2.9.10",
                    "artifacts": [
                        {
                            "name": "jackson-core",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.9.10/66b715dec9dd8b0f39f3296e67e05913bf422d0c/jackson-core-2.9.10.jar"
                        },
                        {
                            "name": "jackson-core",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.fasterxml.jackson.core/jackson-core/2.9.10/2bbe05a007ca22ecf0ed3d3b0b0d8cd9726271c2/jackson-core-2.9.10-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "com.thoughtworks.paranamer",
                    "name": "paranamer",
                    "version": "2.8",
                    "artifacts": [
                        {
                            "name": "paranamer",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.thoughtworks.paranamer/paranamer/2.8/619eba74c19ccf1da8ebec97a2d7f8ba05773dd6/paranamer-2.8.jar"
                        },
                        {
                            "name": "paranamer",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/com.thoughtworks.paranamer/paranamer/2.8/8f3421a8203053a6ab4b74f76a0550d21eee8cfe/paranamer-2.8-sources.jar"
                        }
                    ]
                },
                {
                    "organization": "org.json4s",
                    "name": "json4s-ast_2.12",
                    "version": "3.6.10",
                    "artifacts": [
                        {
                            "name": "json4s-ast_2.12",
                            "classifier": "sources",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-ast_2.12/3.6.10/ed48911bf40b6e93e48ef0c03182b24a183e77e9/json4s-ast_2.12-3.6.10-sources.jar"
                        },
                        {
                            "name": "json4s-ast_2.12",
                            "path": "/home/frew/.gradle/caches/modules-2/files-2.1/org.json4s/json4s-ast_2.12/3.6.10/41f27fc8233ca4d91d72a05a6718837a141bfb1/json4s-ast_2.12-3.6.10.jar"
                        }
                    ]
                }
            ]
        },
        "tags": [
            "library"
        ]
    }
}
ckipp01 commented 2 years ago

but I imagine the reason bloop compiles is because you've already created the jar using gradle

Exactly this. This is why when I first tried I had compilation issues until I used gradle to build the project.

Looking around more:

But the way the dependency has been declared is telling gradle to use the jar that the zr-config project builds as it's declared as implementation "com.ziprecruiter:zr-config" as though it was downloading it from maven

This will never work in bloop as bloop doesn't build jars

This also seems to be correct, for example you can change some stuff in commons, and it won't be reflected when you're trying to use it in your example project unless you compile it with gradle and then it will pick that up and compile with Bloop.

frioux commented 2 years ago

OK, thanks for figuring this out folks.

Is it worth opening an issue with Bloop about this do you think?

Arthurm1 commented 2 years ago

The /home/frew/code/eg/common/scala/config/build/libs/zr-config.jar" line shows bloop thinks this is a dependency jar and the fact that the dependencies section is empty shows it doesn't think this is a project dependency. Both of which are wrong

You can try changing your build definition to use implementation project(':zr-config') and re-importing the build. If that works then great - that's how you'd normally define a project dependency in gradle.

If not - I can look when I'm back from holiday on Thursday. If gradle recognises this as a project dependency in its dependency tree then we should be able to handle this case. I'd be surprised if it does. If it doesn't, then I'd recommend changing your build to a project dependency as I can't see how you wouldn't run into occasional issues as gradle wouldn't know it needed to compile the zr-config project before the main project

frioux commented 2 years ago

I'll try that stuff @Arthurm1; I'm not totally sure how to do it so it might take a bit.

frioux commented 2 years ago

OK @Arthurm1 I verified that I cannot simply switch to the more typical way of declaring cross library dependencies as you suggested. I can also confirm that at least IntelliJ knows how to follow these kinds of deps, so being able to follow them with Metals would be useful. I'm trying to simplify my example for you in the meantime.

Arthurm1 commented 2 years ago

@frioux I've had a proper look at your setup and I don't think there's anything wrong with it. It's fine to setup composite builds to manage large codebases.

However includeBuild is currently not supported. The bloop gradle plugin doesn't interrogate included builds so you're left with the classes output of zr-config on the classpath of spark-example but no zr-config project managing the sources of zr-config. Hence no building of zr-config and no goto-definition

I can't currently think of a nice way to support this without first https://github.com/scalameta/metals/issues/5188 being implemented. I'll have a delve more into the Gradle API but I'm not hopeful.

frioux commented 1 year ago

Thanks for checking

On Sun, Jun 12, 2022, at 2:23 AM, Arthur McGibbon wrote:

@frioux https://github.com/frioux I've had a proper look at your setup and I don't think there's anything wrong with it. It's fine to setup composite builds to manage large codebases.

However includeBuild is currently not supported. The bloop gradle plugin doesn't interrogate included builds so you're left with the classes output of zr-config on the classpath of spark-example but no zr-config project managing the sources of zr-config. Hence no building of zr-config and no goto-definition

I can't currently think of a nice way to support this without first scalameta/metals#5188 https://github.com/scalameta/metals/issues/5188 being implemented. I'll have a delve more into the Gradle API but I'm not hopeful.

— Reply to this email directly, view it on GitHub https://github.com/scalameta/metals/issues/3975#issuecomment-1153111768, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAAB7Y7G6VHT325OXLX6GELVOWUCLANCNFSM5XS6S5EA. You are receiving this because you were mentioned.Message ID: @.***>

-- fREW Schmidt https://blog.afoolishmanifesto.com