object Demo {
val b =
SimpleRestJsonBuilder(WeatherServiceGen).client(??? : Client[IO])
b.@@
}
4. Ask for completions on `@@`
5. See no completions
6. See SEVERE log in `.metals/metals.log`:
Oct 17, 2023 12:37:26 AM scala.meta.internal.pc.CompilerAccess retryWithCleanCompiler
INFO: compiler crashed due to an error in the Scala compiler, retrying with new compiler instance.
Oct 17, 2023 12:37:26 AM scala.meta.internal.pc.CompilerAccess handleError
SEVERE: A severe compiler error occurred, full details of the error can be found in the error report /.metals/.reports/metals-full/2023-10-17/r_compiler-error_00-37-26-271
<details>
<summary>Report file</summary>
scala.reflect.internal.FatalError:
?PrettyType?
while compiling: file:///src/main/scala/hello/Demo.scala
during phase: globalPhase=, enteringPhase=parser
library version: version 2.13.12
compiler version: version 2.13.12
reconstructed args: -classpath /target/scala-2.13/resource_managed/main:/.bloop/root/bloop-bsp-clients-classes/classes-Metals-RT4ITcamTCu7pN04CWjBog==:/Library/Caches/bloop/semanticdb/com.sourcegraph.semanticdb-javac.0.9.5/semanticdb-javac-0.9.5.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.12/scala-library-2.13.12.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-core_2.13/0.18.2/smithy4s-core_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-http4s_2.13/0.18.2/smithy4s-http4s_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-ember-server_2.13/0.23.23/http4s-ember-server_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.11.0/scala-collection-compat_2.13-2.11.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-http4s-kernel_2.13/0.18.2/smithy4s-http4s-kernel_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-json_2.13/0.18.2/smithy4s-json_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-fs2_2.13/0.18.2/smithy4s-fs2_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-core_2.13/0.23.23/http4s-core_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-dsl_2.13/0.23.23/http4s-dsl_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-client_2.13/0.23.23/http4s-client_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-ember-core_2.13/0.23.23/http4s-ember-core_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-server_2.13/0.23.23/http4s-server_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/log4cats-slf4j_2.13/2.6.0/log4cats-slf4j_2.13-2.6.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-cats_2.13/0.18.2/smithy4s-cats_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.13/2.23.5/jsoniter-scala-core_2.13-2.23.5.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/co/fs2/fs2-core_2.13/3.9.2/fs2-core_2.13-3.9.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/case-insensitive_2.13/1.4.0/case-insensitive_2.13-1.4.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-core_2.13/2.10.0/cats-core_2.13-2.10.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect-std_2.13/3.5.1/cats-effect-std_2.13-3.5.1.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-parse_2.13/0.3.10/cats-parse_2.13-0.3.10.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-crypto_2.13/0.2.4/http4s-crypto_2.13-0.2.4.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/co/fs2/fs2-io_2.13/3.7.0/fs2-io_2.13-3.7.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/comcast/ip4s-core_2.13/3.3.0/ip4s-core_2.13-3.3.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/literally_2.13/1.1.0/literally_2.13-1.1.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scodec/scodec-bits_2.13/1.1.37/scodec-bits_2.13-1.1.37.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/vault_2.13/3.5.0/vault_2.13-3.5.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/log4s/log4s_2.13/1.10.0/log4s_2.13-1.10.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/log4cats-core_2.13/2.6.0/log4cats-core_2.13-2.6.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/twitter/hpack/1.0.2/hpack-1.0.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect_2.13/3.5.1/cats-effect_2.13-3.5.1.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-kernel_2.13/2.10.0/cats-kernel_2.13-2.10.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect-kernel_2.13/3.5.1/cats-effect-kernel_2.13-3.5.1.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.12/scala-reflect-2.13.12.jar -Xplugin-require:semanticdb -Xsource:3.0.0 -Yrangepos -Ymacro-expand:discard -Ycache-plugin-class-loader:last-modified -Ypresentation-any-thread
last tree to typer: Select(This(object Demo), b)
tree position: line 12 of file:///src/main/scala/hello/Demo.scala
tree tpe: hello.Demo.b.type
symbol: value b in object Demo
symbol definition: val b: smithy4s.http4s.SimpleRestJsonBuilder.ClientBuilder[[F[, , , , _]]hello.WeatherServiceGen[F],[+A]cats.effect.IO[A]] (a MethodSymbol)
symbol package: hello
symbol owners: value b -> object Demo
call site: in
== Source file context for tree position ==
9 val b =
10 SimpleRestJsonBuilder(WeatherServiceGen).client(??? : Client[IO])
11
12 b._CURSOR_
13 }
14
</details>
### Expected behavior
Completions are provided.
### Operating system
macOS
### Editor/Extension
VS Code
### Version of Metals
v1.0.1
### Extra context or search terms
- Related issue: https://github.com/scalameta/metals/issues/5755 (this issue is based on a version of the code of #5755 with an adjustment that actually helps Metals infer the type)
- If you insert the inferred type of `b` (even with Metals's quickfix), everything works. Just not having the explicit type seems to mess up things.
Describe the bug
I suppose this could be a Scala bug more than a Metals bug, but reporting here as this is the first I'm seeing of it:
Demo.scala
toimport smithy4s.http4s.SimpleRestJsonBuilder import org.http4s.client.Client import cats.effect.IO import hello.WeatherService
object Demo { val b = SimpleRestJsonBuilder(WeatherServiceGen).client(??? : Client[IO])
b.@@ }
Oct 17, 2023 12:37:26 AM scala.meta.internal.pc.CompilerAccess retryWithCleanCompiler INFO: compiler crashed due to an error in the Scala compiler, retrying with new compiler instance. Oct 17, 2023 12:37:26 AM scala.meta.internal.pc.CompilerAccess handleError SEVERE: A severe compiler error occurred, full details of the error can be found in the error report/.metals/.reports/metals-full/2023-10-17/r_compiler-error_00-37-26-271
scala.reflect.internal.FatalError: ?PrettyType? while compiling: file:///src/main/scala/hello/Demo.scala
during phase: globalPhase=, enteringPhase=parser
library version: version 2.13.12
compiler version: version 2.13.12
reconstructed args: -classpath /target/scala-2.13/resource_managed/main:/.bloop/root/bloop-bsp-clients-classes/classes-Metals-RT4ITcamTCu7pN04CWjBog==:/Library/Caches/bloop/semanticdb/com.sourcegraph.semanticdb-javac.0.9.5/semanticdb-javac-0.9.5.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.12/scala-library-2.13.12.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-core_2.13/0.18.2/smithy4s-core_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-http4s_2.13/0.18.2/smithy4s-http4s_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-ember-server_2.13/0.23.23/http4s-ember-server_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.13/2.11.0/scala-collection-compat_2.13-2.11.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-http4s-kernel_2.13/0.18.2/smithy4s-http4s-kernel_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-json_2.13/0.18.2/smithy4s-json_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-fs2_2.13/0.18.2/smithy4s-fs2_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-core_2.13/0.23.23/http4s-core_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-dsl_2.13/0.23.23/http4s-dsl_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-client_2.13/0.23.23/http4s-client_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-ember-core_2.13/0.23.23/http4s-ember-core_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-server_2.13/0.23.23/http4s-server_2.13-0.23.23.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/log4cats-slf4j_2.13/2.6.0/log4cats-slf4j_2.13-2.6.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/disneystreaming/smithy4s/smithy4s-cats_2.13/0.18.2/smithy4s-cats_2.13-0.18.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/github/plokhotnyuk/jsoniter-scala/jsoniter-scala-core_2.13/2.23.5/jsoniter-scala-core_2.13-2.23.5.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/co/fs2/fs2-core_2.13/3.9.2/fs2-core_2.13-3.9.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/case-insensitive_2.13/1.4.0/case-insensitive_2.13-1.4.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-core_2.13/2.10.0/cats-core_2.13-2.10.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect-std_2.13/3.5.1/cats-effect-std_2.13-3.5.1.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-parse_2.13/0.3.10/cats-parse_2.13-0.3.10.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/http4s/http4s-crypto_2.13/0.2.4/http4s-crypto_2.13-0.2.4.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/co/fs2/fs2-io_2.13/3.7.0/fs2-io_2.13-3.7.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/comcast/ip4s-core_2.13/3.3.0/ip4s-core_2.13-3.3.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/literally_2.13/1.1.0/literally_2.13-1.1.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scodec/scodec-bits_2.13/1.1.37/scodec-bits_2.13-1.1.37.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/vault_2.13/3.5.0/vault_2.13-3.5.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.36/slf4j-api-1.7.36.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/log4s/log4s_2.13/1.10.0/log4s_2.13-1.10.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/log4cats-core_2.13/2.6.0/log4cats-core_2.13-2.6.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/com/twitter/hpack/1.0.2/hpack-1.0.2.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect_2.13/3.5.1/cats-effect_2.13-3.5.1.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-kernel_2.13/2.10.0/cats-kernel_2.13-2.10.0.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/typelevel/cats-effect-kernel_2.13/3.5.1/cats-effect-kernel_2.13-3.5.1.jar:/Library/Caches/Coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.13.12/scala-reflect-2.13.12.jar -Xplugin-require:semanticdb -Xsource:3.0.0 -Yrangepos -Ymacro-expand:discard -Ycache-plugin-class-loader:last-modified -Ypresentation-any-thread
last tree to typer: Select(This(object Demo), b) tree position: line 12 of file:///src/main/scala/hello/Demo.scala
tree tpe: hello.Demo.b.type
symbol: value b in object Demo
symbol definition: val b: smithy4s.http4s.SimpleRestJsonBuilder.ClientBuilder[[F[, , , , _]]hello.WeatherServiceGen[F],[+A]cats.effect.IO[A]] (a MethodSymbol)
symbol package: hello
symbol owners: value b -> object Demo
call site: in
== Source file context for tree position ==
occurred in the presentation compiler.
action parameters: offset: 242 uri: file:///src/main/scala/hello/Demo.scala
text:
package hello
import smithy4s.http4s.SimpleRestJsonBuilder import org.http4s.client.Client import cats.effect.IO import hello.WeatherService
object Demo { val b = SimpleRestJsonBuilder(WeatherServiceGen).client(??? : Client[IO])
b.@@ }
error stacktrace: scala.reflect.internal.Reporting.abort(Reporting.scala:70) scala.reflect.internal.Reporting.abort$(Reporting.scala:66) scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:28) scala.reflect.internal.Types.appliedType(Types.scala:4172) scala.reflect.internal.Types.appliedType$(Types.scala:4147) scala.reflect.internal.SymbolTable.appliedType(SymbolTable.scala:28) scala.reflect.internal.tpe.TypeMaps$SubstMap.apply(TypeMaps.scala:773) scala.reflect.internal.Types$PolyType.mapOver(Types.scala:3029) scala.reflect.internal.tpe.TypeMaps$SubstMap.apply(TypeMaps.scala:755) scala.reflect.internal.tpe.TypeMaps$SubstMap.apply(TypeMaps.scala:668) scala.reflect.internal.Types$TypeRef.mapOver(Types.scala:2368) scala.reflect.internal.tpe.TypeMaps$SubstMap.apply(TypeMaps.scala:755) scala.reflect.internal.Types$Type.subst(Types.scala:735) scala.reflect.internal.Types$Type.instantiateTypeParams(Types.scala:481) scala.reflect.internal.Types$TypeRef.seenFromOwnerInstantiated$1(Types.scala:2487) scala.reflect.internal.Types$TypeRef.relativize(Types.scala:2491) scala.reflect.internal.Types$AliasTypeRef.betaReduce(Types.scala:2287) scala.reflect.internal.Types$AliasTypeRef.betaReduce$(Types.scala:2287) scala.reflect.internal.Types$AliasArgsTypeRef.betaReduce(Types.scala:2727) scala.reflect.internal.Types$AliasTypeRef.dealias(Types.scala:2231) scala.reflect.internal.Types$AliasTypeRef.dealias$(Types.scala:2231) scala.reflect.internal.Types$AliasArgsTypeRef.dealias(Types.scala:2727) scala.reflect.internal.Types$AliasTypeRef.dealias(Types.scala:2231) scala.reflect.internal.Types$AliasTypeRef.dealias$(Types.scala:2231) scala.reflect.internal.Types$AliasArgsTypeRef.dealias(Types.scala:2727) scala.reflect.internal.Types$TypeRef.customToString(Types.scala:2699) scala.reflect.internal.Types$TypeRef.safeToString(Types.scala:2704) scala.reflect.internal.tpe.TypeToStrings.typeToString(TypeToStrings.scala:55) scala.reflect.internal.tpe.TypeToStrings.typeToString$(TypeToStrings.scala:34) scala.reflect.internal.SymbolTable.typeToString(SymbolTable.scala:28) scala.reflect.internal.Types$Type.toString(Types.scala:938) java.base/java.lang.String.valueOf(String.java:4220) java.base/java.lang.StringBuilder.append(StringBuilder.java:173) scala.collection.IterableOnceOps.addString(IterableOnce.scala:1249) scala.collection.IterableOnceOps.addString$(IterableOnce.scala:1241) scala.collection.AbstractIterable.addString(Iterable.scala:933) scala.collection.IterableOnceOps.mkString(IterableOnce.scala:1191) scala.collection.IterableOnceOps.mkString$(IterableOnce.scala:1189) scala.reflect.internal.Types$TypeRef.argsString(Types.scala:2638) scala.reflect.internal.Types$TypeRef.safeToString(Types.scala:2706) scala.reflect.internal.tpe.TypeToStrings.typeToString(TypeToStrings.scala:55) scala.reflect.internal.tpe.TypeToStrings.typeToString$(TypeToStrings.scala:34) scala.reflect.internal.SymbolTable.typeToString(SymbolTable.scala:28) scala.reflect.internal.Types$Type.toString(Types.scala:938) scala.reflect.internal.Types$Type.toLongString(Types.scala:948) scala.meta.internal.pc.Signatures$SignaturePrinter.printType(Signatures.scala:299) scala.meta.internal.pc.Signatures$SignaturePrinter.(Signatures.scala:291)
scala.meta.internal.pc.completions.Completions.infoString(Completions.scala:262)
scala.meta.internal.pc.completions.Completions.infoString$(Completions.scala:259)
scala.meta.internal.pc.MetalsGlobal.infoString(MetalsGlobal.scala:33)
scala.meta.internal.pc.completions.Completions.detailString(Completions.scala:295)
scala.meta.internal.pc.completions.Completions.detailString$(Completions.scala:289)
scala.meta.internal.pc.MetalsGlobal.detailString(MetalsGlobal.scala:33)
scala.meta.internal.pc.CompletionProvider.$anonfun$completions$1(CompletionProvider.scala:83)
scala.collection.Iterator$$anon$9.next(Iterator.scala:584)
scala.collection.immutable.List.prependedAll(List.scala:156)
scala.collection.immutable.List$.from(List.scala:684)
scala.collection.immutable.List$.from(List.scala:681)
scala.collection.SeqFactory$Delegate.from(Factory.scala:306)
scala.collection.immutable.Seq$.from(Seq.scala:42)
scala.collection.IterableOnceOps.toSeq(IterableOnce.scala:1326)
scala.collection.IterableOnceOps.toSeq$(IterableOnce.scala:1326)
scala.collection.AbstractIterator.toSeq(Iterator.scala:1300)
scala.meta.internal.pc.CompletionProvider.completions(CompletionProvider.scala:266)
scala.meta.internal.pc.ScalaPresentationCompiler.$anonfun$complete$1(ScalaPresentationCompiler.scala:163)