scalacenter / scalafix

Refactoring and linting tool for Scala

Home Page:https://scalacenter.github.io/scalafix/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`MatchError` on `LambdaType` in scala 3.3.1-RC1

mrdziuban opened this issue · comments

After upgrading to scala 3.3.1-RC1 I've started seeing a MatchError in a number of files. One example looks like this:

scalafix.internal.v1.FileException: unexpected error processing file /path/to/my/file.scala
Caused by: scala.MatchError: LambdaType(Some(Scope(Vector(),Vector(SymbolInformation([B],SCALA,TYPE_PARAMETER,0,B,TypeSignature(None,TypeRef(Empty,scala/Nothing#,Vector()),TypeRef(Empty,scala/Any#,Vector())),Vector(),Empty,Vector(),None)))),TypeRef(SingleType(Empty,cats/data/NonEmptyMapImpl.),cats/data/Newtype2#Type#,Vector(TypeRef(Empty,scala/Int#,Vector()), TypeRef(Empty,[B],Vector())))) (of class scala.meta.internal.semanticdb.LambdaType)
  at scalafix.internal.v0.LegacyCodePrinter.pprint(LegacyCodePrinter.scala:103)
  at scalafix.internal.v0.LegacyCodePrinter.$anonfun$loop$4(LegacyCodePrinter.scala:204)
  at scalafix.internal.v0.LegacyCodePrinter.$anonfun$loop$4$adapted(LegacyCodePrinter.scala:204)
  at scalafix.internal.v0.LegacyCodePrinter.$anonfun$mkString$1(LegacyCodePrinter.scala:49)
  at scalafix.internal.v0.LegacyCodePrinter.$anonfun$mkString$1$adapted(LegacyCodePrinter.scala:43)
  at scala.collection.Iterator.foreach(Iterator.scala:943)
  at scala.collection.Iterator.foreach$(Iterator.scala:943)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
  at scala.collection.IterableLike.foreach(IterableLike.scala:74)
  at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
  at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
  at scalafix.internal.v0.LegacyCodePrinter.mkString(LegacyCodePrinter.scala:43)
  at scalafix.internal.v0.LegacyCodePrinter.loop(LegacyCodePrinter.scala:204)
  at scalafix.internal.v0.LegacyCodePrinter.loop(LegacyCodePrinter.scala:181)
  at scalafix.internal.v0.LegacyCodePrinter.convertSynthetic(LegacyCodePrinter.scala:209)
  at scalafix.internal.v0.LegacySemanticdbIndex$.syntheticToLegacy(LegacySemanticdbIndex.scala:171)
  at scalafix.internal.v0.LegacySemanticdbIndex.$anonfun$synthetics$1(LegacySemanticdbIndex.scala:53)
  at scala.collection.TraversableLike.$anonfun$map$1(TraversableLike.scala:286)
  at scala.collection.Iterator.foreach(Iterator.scala:943)
  at scala.collection.Iterator.foreach$(Iterator.scala:943)
  at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
  at scala.collection.IterableLike.foreach(IterableLike.scala:74)
  at scala.collection.IterableLike.foreach$(IterableLike.scala:73)
  at scala.collection.AbstractIterable.foreach(Iterable.scala:56)
  at scala.collection.TraversableLike.map(TraversableLike.scala:286)
  at scala.collection.TraversableLike.map$(TraversableLike.scala:279)
  at scala.collection.AbstractTraversable.map(Traversable.scala:108)
  at scalafix.internal.v0.LegacySemanticdbIndex.synthetics(LegacySemanticdbIndex.scala:52)
  at scalafix.internal.scaluzzi.Disable.checkSynthetics(Disable.scala:163)
  at scalafix.internal.scaluzzi.Disable.check(Disable.scala:184)
  at scalafix.internal.v0.LegacyRule$.lints(LegacyRule.scala:12)
  at scalafix.internal.v0.LegacySemanticRule.fix(LegacySemanticRule.scala:29)
  at scalafix.internal.v1.Rules.$anonfun$semanticPatch$1(Rules.scala:78)
  at scala.collection.immutable.List.map(List.scala:293)
  at scalafix.internal.v1.Rules.semanticPatch(Rules.scala:76)
  at scalafix.internal.v1.MainOps$.getPatchesAndDiags(MainOps.scala:305)
  at scalafix.internal.v1.MainOps$.unsafeHandleFile(MainOps.scala:255)

Edited, this actually happens on scala 3.3.1-RC1, not on scala 3.3.0. Unfortunately I'm not able to figure out which part of my code triggers this, let me know if there's a way to do so, I'd be happy to try to come up with a minimal reproduction.

Thanks for the report! A quick look shows that it comes from scalameta/scalameta#2867 (see corresponding dotty commit, first released on 3.3.1-RC1), so the fix should be easy:

Feel free to open a PR if this is blocking for you, otherwise I'll look at it later.

Not related to 3.3.1-RC1, but it does look like MatchType is also missing and might cause similar failures since 3.1.3 where it was introduced.

@bjaglin I'm trying to work on a fix for this and have added a type lambda to HelloWorld.scala like this:

type X = [A] =>> A

but I'm not getting the error. Do you have any idea what I might be doing wrong or what code would actually produce a LambdaType?

Not directly related, but I'm also getting this error a number of times when running test

CommandLineError=4 did not equal LinterError=64 error: 'master' unknown revision or path not in the working tree. (CliGitDiffSuite.scala:318)

Hi, also seeing MatchError on LambdaType on scala 3.3.1, on a different code path though:

[error] scalafix.internal.v1.FileException: unexpected error processing file /runner/_work/foo.scala
[error] Caused by: scala.MatchError: LambdaType(Some(Scope(Vector(),Vector(SymbolInformation([x],SCALA,TYPE_PARAMETER,0,x,TypeSignature(None,TypeRef(Empty,scala/Nothing#,Vector()),TypeRef(Empty,scala/Any#,Vector())),Vector(),Empty,Vector(),None)))),TypeRef(Empty,cats/effect/IO#,Vector(TypeRef(Empty,[x],Vector())))) (of class scala.meta.internal.semanticdb.LambdaType)
[error] 	at scalafix.internal.v1.SymtabFromProtobuf.stype(SymtabFromProtobuf.scala:27)
[error] 	at scalafix.internal.v1.DocumentFromProtobuf.$anonfun$stree$2(DocumentFromProtobuf.scala:48)
[error] 	at scala.collection.Iterator$$anon$10.next(Iterator.scala:461)
[error] 	at scala.collection.Iterator.foreach(Iterator.scala:943)
[error] 	at scala.collection.Iterator.foreach$(Iterator.scala:943)
[error] 	at scala.collection.AbstractIterator.foreach(Iterator.scala:1431)
[error] 	at scala.collection.generic.Growable.$plus$plus$eq(Growable.scala:62)
[error] 	at scala.collection.generic.Growable.$plus$plus$eq$(Growable.scala:53)
[error] 	at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:184)
[error] 	at scala.collection.mutable.ListBuffer.$plus$plus$eq(ListBuffer.scala:47)
[error] 	at scala.collection.TraversableOnce.to(TraversableOnce.scala:366)
[error] 	at scala.collection.TraversableOnce.to$(TraversableOnce.scala:364)
[error] 	at scala.collection.AbstractIterator.to(Iterator.scala:1431)
[error] 	at scala.collection.TraversableOnce.toList(TraversableOnce.scala:350)
[error] 	at scala.collection.TraversableOnce.toList$(TraversableOnce.scala:350)
[error] 	at scala.collection.AbstractIterator.toList(Iterator.scala:1431)
[error] 	at scalafix.internal.v1.DocumentFromProtobuf.stree(DocumentFromProtobuf.scala:48)
[error] 	at scalafix.internal.v1.DocumentFromProtobuf$.convert(DocumentFromProtobuf.scala:11)
[error] 	at scalafix.internal.v1.InternalSemanticDoc.$anonfun$synthetic$1(InternalSemanticDoc.scala:51)
[error] 	at scala.collection.immutable.List.map(List.scala:[297](https://github.com/foo/actions/runs/6116137544/job/16600894625?pr=536#step:4:304))
[error] 	at scalafix.internal.v1.InternalSemanticDoc.synthetic(InternalSemanticDoc.scala:51)
[error] 	at scalafix.v1.package$XtensionTermScalafix.synthetics(package.scala:21)
[error] 	at org.typelevel.fix.SyncCompiler$$anonfun$fix$1.applyOrElse(SyncCompiler.scala:26)
[error] 	at org.typelevel.fix.SyncCompiler$$anonfun$fix$1.applyOrElse(SyncCompiler.scala:25)
[error] 	at scala.PartialFunction$Lifted.apply(PartialFunction.scala:228)
[error] 	at scala.PartialFunction$Lifted.apply(PartialFunction.scala:224)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:32)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.SimpleTraverser.$anonfun$apply$1$adapted(SimpleTraverser.scala:5)
[error] 	at scala.collection.immutable.List.foreach(List.scala:431)
[error] 	at scala.meta.transversers.SimpleTraverser.apply(SimpleTraverser.scala:5)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI$traverser$3$.apply(Api.scala:33)
[error] 	at scala.meta.transversers.Api$XtensionCollectionLikeUI.collect(Api.scala:36)
[error] 	at org.typelevel.fix.SyncCompiler.fix(SyncCompiler.scala:25)
[error] 	at scalafix.internal.v1.Rules.$anonfun$semanticPatch$1(Rules.scala:78)
[error] 	at scala.collection.immutable.List.map(List.scala:297)
[error] 	at scalafix.internal.v1.Rules.semanticPatch(Rules.scala:76)
[error] 	at scalafix.internal.v1.MainOps$.getPatchesAndDiags(MainOps.scala:[306](https://github.com/foo/actions/runs/6116137544/job/16600894625?pr=536#step:4:313))
[error] 	at scalafix.internal.v1.MainOps$.unsafeHandleFile(MainOps.scala:256)

Thanks for the report @jnicoulaud-ledger! There is indeed another non-exhaustive pattern matching on semanticdb's type (and there might be more). I'll look at it this week-end ahead of the upcoming scalafix release, together with the oustanding challenge blocking the other code path.

Apologies for the long delay on this. Can you @mrdziuban @jnicoulaud-ledger confirm that 0.11.1+120-0c3e52db-SNAPSHOT (or later), available within ~10min, fixes your issues? A release is scheduled for next week, with other Scala 3 improvements.

@bjaglin I confirm it does 👍

Same, everything is working for me. Thank you @bjaglin!