scalameta / metals

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

Code actions and code completions are broken #5669

Closed voidcontext closed 11 months ago

voidcontext commented 11 months ago

Describe the bug

In a Scala 3.3.0 project the metals.log file is full with exceptions caused by match errors like this:

Caused by: scala.MatchError: Traced[F, *] (of class scala.meta.Type$AnonymousLambda$TypeAnonymousLambdaImpl)
        at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.loop$2(ScalametaParser.scala:1040)

It is not limited to the Traced[F, *], but happens with other higher kinded types with wild cards. Unfortunately I can't share the code, but I am working on a simplified example that replicates this bug.

Code actions and code completions seems to be not working (see extra context section for full stack trace).

Looking through the issues, this seems to be somewhat similar to https://github.com/scalameta/metals/issues/5437

Expected behavior

Code completion and code actions work and there aren't exceptions in metals.log

Operating system

macOS

Editor/Extension

Other

Version of Metals

v1.0.1

Extra context or search terms

Full stack trace ``` Sept 22, 2023 10:05:29 AM org.eclipse.lsp4j.jsonrpc.RemoteEndpoint fallbackResponseError SEVERE: Internal error: java.lang.reflect.InvocationTargetException java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$null$0(GenericEndpoint.java:67) at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.request(GenericEndpoint.java:120) at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.handleRequest(RemoteEndpoint.java:261) at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.consume(RemoteEndpoint.java:190) at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.handleMessage(StreamMessageProducer.java:194) at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:94) at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:113) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1589) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:119) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$null$0(GenericEndpoint.java:65) ... 11 more Caused by: scala.MatchError: Traced[F, *] (of class scala.meta.Type$AnonymousLambda$TypeAnonymousLambdaImpl) at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.loop$2(ScalametaParser.scala:1040) at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.$anonfun$patternTyp$5(ScalametaParser.s at scala.collection.immutable.List.map(List.scala:246) at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.$anonfun$patternTyp$4(ScalametaParser.s at scala.meta.internal.parsers.ScalametaParser$.scala$meta$internal$parsers$ScalametaParser$$copyPos(Scalameta at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.loop$2(ScalametaParser.scala:1060) at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.patternTyp(ScalametaParser.scala:1121) at scala.meta.internal.parsers.ScalametaParser$PatternContextSensitive.patternTyp$(ScalametaParser.scala:1030) at scala.meta.internal.parsers.ScalametaParser$noSeq$.patternTyp(ScalametaParser.scala:2818) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.$anonfun$simplePattern$2(ScalametaParser.sc at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.simplePattern(ScalametaParser.scala:2738) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.simplePattern$(ScalametaParser.scala:2733) at scala.meta.internal.parsers.ScalametaParser$noSeq$.simplePattern(ScalametaParser.scala:2818) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.pattern3(ScalametaParser.scala:2685) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.pattern3$(ScalametaParser.scala:2683) at scala.meta.internal.parsers.ScalametaParser$noSeq$.pattern3(ScalametaParser.scala:2818) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.pattern2(ScalametaParser.scala:2660) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.pattern2$(ScalametaParser.scala:2659) at scala.meta.internal.parsers.ScalametaParser$noSeq$.pattern2(ScalametaParser.scala:2818) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.pattern1(ScalametaParser.scala:2635) at scala.meta.internal.parsers.ScalametaParser$SeqContextSensitive.pattern1$(ScalametaParser.scala:2634) at scala.meta.internal.parsers.ScalametaParser$noSeq$.pattern1(ScalametaParser.scala:2818) at scala.meta.internal.parsers.ScalametaParser.generatorBuf(ScalametaParser.scala:2548) at scala.meta.internal.parsers.ScalametaParser.enumeratorBuf(ScalametaParser.scala:2527) at scala.meta.internal.parsers.ScalametaParser.$anonfun$enumerators$1(ScalametaParser.scala:2512) at scala.meta.internal.parsers.ScalametaParser.$anonfun$enumerators$1$adapted(ScalametaParser.scala:2511) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.enumerators(ScalametaParser.scala:2511) at scala.meta.internal.parsers.ScalametaParser.$anonfun$expr$2(ScalametaParser.scala:1582) at scala.meta.internal.parsers.ScalametaParser.atPosOpt(ScalametaParser.scala:303) at scala.meta.internal.parsers.ScalametaParser.autoPosOpt(ScalametaParser.scala:347) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1512) at scala.meta.internal.parsers.ScalametaParser.$anonfun$inParensOrTupleOrUnitExpr$2(ScalametaParser.scala:632) at scala.meta.internal.parsers.ScalametaParser.$anonfun$commaSeparated$1(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.$anonfun$commaSeparated$1$adapted(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.iter$1(ScalametaParser.scala:576) at scala.meta.internal.parsers.ScalametaParser.$anonfun$tokenSeparated$1(ScalametaParser.scala:582) at scala.meta.internal.parsers.ScalametaParser.$anonfun$tokenSeparated$1$adapted(ScalametaParser.scala:569) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.tokenSeparated(ScalametaParser.scala:569) at scala.meta.internal.parsers.ScalametaParser.commaSeparatedWithIndex(ScalametaParser.scala:589) at scala.meta.internal.parsers.ScalametaParser.commaSeparated(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.$anonfun$inParensOrTupleOrUnitExpr$1(ScalametaParser.scala:632) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$inParensAfterOpenO at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$inParensOnOpenOr(S at scala.meta.internal.parsers.ScalametaParser.inParensOrTupleOrUnitExpr(ScalametaParser.scala:633) at scala.meta.internal.parsers.ScalametaParser.simpleExpr0(ScalametaParser.scala:2184) at scala.meta.internal.parsers.ScalametaParser.simpleExpr(ScalametaParser.scala:2158) at scala.meta.internal.parsers.ScalametaParser.prefixExpr(ScalametaParser.scala:2141) at scala.meta.internal.parsers.ScalametaParser.postfixExpr(ScalametaParser.scala:2026) at scala.meta.internal.parsers.ScalametaParser.$anonfun$expr$2(ScalametaParser.scala:1607) at scala.meta.internal.parsers.ScalametaParser.atPosOpt(ScalametaParser.scala:303) at scala.meta.internal.parsers.ScalametaParser.autoPosOpt(ScalametaParser.scala:347) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1512) at scala.meta.internal.parsers.ScalametaParser.$anonfun$blockStatSeq$4(ScalametaParser.scala:4501) at scala.meta.internal.parsers.ScalametaParser.stat(ScalametaParser.scala:4338) at scala.meta.internal.parsers.ScalametaParser.iter$6(ScalametaParser.scala:4501) at scala.meta.internal.parsers.ScalametaParser.$anonfun$blockStatSeq$1(ScalametaParser.scala:4518) at scala.meta.internal.parsers.ScalametaParser.$anonfun$blockStatSeq$1$adapted(ScalametaParser.scala:4468) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.blockStatSeq(ScalametaParser.scala:4468) at scala.meta.internal.parsers.ScalametaParser.blockWithinDelims(ScalametaParser.scala:2434) at scala.meta.internal.parsers.ScalametaParser.blockWithStats$1(ScalametaParser.scala:2437) at scala.meta.internal.parsers.ScalametaParser.$anonfun$block$1(ScalametaParser.scala:2442) at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.block(ScalametaParser.scala:2436) at scala.meta.internal.parsers.ScalametaParser.blockExpr(ScalametaParser.scala:2430) at scala.meta.internal.parsers.ScalametaParser.simpleExpr0(ScalametaParser.scala:2203) at scala.meta.internal.parsers.ScalametaParser.simpleExpr(ScalametaParser.scala:2158) at scala.meta.internal.parsers.ScalametaParser.prefixExpr(ScalametaParser.scala:2141) at scala.meta.internal.parsers.ScalametaParser.postfixExpr(ScalametaParser.scala:2026) at scala.meta.internal.parsers.ScalametaParser.$anonfun$expr$2(ScalametaParser.scala:1607) at scala.meta.internal.parsers.ScalametaParser.atPosOpt(ScalametaParser.scala:303) at scala.meta.internal.parsers.ScalametaParser.autoPosOpt(ScalametaParser.scala:347) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1512) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1403) at scala.meta.internal.parsers.ScalametaParser.termFunctionBody(ScalametaParser.scala:1717) at scala.meta.internal.parsers.ScalametaParser.$anonfun$exprOtherRest$8(ScalametaParser.scala:1702) at scala.Option.fold(Option.scala:263) at scala.meta.internal.parsers.ScalametaParser.exprOtherRest(ScalametaParser.scala:1699) at scala.meta.internal.parsers.ScalametaParser.$anonfun$expr$2(ScalametaParser.scala:1608) at scala.meta.internal.parsers.ScalametaParser.atPosOpt(ScalametaParser.scala:303) at scala.meta.internal.parsers.ScalametaParser.autoPosOpt(ScalametaParser.scala:347) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1512) at scala.meta.internal.parsers.ScalametaParser.argumentExpr(ScalametaParser.scala:2377) at scala.meta.internal.parsers.ScalametaParser.$anonfun$argumentExprsInParens$1(ScalametaParser.scala:2404) at scala.meta.internal.parsers.ScalametaParser.$anonfun$commaSeparated$1(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.$anonfun$commaSeparated$1$adapted(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.iter$1(ScalametaParser.scala:576) at scala.meta.internal.parsers.ScalametaParser.$anonfun$tokenSeparated$1(ScalametaParser.scala:582) at scala.meta.internal.parsers.ScalametaParser.$anonfun$tokenSeparated$1$adapted(ScalametaParser.scala:569) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.tokenSeparated(ScalametaParser.scala:569) at scala.meta.internal.parsers.ScalametaParser.commaSeparatedWithIndex(ScalametaParser.scala:589) at scala.meta.internal.parsers.ScalametaParser.commaSeparated(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.argumentExprsInParens(ScalametaParser.scala:2404) at scala.meta.internal.parsers.ScalametaParser.$anonfun$scala$meta$internal$parsers$ScalametaParser$$getArgCla at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$inParensAfterOpenO at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$inParensOnOpenOr(S at scala.meta.internal.parsers.ScalametaParser.$anonfun$scala$meta$internal$parsers$ScalametaParser$$getArgCla at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$getArgClause(Scala at scala.meta.internal.parsers.ScalametaParser.simpleExprRest(ScalametaParser.scala:2288) at scala.meta.internal.parsers.ScalametaParser.$anonfun$simpleExpr0$3(ScalametaParser.scala:2208) at scala.util.Success.map(Try.scala:262) at scala.meta.internal.parsers.ScalametaParser.simpleExpr0(ScalametaParser.scala:2208) at scala.meta.internal.parsers.ScalametaParser.simpleExpr(ScalametaParser.scala:2158) at scala.meta.internal.parsers.ScalametaParser.prefixExpr(ScalametaParser.scala:2141) at scala.meta.internal.parsers.ScalametaParser.postfixExpr(ScalametaParser.scala:2026) at scala.meta.internal.parsers.ScalametaParser.$anonfun$expr$2(ScalametaParser.scala:1607) at scala.meta.internal.parsers.ScalametaParser.atPosOpt(ScalametaParser.scala:303) at scala.meta.internal.parsers.ScalametaParser.autoPosOpt(ScalametaParser.scala:347) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1512) at scala.meta.internal.parsers.ScalametaParser.argumentExpr(ScalametaParser.scala:2377) at scala.meta.internal.parsers.ScalametaParser.$anonfun$argumentExprsInParens$1(ScalametaParser.scala:2404) at scala.meta.internal.parsers.ScalametaParser.$anonfun$commaSeparated$1(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.$anonfun$commaSeparated$1$adapted(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.iter$1(ScalametaParser.scala:576) at scala.meta.internal.parsers.ScalametaParser.$anonfun$tokenSeparated$1(ScalametaParser.scala:582) at scala.meta.internal.parsers.ScalametaParser.$anonfun$tokenSeparated$1$adapted(ScalametaParser.scala:569) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.tokenSeparated(ScalametaParser.scala:569) at scala.meta.internal.parsers.ScalametaParser.commaSeparatedWithIndex(ScalametaParser.scala:589) at scala.meta.internal.parsers.ScalametaParser.commaSeparated(ScalametaParser.scala:586) at scala.meta.internal.parsers.ScalametaParser.argumentExprsInParens(ScalametaParser.scala:2404) at scala.meta.internal.parsers.ScalametaParser.$anonfun$scala$meta$internal$parsers$ScalametaParser$$getArgCla at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$inParensAfterOpenO at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$inParensOnOpenOr(S at scala.meta.internal.parsers.ScalametaParser.$anonfun$scala$meta$internal$parsers$ScalametaParser$$getArgCla at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$getArgClause(Scala at scala.meta.internal.parsers.ScalametaParser.simpleExprRest(ScalametaParser.scala:2288) at scala.meta.internal.parsers.ScalametaParser.$anonfun$simpleExpr0$3(ScalametaParser.scala:2208) at scala.util.Success.map(Try.scala:262) at scala.meta.internal.parsers.ScalametaParser.simpleExpr0(ScalametaParser.scala:2208) at scala.meta.internal.parsers.ScalametaParser.simpleExpr(ScalametaParser.scala:2158) at scala.meta.internal.parsers.ScalametaParser.prefixExpr(ScalametaParser.scala:2141) at scala.meta.internal.parsers.ScalametaParser.postfixExpr(ScalametaParser.scala:2026) at scala.meta.internal.parsers.ScalametaParser.$anonfun$expr$2(ScalametaParser.scala:1607) at scala.meta.internal.parsers.ScalametaParser.atPosOpt(ScalametaParser.scala:303) at scala.meta.internal.parsers.ScalametaParser.autoPosOpt(ScalametaParser.scala:347) at scala.meta.internal.parsers.ScalametaParser.expr(ScalametaParser.scala:1512) at scala.meta.internal.parsers.ScalametaParser.$anonfun$blockStatSeq$4(ScalametaParser.scala:4501) at scala.meta.internal.parsers.ScalametaParser.stat(ScalametaParser.scala:4338) at scala.meta.internal.parsers.ScalametaParser.iter$6(ScalametaParser.scala:4501) at scala.meta.internal.parsers.ScalametaParser.$anonfun$blockStatSeq$1(ScalametaParser.scala:4518) at scala.meta.internal.parsers.ScalametaParser.$anonfun$blockStatSeq$1$adapted(ScalametaParser.scala:4468) at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.blockStatSeq(ScalametaParser.scala:4468) at scala.meta.internal.parsers.ScalametaParser.blockWithinDelims(ScalametaParser.scala:2434) at scala.meta.internal.parsers.ScalametaParser.blockWithStats$1(ScalametaParser.scala:2437) at scala.meta.internal.parsers.ScalametaParser.$anonfun$block$1(ScalametaParser.scala:2442) at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.block(ScalametaParser.scala:2436) at scala.meta.internal.parsers.ScalametaParser.blockExpr(ScalametaParser.scala:2430) at scala.meta.internal.parsers.ScalametaParser.exprMaybeIndented(ScalametaParser.scala:1423) at scala.meta.internal.parsers.ScalametaParser.$anonfun$funDefRest$1(ScalametaParser.scala:3736) at scala.meta.internal.parsers.ScalametaParser.autoEndPos(ScalametaParser.scala:349) at scala.meta.internal.parsers.ScalametaParser.autoEndPos(ScalametaParser.scala:354) at scala.meta.internal.parsers.ScalametaParser.funDefRest(ScalametaParser.scala:3698) at scala.meta.internal.parsers.ScalametaParser.funDefOrDclOrExtensionOrSecondaryCtor(ScalametaParser.scala:364 at scala.meta.internal.parsers.ScalametaParser.defOrDclOrSecondaryCtor(ScalametaParser.scala:3476) at scala.meta.internal.parsers.ScalametaParser.nonLocalDefOrDcl(ScalametaParser.scala:3455) at scala.meta.internal.parsers.ScalametaParser$$anonfun$templateStat$1.applyOrElse(ScalametaParser.scala:4415) at scala.meta.internal.parsers.ScalametaParser$$anonfun$templateStat$1.applyOrElse(ScalametaParser.scala:4409) at scala.PartialFunction.$anonfun$runWith$1(PartialFunction.scala:231) at scala.PartialFunction.$anonfun$runWith$1$adapted(PartialFunction.scala:230) at scala.meta.internal.parsers.ScalametaParser.statSeqBuf(ScalametaParser.scala:4357) at scala.meta.internal.parsers.ScalametaParser.getStats$2(ScalametaParser.scala:4399) at scala.meta.internal.parsers.ScalametaParser.$anonfun$scala$meta$internal$parsers$ScalametaParser$$templateS at scala.meta.internal.parsers.ScalametaParser.$anonfun$scala$meta$internal$parsers$ScalametaParser$$templateS at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$listBy(ScalametaPa at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$templateStatSeq(Sc at scala.meta.internal.parsers.ScalametaParser.scala$meta$internal$parsers$ScalametaParser$$templateStatSeq(Sc at scala.meta.internal.parsers.ScalametaParser.$anonfun$templateBodyOpt$1(ScalametaParser.scala:4245) at scala.meta.internal.parsers.ScalametaParser.indentedOnOpen(ScalametaParser.scala:263) at scala.meta.internal.parsers.ScalametaParser.templateBodyOpt(ScalametaParser.scala:4245) at scala.meta.internal.parsers.ScalametaParser.templateAfterExtends(ScalametaParser.scala:4184) at scala.meta.internal.parsers.ScalametaParser.$anonfun$templateOpt$1(ScalametaParser.scala:4232) at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.templateOpt(ScalametaParser.scala:4222) at scala.meta.internal.parsers.ScalametaParser.$anonfun$objectDef$1(ScalametaParser.scala:3936) at scala.meta.internal.parsers.ScalametaParser.autoEndPos(ScalametaParser.scala:349) at scala.meta.internal.parsers.ScalametaParser.autoEndPos(ScalametaParser.scala:354) at scala.meta.internal.parsers.ScalametaParser.objectDef(ScalametaParser.scala:3928) at scala.meta.internal.parsers.ScalametaParser.tmplDef(ScalametaParser.scala:3805) at scala.meta.internal.parsers.ScalametaParser.topLevelTmplDef(ScalametaParser.scala:3786) at scala.meta.internal.parsers.ScalametaParser$$anonfun$2.applyOrElse(ScalametaParser.scala:4378) at scala.meta.internal.parsers.ScalametaParser$$anonfun$2.applyOrElse(ScalametaParser.scala:4366) at scala.PartialFunction.$anonfun$runWith$1(PartialFunction.scala:231) at scala.PartialFunction.$anonfun$runWith$1$adapted(PartialFunction.scala:230) at scala.meta.internal.parsers.ScalametaParser.statSeqBuf(ScalametaParser.scala:4357) at scala.meta.internal.parsers.ScalametaParser.bracelessPackageStats$1(ScalametaParser.scala:4579) at scala.meta.internal.parsers.ScalametaParser.$anonfun$batchSource$11(ScalametaParser.scala:4590) at scala.meta.internal.parsers.ScalametaParser.autoEndPos(ScalametaParser.scala:349) at scala.meta.internal.parsers.ScalametaParser.$anonfun$batchSource$10(ScalametaParser.scala:4590) at scala.meta.internal.parsers.ScalametaParser.tryParse(ScalametaParser.scala:201) at scala.meta.internal.parsers.ScalametaParser.$anonfun$batchSource$1(ScalametaParser.scala:4582) at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.batchSource(ScalametaParser.scala:4550) at scala.meta.internal.parsers.ScalametaParser.$anonfun$source$1(ScalametaParser.scala:4543) at scala.meta.internal.parsers.ScalametaParser.atPos(ScalametaParser.scala:300) at scala.meta.internal.parsers.ScalametaParser.autoPos(ScalametaParser.scala:346) at scala.meta.internal.parsers.ScalametaParser.source(ScalametaParser.scala:4543) at scala.meta.internal.parsers.ScalametaParser.entrypointSource(ScalametaParser.scala:4548) at scala.meta.internal.parsers.ScalametaParser.parseSourceImpl(ScalametaParser.scala:127) at scala.meta.internal.parsers.ScalametaParser.$anonfun$parseSource$1(ScalametaParser.scala:124) at scala.meta.internal.parsers.ScalametaParser.parseRuleAfterBOF(ScalametaParser.scala:51) at scala.meta.internal.parsers.ScalametaParser.parseRule(ScalametaParser.scala:46) at scala.meta.internal.parsers.ScalametaParser.parseSource(ScalametaParser.scala:124) at scala.meta.parsers.Parse$.$anonfun$parseSource$1(Parse.scala:29) at scala.meta.parsers.Parse$$anon$1.apply(Parse.scala:36) at scala.meta.parsers.Api$XtensionParseDialectInput.parse(Api.scala:25) at scala.meta.internal.parsing.Trees.$anonfun$parse$2(Trees.scala:139) at scala.Option.map(Option.scala:242) at scala.meta.internal.parsing.Trees.parse(Trees.scala:130) at scala.meta.internal.parsing.Trees.$anonfun$get$1(Trees.scala:39) at scala.Option.orElse(Option.scala:477) at scala.meta.internal.parsing.Trees.get(Trees.scala:39) at scala.meta.internal.parsing.Trees.findLastEnclosingAt(Trees.scala:85) at scala.meta.internal.metals.codeactions.PatternMatchRefactor.contribute(PatternMatchRefactor.scala:97) at scala.meta.internal.metals.codeactions.CodeActionProvider$$anonfun$1.applyOrElse(CodeActionProvider.scala:78) at scala.meta.internal.metals.codeactions.CodeActionProvider$$anonfun$1.applyOrElse(CodeActionProvider.scala:76) at scala.collection.immutable.List.collect(List.scala:275) at scala.meta.internal.metals.codeactions.CodeActionProvider.codeActions(CodeActionProvider.scala:76) at scala.meta.internal.metals.MetalsLspService.$anonfun$codeAction$1(MetalsLspService.scala:1562) at scala.meta.internal.metals.CancelTokens$.future(CancelTokens.scala:38) at scala.meta.internal.metals.MetalsLspService.codeAction(MetalsLspService.scala:1561) at scala.meta.internal.metals.WorkspaceLspService.codeAction(WorkspaceLspService.scala:432) at scala.meta.metals.lsp.DelegatingScalaService.codeAction(DelegatingScalaService.scala:146) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ... 13 more ```
tgodzik commented 11 months ago

Thanks for reporting! I think this should be fixed by the newest scalametal, let me try and update

voidcontext commented 11 months ago

I think I have a minimal example:

case class Foobar[F[_]]()
type Traced[F[_], A] = Option[F[A]]

def traced[F[_]](): F[Foobar[Traced[F, *]]] = ???

val program = 
  for
    given Foobar[Traced[Option, *]] <- traced[Option]()
  yield ()

I think the given clause in the for comprehension might be triggering this issue.

tgodzik commented 11 months ago

I will update in https://github.com/scalameta/metals/pull/5671 and later add the test to check if it was fixed by the scalameta update.

voidcontext commented 11 months ago

@tgodzik I just checked 1.0.1+53-209a2984-SNAPSHOT: the exception disappeared and at first glance it seems code actions are working as expected.

tgodzik commented 11 months ago

Let's reopen if this shows up again. Thanks for confirming!

voidcontext commented 11 months ago

@tgodzik Thank you for fixing this so quickly!