scalameta / metals-vscode

Visual Studio Code extension for Metals
https://marketplace.visualstudio.com/items?itemName=scalameta.metals#overview
Apache License 2.0
299 stars 76 forks source link

Scala 3.0.0-M3 does not seem to be supported #480

Closed hmf closed 3 years ago

hmf commented 3 years ago

Describe the bug

I installed the latest version of Scala Metals for VSCode. When I experimented with the latest version of VSCode, code folding does not work nor do I have symbol information. I am using Mill on Scala 3 M3 source code. According to this we should have support. I assume this is because of the 0.9.8 Lithium update.

To Reproduce Steps to reproduce the behavior:

  1. Make sure folding is activated and the icon is always shown in the gutter
  2. Open a Java file and make sure folding is working
  3. Open a Scala file
  4. No folding icon appears in the gutter. No folding commands work

Expected behavior

I expected folding to work out of the box.

Screenshots

When inspecting the logs I get:

2020.12.31 14:58:57 INFO  Attempting to connect to the build server...
Starting the bsp launcher for bloop...
Opening a bsp server connection with 'bsp --protocol local --socket /tmp/bsp-launcher5155968361295046875/bsp.socket'...
Waiting for the bsp connection to come up...
Waiting for the bsp connection to come up...
No server running at 127.0.0.1:8212, let's fire one...
Resolving ch.epfl.scala:bloop-frontend_2.12:1.4.6-15-209c2a5c...
Starting bloop server at 127.0.0.1:8212...
Attempting a connection to the server...
Attempting a connection to the server...
Attempting a connection to the server...
Attempting a connection to the server...
[D] Loading workspace settings from bloop.settings.json
[D] Loading 2 projects from '/home/hmf/VSCodeProjects/pdm_toyadmos/.bloop'...
[D] Loading project from '/home/hmf/VSCodeProjects/pdm_toyadmos/.bloop/dcase2020.json'
[D] Loading project from '/home/hmf/VSCodeProjects/pdm_toyadmos/.bloop/dcase2020.test.json'
[D] Cache miss for scala instance org.scala-lang:scala-compiler:3.0.0-M3.
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.7.0/protobuf-java-3.7.0.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/net/java/dev/jna/jna/5.3.1/jna-5.3.1.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/jline/jline-reader/3.15.0/jline-reader-3.15.0.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/jline/jline-terminal-jna/3.15.0/jline-terminal-jna-3.15.0.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/jline/jline-terminal/3.15.0/jline-terminal-3.15.0.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-asm/7.3.1-scala-1/scala-asm-7.3.1-scala-1.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-compiler_3.0.0-M3/3.0.0-M3/scala3-compiler_3.0.0-M3-3.0.0-M3.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-interfaces/3.0.0-M3/scala3-interfaces-3.0.0-M3.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala3-library_3.0.0-M3/3.0.0-M3/scala3-library_3.0.0-M3-3.0.0-M3.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/tasty-core_3.0.0-M3/3.0.0-M3/tasty-core_3.0.0-M3-3.0.0-M3.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/compiler-interface/1.3.5/compiler-interface-1.3.5.jar
[D]   => /home/hmf/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-sbt/util-interface/1.3.0/util-interface-1.3.0.jar
[D] Skipped configuration of SemanticDB in unsupported 3.0.0-M3 projects
[D] Loading previous analysis for 'dcase2020.test' from '/home/hmf/VSCodeProjects/pdm_toyadmos/.bloop/out/dcase2020.test/dcase2020.test-analysis.bin'.
[D] Loading previous analysis for 'dcase2020' from '/home/hmf/VSCodeProjects/pdm_toyadmos/.bloop/out/dcase2020/dcase2020-analysis.bin'.
[D] Waiting for a connection at local:///tmp/bsp-launcher5155968361295046875/bsp.socket...
The server is listening for incoming connections at local:///tmp/bsp-launcher5155968361295046875/bsp.socket...
Starting thread that pumps stdin and redirects it to the bsp server...
Starting thread that pumps server stdout and redirects it to the client stdout...
2020.12.31 14:58:59 INFO  tracing is disabled for protocol BSP, to enable tracing of incoming and outgoing JSON messages create an empty file at /home/hmf/.cache/metals/bsp.trace.json
2020.12.31 14:58:59 INFO  time: connected to build server in 1.95s
2020.12.31 14:58:59 INFO  Connected to Build server v1.4.6-15-209c2a5c
2020.12.31 14:59:00 INFO  time: indexed workspace in 1.43s

Notice the line:

Skipped configuration of SemanticDB in unsupported 3.0.0-M3 projects

I also get the following exception repeatedly, which may be related:

Exception in thread "pool-13-thread-1" java.lang.NullPointerException
    at dotty.tools.dotc.core.NameKinds$UniqueNameKind.fresh(NameKinds.scala:222)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2251)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$6(Parsers.scala:2219)
    at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2203)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2049)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1924)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$7(Parsers.scala:2357)
    at dotty.tools.dotc.parsing.Parsers$Parser.tokenSeparated(Parsers.scala:594)
    at dotty.tools.dotc.parsing.Parsers$Parser.commaSeparated(Parsers.scala:599)
    at dotty.tools.dotc.parsing.Parsers$Parser.parArgumentExprs$$anonfun$1(Parsers.scala:2343)
    at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:559)
    at dotty.tools.dotc.parsing.Parsers$Parser.inParens(Parsers.scala:566)
    at dotty.tools.dotc.parsing.Parsers$Parser.parArgumentExprs(Parsers.scala:2344)
    at dotty.tools.dotc.parsing.Parsers$Parser.argumentExprs(Parsers.scala:2350)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2300)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2295)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2301)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2301)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2295)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2287)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$6(Parsers.scala:2219)
    at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2203)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2049)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1924)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$7(Parsers.scala:2357)
    at dotty.tools.dotc.parsing.Parsers$Parser.tokenSeparated(Parsers.scala:591)
    at dotty.tools.dotc.parsing.Parsers$Parser.commaSeparated(Parsers.scala:599)
    at dotty.tools.dotc.parsing.Parsers$Parser.parArgumentExprs$$anonfun$1(Parsers.scala:2343)
    at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:559)
    at dotty.tools.dotc.parsing.Parsers$Parser.inParens(Parsers.scala:566)
    at dotty.tools.dotc.parsing.Parsers$Parser.parArgumentExprs(Parsers.scala:2344)
    at dotty.tools.dotc.parsing.Parsers$Parser.argumentExprs(Parsers.scala:2350)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2300)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2295)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2287)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$6(Parsers.scala:2219)
    at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2203)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2049)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1924)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$5(Parsers.scala:1904)
    at dotty.tools.dotc.parsing.Parsers$Parser.subPart(Parsers.scala:636)
    at dotty.tools.dotc.parsing.Parsers$Parser.subExpr(Parsers.scala:1906)
    at dotty.tools.dotc.parsing.Parsers$Parser.patDefOrDcl(Parsers.scala:3214)
    at dotty.tools.dotc.parsing.Parsers$Parser.defOrDcl(Parsers.scala:3174)
    at dotty.tools.dotc.parsing.Parsers$Parser.localDef(Parsers.scala:3871)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq$$anonfun$1(Parsers.scala:3896)
    at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:500)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq(Parsers.scala:3904)
    at dotty.tools.dotc.parsing.Parsers$Parser.block(Parsers.scala:2412)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockExpr$$anonfun$1(Parsers.scala:2404)
    at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:559)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBraces(Parsers.scala:567)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBracesOrIndented(Parsers.scala:580)
    at dotty.tools.dotc.parsing.Parsers$Parser.inDefScopeBraces(Parsers.scala:584)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockExpr(Parsers.scala:2402)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2260)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$6(Parsers.scala:2219)
    at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2203)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2049)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1924)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$5(Parsers.scala:1904)
    at dotty.tools.dotc.parsing.Parsers$Parser.subPart(Parsers.scala:636)
    at dotty.tools.dotc.parsing.Parsers$Parser.subExpr(Parsers.scala:1906)
    at dotty.tools.dotc.parsing.Parsers$Parser.ifExpr(Parsers.scala:2107)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:1940)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1924)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq$$anonfun$1(Parsers.scala:3890)
    at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:500)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq(Parsers.scala:3904)
    at dotty.tools.dotc.parsing.Parsers$Parser.block(Parsers.scala:2412)
    at dotty.tools.dotc.parsing.Parsers$Parser.closureRest(Parsers.scala:2195)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1928)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq$$anonfun$1(Parsers.scala:3890)
    at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:500)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockStatSeq(Parsers.scala:3904)
    at dotty.tools.dotc.parsing.Parsers$Parser.block(Parsers.scala:2412)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockExpr$$anonfun$1(Parsers.scala:2404)
    at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:559)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBraces(Parsers.scala:567)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBracesOrIndented(Parsers.scala:580)
    at dotty.tools.dotc.parsing.Parsers$Parser.inDefScopeBraces(Parsers.scala:584)
    at dotty.tools.dotc.parsing.Parsers$Parser.blockExpr(Parsers.scala:2402)
    at dotty.tools.dotc.parsing.Parsers$Parser.argumentExprs(Parsers.scala:2350)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2300)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2298)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExprRest(Parsers.scala:2295)
    at dotty.tools.dotc.parsing.Parsers$Parser.simpleExpr(Parsers.scala:2287)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$6(Parsers.scala:2219)
    at dotty.tools.dotc.parsing.Parsers$Parser.postfixExpr(Parsers.scala:2203)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr1(Parsers.scala:2049)
    at dotty.tools.dotc.parsing.Parsers$Parser.expr(Parsers.scala:1924)
    at dotty.tools.dotc.parsing.Parsers$Parser.$init$$$anonfun$5(Parsers.scala:1904)
    at dotty.tools.dotc.parsing.Parsers$Parser.subPart(Parsers.scala:636)
    at dotty.tools.dotc.parsing.Parsers$Parser.subExpr(Parsers.scala:1906)
    at dotty.tools.dotc.parsing.Parsers$Parser.defDefOrDcl(Parsers.scala:3297)
    at dotty.tools.dotc.parsing.Parsers$Parser.defOrDcl(Parsers.scala:3180)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateStatSeq$$anonfun$1(Parsers.scala:3814)
    at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:500)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateStatSeq(Parsers.scala:3824)
    at dotty.tools.dotc.parsing.Parsers$Parser.$anonfun$31(Parsers.scala:3702)
    at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:559)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBraces(Parsers.scala:567)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBracesOrIndented(Parsers.scala:580)
    at dotty.tools.dotc.parsing.Parsers$Parser.inDefScopeBraces(Parsers.scala:584)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateBody(Parsers.scala:3702)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateBodyOpt(Parsers.scala:3695)
    at dotty.tools.dotc.parsing.Parsers$Parser.template(Parsers.scala:3672)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateOpt(Parsers.scala:3684)
    at dotty.tools.dotc.parsing.Parsers$Parser.objectDef(Parsers.scala:3444)
    at dotty.tools.dotc.parsing.Parsers$Parser.tmplDef(Parsers.scala:3403)
    at dotty.tools.dotc.parsing.Parsers$Parser.defOrDcl(Parsers.scala:3186)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateStatSeq$$anonfun$1(Parsers.scala:3814)
    at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:500)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateStatSeq(Parsers.scala:3824)
    at dotty.tools.dotc.parsing.Parsers$Parser.$anonfun$31(Parsers.scala:3702)
    at dotty.tools.dotc.parsing.Parsers$Parser.enclosed(Parsers.scala:559)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBraces(Parsers.scala:567)
    at dotty.tools.dotc.parsing.Parsers$Parser.inBracesOrIndented(Parsers.scala:580)
    at dotty.tools.dotc.parsing.Parsers$Parser.inDefScopeBraces(Parsers.scala:584)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateBody(Parsers.scala:3702)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateBodyOpt(Parsers.scala:3695)
    at dotty.tools.dotc.parsing.Parsers$Parser.template(Parsers.scala:3672)
    at dotty.tools.dotc.parsing.Parsers$Parser.templateOpt(Parsers.scala:3684)
    at dotty.tools.dotc.parsing.Parsers$Parser.objectDef(Parsers.scala:3444)
    at dotty.tools.dotc.parsing.Parsers$Parser.tmplDef(Parsers.scala:3403)
    at dotty.tools.dotc.parsing.Parsers$Parser.defOrDcl(Parsers.scala:3186)
    at dotty.tools.dotc.parsing.Parsers$Parser.topStatSeq(Parsers.scala:3760)
    at dotty.tools.dotc.parsing.Parsers$Parser.topstats$2(Parsers.scala:3940)
    at dotty.tools.dotc.parsing.Parsers$Parser.topstats$2(Parsers.scala:3934)
    at dotty.tools.dotc.parsing.Parsers$Parser.compilationUnit$$anonfun$1(Parsers.scala:3945)
    at dotty.tools.dotc.parsing.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:500)
    at dotty.tools.dotc.parsing.Parsers$Parser.compilationUnit(Parsers.scala:3950)
    at dotty.tools.dotc.parsing.Parsers$Parser.parse(Parsers.scala:182)
    at scala.meta.internal.pc.CompilerInterfaces$.parseErrors(CompilerInterfaces.scala:40)
    at scala.meta.internal.pc.ScalaPresentationCompiler.didChange$$anonfun$1(ScalaPresentationCompiler.scala:347)
    at scala.meta.internal.pc.CompilerAccess.withSharedCompiler(CompilerAccess.scala:137)
    at scala.meta.internal.pc.CompilerAccess.withNonInterruptableCompiler$$anonfun$1(CompilerAccess.scala:125)
    at scala.meta.internal.pc.CompilerAccess.onCompilerJobQueue$$anonfun$1(CompilerAccess.scala:197)
    at scala.meta.internal.pc.CompilerJobQueue$Job.run(CompilerJobQueue.scala:103)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)

Installation:

Additional context

Mll project

VSCode Info: Version: 1.52.1 Commit: ea3859d4ba2f3e577a159bc91e3074c5d85c0523 Date: 2020-12-16T16:32:10.090Z Electron: 9.3.5 Chrome: 83.0.4103.122 Node.js: 12.14.1 V8: 8.3.110.13-electron.0 OS: Linux x64 5.4.0-58-generic

Search terms

Scala 3 M3 Code folding Mill

tgodzik commented 3 years ago

Thanks for reporting, folding is currently not supported and we are working on it, but most of the other issues should work. Are you having problems with definitions, completions etc?

The line: Skipped configuration of SemanticDB in unsupported 3.0.0-M3 projects is something I haven't seen before, but it might be connected to Mill and the stack trace itself seems to be an issue in the compiler itself.

hmf commented 3 years ago

Thanks for reporting, folding is currently not supported and we are working on it

My apologies. I saw the tick mark in the documentation and assumed it worked for all Scala versions.

Are you having problems with definitions, completions etc?

The other stuff seems to work Ok except the outline in the explorer - it is empty. In Java projects I get a list of members and methods for example.

The line: Skipped configuration of SemanticDB in unsupported 3.0.0-M3 projects is something I haven't seen before, but it might be connected to Mill and the stack trace itself seems to be an issue in the compiler itself.

Should I open another issue and close this one? Do you need any additional information on this?

EDIT: note that when using Mill in the command line I don't get any errors. So maybe something to do with Bloop? Code also runs ok.

tgodzik commented 3 years ago

Ach actually that message is misleading. There is no Scala 2 version 3.0.0-M3, which is indeed true, but it should not show in that case. It should be something in the line of semanticdb plugin not downloaded for 3.0.0-M3 I will fix it in Bloop. This will not impact anything, but will only show if you run Bloop with debug flag.

As for any other problems there is already some issues conencted to missing features or bugs: https://github.com/scalameta/metals/issues?q=is%3Aissue+is%3Aopen+label%3A%22Scala+3%22

I am actually just working on outline and code folding, so it should be available most likely in the next release.

tgodzik commented 3 years ago

Followed up with a small fix here: https://github.com/scalacenter/bloop/pull/1438