Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error exits Ammonite shell when trying to look up methods for a Map object #1494

Open
medale opened this issue May 18, 2024 · 1 comment
Open

Comments

@medale
Copy link

medale commented May 18, 2024

When using the . + tab gesture to look up methods on a Map[Int,Int] object from the Scala 3.3.3 shell, the action throws the error below and exits the Ammonite shell. Environment: Ubuntu 22.04 LTS with Amazon Corretto JDK 17.0.11. Works for lookups on String, Option[Int], List[Int] (but also fails for Map[String,String]).

Steps to replicate:

rm -Rf ~/.ammonite

curl -L https://github.com/com-lihaoyi/Ammonite/releases/download/3.0.0-M2/3.3-3.0.0-M2-3-b5eb4787 > amm3

chmod +x amm3

./amm3
Welcome to the Ammonite Repl 3.0.0-M2-3-b5eb4787 (Scala 3.3.3 Java 17.0.11)

val m = Map(1 -> 2)
m. <hit tab for method lookup>
Exception in thread "main" java.lang.AssertionError: assertion failed: type error: Map[Int, Int] does not conform to scala.deriving.Mirror.ProductOf[T]I tried to show that
  Map[Int, Int]
conforms to
  scala.deriving.Mirror.ProductOf[T]
but the comparison trace ended with `false`:

  ==> Map[Int, Int]  <:  scala.deriving.Mirror.ProductOf[T]
    ==> Map[Int, Int]  <:  scala.deriving.Mirror.Product{   type MirroredType = T; type MirroredMonoType = T;     type MirroredElemTypes <: Tuple }
      ==> Map[Int, Int]  <:  scala.deriving.Mirror.Product{type MirroredType = T; type MirroredMonoType = T}
        ==> Map[Int, Int]  <:  scala.deriving.Mirror.Product{type MirroredType = T}
          ==> Map[Int, Int]  <:  scala.deriving.Mirror.Product
          <== Map[Int, Int]  <:  scala.deriving.Mirror.Product = false
        <== Map[Int, Int]  <:  scala.deriving.Mirror.Product{type MirroredType = T} = false
      <== Map[Int, Int]  <:  scala.deriving.Mirror.Product{type MirroredType = T; type MirroredMonoType = T} = false
    <== Map[Int, Int]  <:  scala.deriving.Mirror.Product{   type MirroredType = T; type MirroredMonoType = T;     type MirroredElemTypes <: Tuple } = false
  <== Map[Int, Int]  <:  scala.deriving.Mirror.ProductOf[T] = false

The tests were made under a constraint with:
 uninstantiated variables: T
 constrained types: [T](p: scala.deriving.Mirror.ProductOf[T]): Any
 bounds:
     T
 ordering:
 co-deps:
 contra-deps:

	at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
	at dotty.tools.dotc.typer.Implicits.inferImplicit(Implicits.scala:1043)
	at dotty.tools.dotc.typer.Implicits.inferImplicit$(Implicits.scala:819)
	at dotty.tools.dotc.typer.Typer.inferImplicit(Typer.scala:117)
	at dotty.tools.dotc.typer.Implicits.inferView(Implicits.scala:857)
	at dotty.tools.dotc.typer.Implicits.inferView$(Implicits.scala:819)
	at dotty.tools.dotc.typer.Typer.inferView(Typer.scala:117)
	at dotty.tools.dotc.typer.Typer.adaptToSubType$1(Typer.scala:4168)
	at dotty.tools.dotc.typer.Typer.adaptNoArgsOther$1(Typer.scala:3996)
	at dotty.tools.dotc.typer.Typer.adaptNoArgs$1(Typer.scala:4071)
	at dotty.tools.dotc.typer.Typer.adapt1(Typer.scala:4277)
	at dotty.tools.dotc.typer.Typer.adapt(Typer.scala:3590)
	at dotty.tools.dotc.typer.ProtoTypes$FunProto.typedArg(ProtoTypes.scala:497)
	at dotty.tools.dotc.typer.Applications$ApplyToUntyped.typedArg(Applications.scala:897)
	at dotty.tools.dotc.typer.Applications$ApplyToUntyped.typedArg(Applications.scala:897)
	at dotty.tools.dotc.typer.Applications$Application.addTyped$1(Applications.scala:589)
	at dotty.tools.dotc.typer.Applications$Application.matchArgs(Applications.scala:653)
	at dotty.tools.dotc.typer.Applications$Application.init(Applications.scala:492)
	at dotty.tools.dotc.typer.Applications$TypedApply.<init>(Applications.scala:779)
	at dotty.tools.dotc.typer.Applications$ApplyToUntyped.<init>(Applications.scala:896)
	at dotty.tools.dotc.typer.Applications.ApplyTo(Applications.scala:1126)
	at dotty.tools.dotc.typer.Applications.ApplyTo$(Applications.scala:352)
	at dotty.tools.dotc.typer.Typer.ApplyTo(Typer.scala:117)
	at dotty.tools.dotc.typer.Applications.simpleApply$1(Applications.scala:969)
	at dotty.tools.dotc.typer.Applications.realApply$1$$anonfun$2(Applications.scala:1052)
	at dotty.tools.dotc.typer.Typer.tryEither(Typer.scala:3327)
	at dotty.tools.dotc.typer.Applications.realApply$1(Applications.scala:1063)
	at dotty.tools.dotc.typer.Applications.typedApply(Applications.scala:1101)
	at dotty.tools.dotc.typer.Applications.typedApply$(Applications.scala:352)
	at dotty.tools.dotc.typer.Typer.typedApply(Typer.scala:117)
	at dotty.tools.dotc.typer.Typer.typedUnnamed$1(Typer.scala:3050)
	at dotty.tools.dotc.typer.Typer.typedUnadapted(Typer.scala:3115)
	at dotty.tools.dotc.typer.Typer.typed(Typer.scala:3187)
	at dotty.tools.dotc.typer.Applications.extMethodApply(Applications.scala:2372)
	at dotty.tools.dotc.typer.Applications.extMethodApply$(Applications.scala:352)
	at dotty.tools.dotc.typer.Typer.extMethodApply(Typer.scala:117)
	at dotty.tools.dotc.typer.Applications.tryApplyingExtensionMethod(Applications.scala:2417)
	at dotty.tools.dotc.typer.Applications.tryApplyingExtensionMethod$(Applications.scala:352)
	at dotty.tools.dotc.typer.Typer.tryApplyingExtensionMethod(Typer.scala:117)
	at dotty.tools.dotc.interactive.Completion$Completer.tryApplyingReceiverToExtension$1(Completion.scala:392)
	at dotty.tools.dotc.interactive.Completion$Completer.$anonfun$15(Completion.scala:435)
	at scala.collection.immutable.List.flatMap(List.scala:294)
	at scala.collection.immutable.List.flatMap(List.scala:79)
	at dotty.tools.dotc.interactive.Completion$Completer.extensionCompletions(Completion.scala:438)
	at dotty.tools.dotc.interactive.Completion$Completer.selectionCompletions(Completion.scala:323)
	at dotty.ammonite.compiler.AmmCompletion$.computeCompletions(AmmCompletion.scala:45)
	at dotty.ammonite.compiler.AmmCompletion$.completions(AmmCompletion.scala:27)
	at ammonite.compiler.Compiler.complete(Compiler.scala:392)
	at ammonite.compiler.CompilerLifecycleManager.complete(CompilerLifecycleManager.scala:112)
	at ammonite.repl.Repl.action$$anonfun$2$$anonfun$2$$anonfun$1(Repl.scala:199)
	at ammonite.repl.Repl.action$$anonfun$2$$anonfun$2$$anonfun$adapted$1(Repl.scala:199)
	at ammonite.repl.AmmoniteFrontEnd.$anonfun$3(AmmoniteFrontEnd.scala:57)
	at ammonite.terminal.TTY$.withSttyOverride(Utils.scala:120)
	at ammonite.repl.AmmoniteFrontEnd.$anonfun$1(AmmoniteFrontEnd.scala:58)
	at ammonite.terminal.Filter$$anon$3$$anon$4.applyOrElse(Filter.scala:71)
	at ammonite.terminal.Filter$$anon$3$$anon$4.applyOrElse(Filter.scala:71)
	at scala.collection.IterableOnceOps.collectFirst(IterableOnce.scala:1256)
	at scala.collection.IterableOnceOps.collectFirst$(IterableOnce.scala:1248)
	at scala.collection.AbstractIterator.collectFirst(Iterator.scala:1303)
	at ammonite.terminal.Filter$$anon$3.op(Filter.scala:71)
	at ammonite.terminal.Filter$.ammonite$terminal$Filter$$anon$7$$_$op$$anonfun$3(Filter.scala:92)
	at scala.collection.Iterator$$anon$9.next(Iterator.scala:584)
	at scala.collection.IterableOnceOps.find(IterableOnce.scala:677)
	at scala.collection.IterableOnceOps.find$(IterableOnce.scala:674)
	at scala.collection.AbstractIterator.find(Iterator.scala:1303)
	at ammonite.terminal.Filter$$anon$7.op(Filter.scala:92)
	at ammonite.terminal.LineReader.readChar(LineReader.scala:155)
	at ammonite.terminal.Terminal$.readLine$$anonfun$2(Terminal.scala:36)
	at ammonite.terminal.TTY$.withSttyOverride(Utils.scala:120)
	at ammonite.terminal.Terminal$.readLine(Terminal.scala:38)
	at ammonite.repl.AmmoniteFrontEnd.readLine(AmmoniteFrontEnd.scala:160)
	at ammonite.repl.AmmoniteFrontEnd.action(AmmoniteFrontEnd.scala:30)
	at ammonite.repl.Repl.action$$anonfun$2$$anonfun$2(Repl.scala:205)
	at ammonite.repl.Scoped.flatMap$$anonfun$1(Signaller.scala:45)
	at ammonite.repl.Signaller.apply(Signaller.scala:28)
	at ammonite.repl.Scoped.flatMap(Signaller.scala:45)
	at ammonite.repl.Scoped.flatMap$(Signaller.scala:42)
	at ammonite.repl.Signaller.flatMap(Signaller.scala:16)
	at ammonite.repl.Repl.action$$anonfun$2(Repl.scala:211)
	at ammonite.util.Res$Success.flatMap(Res.scala:58)
	at ammonite.repl.Repl.action(Repl.scala:211)
	at ammonite.repl.Repl.loop$1(Repl.scala:218)
	at ammonite.repl.Repl.run(Repl.scala:233)
	at ammonite.Main.run(Main.scala:249)
	at ammonite.MainRunner.runRepl$$anonfun$1(MainRunner.scala:76)
	at ammonite.MainRunner.watchLoop(MainRunner.scala:57)
	at ammonite.MainRunner.runRepl(MainRunner.scala:76)
	at ammonite.AmmoniteMain$.main0(AmmoniteMain.scala:98)
	at ammonite.AmmoniteMain$.main(AmmoniteMain.scala:31)
	at ammonite.AmmoniteMain.main(AmmoniteMain.scala)

Works for the 2.13 version so maybe this is a Scala 3.3.3 problem?

curl -L https://github.com/com-lihaoyi/Ammonite/releases/download/3.0.0-M2/2.12-3.0.0-M2-3-b5eb4787 > amm2
chmod +x amm2
./amm2
Welcome to the Ammonite Repl 3.0.0-M2-3-b5eb4787 (Scala 2.13.14 Java 17.0.11)
val m = Map(1 -> 2) 
m. <+ tab>
+                   canEqual            count               filter              forall              grouped ...
@medale
Copy link
Author

medale commented Jun 5, 2024

Running this from the scala shell on Mac works as expected:

scala-cli repl -S 3.3.3
Welcome to Scala 3.3.3 (17.0.11, Java OpenJDK 64-Bit Server VM).
Type in expressions for evaluation. Or try :help.

scala> val m = Map(1 -> 2)
val m: Map[Int, Int] = Map(1 -> 2)

scala> m. <hit tab for method lookup>
!=                   Maximized            contains

But not from Ammonite:

scala-cli repl -S 3.3.3 --amm --power
Welcome to the Ammonite Repl 3.0.0-M1-19-a7973e17 (Scala 3.3.3 Java 17.0.11)
@ val m = Map(1 -> 2)
m: Map[Int, Int] = Map(1 -> 2)

@ m.<hit tab for method lookup>
Exception in thread "main" java.lang.AssertionError: assertion failed: type error: Map[Int, Int] does not conform to scala.deriving.Mirror.ProductOf[T... (as above)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant