From a715941520f41c7be482883ab82f13964d10e973 Mon Sep 17 00:00:00 2001 From: Dmitry Bushev Date: Tue, 5 Mar 2024 08:34:56 +0000 Subject: [PATCH 1/6] DRAFT: type ascription --- .../compiler/context/SuggestionBuilder.scala | 41 ++++++++++++++----- .../test/context/SuggestionBuilderTest.scala | 2 +- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala index 491cc266008c..ac0bc0945cd3 100644 --- a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala +++ b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala @@ -1,7 +1,6 @@ package org.enso.compiler.context import org.enso.compiler.Compiler -import org.enso.compiler.context.CompilerContext import org.enso.compiler.core.Implicits.AsMetadata import org.enso.compiler.core.{ExternalID, IR} import org.enso.compiler.core.ir.expression.{Application, Operator} @@ -298,7 +297,7 @@ final class SuggestionBuilder[A: IndexedSource]( buildTypeSignatureFromMetadata( arg.getMetadata(TypeSignatures) ).headOption - .map(buildTypedArgument(arg, _)) + .map(buildTypedArgument(arg, _, isTypeAscription = true)) .getOrElse(buildArgument(arg)) }.tail @@ -581,7 +580,15 @@ final class SuggestionBuilder[A: IndexedSource]( case varg +: vtail => targs match { case targ +: ttail => - go(vtail, ttail, acc :+ buildTypedArgument(varg, targ)) + go( + vtail, + ttail, + acc :+ buildTypedArgument( + varg, + targ, + isTypeAscription = false + ) + ) case _ => go(vtail, targs, acc :+ buildArgument(varg)) } @@ -614,7 +621,15 @@ final class SuggestionBuilder[A: IndexedSource]( case varg +: vtail => targs match { case targ +: ttail => - go(vtail, ttail, acc :+ buildTypedArgument(varg, targ)) + go( + vtail, + ttail, + acc :+ buildTypedArgument( + varg, + targ, + isTypeAscription = false + ) + ) case _ => go(vtail, targs, acc :+ buildArgument(varg)) } @@ -632,7 +647,8 @@ final class SuggestionBuilder[A: IndexedSource]( */ private def buildTypedArgument( varg: DefinitionArgument, - targ: TypeArg + targ: TypeArg, + isTypeAscription: Boolean ): Suggestion.Argument = Suggestion.Argument( name = varg.name.name, @@ -640,20 +656,25 @@ final class SuggestionBuilder[A: IndexedSource]( isSuspended = varg.suspended, hasDefault = varg.defaultValue.isDefined, defaultValue = varg.defaultValue.map(buildDefaultValue), - tagValues = buildTagValues(targ) + tagValues = buildTagValues(targ, isTypeAscription) ) /** Build tag values of type argument. * * @param targ the type argument + * @param isTypeAscription if the type ascription was used in type definition * @return the list of tag values */ - private def buildTagValues(targ: TypeArg): Option[Seq[String]] = { + private def buildTagValues( + targ: TypeArg, + isTypeAscription: Boolean + ): Option[Seq[String]] = { def go(arg: TypeArg): Seq[String] = arg match { case TypeArg.Sum(_, List()) => Seq() case TypeArg.Sum(_, variants) => variants.flatMap(go) - case TypeArg.Value(n) => Seq(n.toString) - case _ => Seq() + case TypeArg.Value(n) => + Seq(if (isTypeAscription) s"~${n.item}" else n.toString) + case _ => Seq() } targ match { @@ -704,7 +725,7 @@ final class SuggestionBuilder[A: IndexedSource]( private def buildArgument(arg: DefinitionArgument): Suggestion.Argument = { buildTypeSignatureFromMetadata(arg.getMetadata(TypeSignatures)) match { case Vector(targ) => - buildTypedArgument(arg, targ) + buildTypedArgument(arg, targ, isTypeAscription = true) case _ => Suggestion.Argument( name = arg.name.name, diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala index 88ea18ac2a8a..b87c8032a062 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala @@ -2333,7 +2333,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { false, false, None, - Some(Seq("Unnamed.Test.S.X", "Unnamed.Test.S.Y")) + Some(Seq("~X", "~Y")) ) ), returnType = "Unnamed.Test.T", From 90f0b7af88fe2fa3b66cc427ada2c619cf805d23 Mon Sep 17 00:00:00 2001 From: Dmitry Bushev Date: Tue, 5 Mar 2024 14:43:26 +0000 Subject: [PATCH 2/6] feat: autoscope check --- .../compiler/context/SuggestionBuilder.scala | 22 +- .../test/context/SuggestionBuilderTest.scala | 219 +++++++++++++++++- 2 files changed, 234 insertions(+), 7 deletions(-) diff --git a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala index ac0bc0945cd3..9525a1df8a05 100644 --- a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala +++ b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala @@ -669,17 +669,29 @@ final class SuggestionBuilder[A: IndexedSource]( targ: TypeArg, isTypeAscription: Boolean ): Option[Seq[String]] = { - def go(arg: TypeArg): Seq[String] = arg match { - case TypeArg.Sum(_, List()) => Seq() - case TypeArg.Sum(_, variants) => variants.flatMap(go) + def mkUnqualified(name: QualifiedName): String = + name.item + def mkQualified(name: QualifiedName): String = + name.toString + def mkAutoScopeCall(name: String): String = + s"~$name" + def go(arg: TypeArg, useAutoScope: Boolean): Seq[String] = arg match { + case TypeArg.Sum(_, List()) => Seq() + case TypeArg.Sum(_, variants) => + variants.flatMap(go(_, useAutoScope)) case TypeArg.Value(n) => - Seq(if (isTypeAscription) s"~${n.item}" else n.toString) + Seq(if (useAutoScope) mkUnqualified(n) else mkQualified(n)) case _ => Seq() } targ match { case s: TypeArg.Sum => - val tagValues = go(s) + val tagItems = go(s, isTypeAscription) + val canUseAutoScope = + isTypeAscription && tagItems.distinct.length == tagItems.length + val tagValues = + if (canUseAutoScope) tagItems.map(mkAutoScopeCall) + else go(s, useAutoScope = false) Option.unless(tagValues.isEmpty)(tagValues) case _ => None diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala index b87c8032a062..ae678e3fdd27 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala @@ -865,6 +865,221 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { ) } + "build argument tag values using autoscoped values" in { + + val code = + """type Value + | A + | B + | + |type Auto + | + |foo (a : Value | Auto) = a + |""".stripMargin + val module = code.preprocessModule + + build(code, module) shouldEqual Tree.Root( + Vector( + ModuleNode, + Tree.Node( + Suggestion.Type( + externalId = None, + module = "Unnamed.Test", + name = "Value", + params = Seq(), + returnType = "Unnamed.Test.Value", + parentType = Some(SuggestionBuilder.Any), + documentation = None + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "A", + arguments = Seq(), + returnType = "Unnamed.Test.Value", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "B", + arguments = Seq(), + returnType = "Unnamed.Test.Value", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Type( + externalId = None, + module = "Unnamed.Test", + name = "Auto", + params = Seq(), + returnType = "Unnamed.Test.Auto", + parentType = Some(SuggestionBuilder.Any), + documentation = None + ), + Vector() + ), + Tree.Node( + Suggestion.DefinedMethod( + externalId = None, + module = "Unnamed.Test", + name = "foo", + arguments = Seq( + Suggestion.Argument( + "a", + "Unnamed.Test.Value | Unnamed.Test.Auto", + false, + false, + None, + Some(Seq("~A", "~B", "~Auto")) + ) + ), + selfType = "Unnamed.Test", + returnType = SuggestionBuilder.Any, + isStatic = true, + documentation = None, + annotations = Seq() + ), + Vector() + ) + ) + ) + } + + "build argument tag values checking if autoscoped constructors are distinct" in { + + val code = + """type T + | A + | B + | + |type K + | B + | C + | + |foo (a : T | K) = a + |""".stripMargin + val module = code.preprocessModule + + build(code, module) shouldEqual Tree.Root( + Vector( + ModuleNode, + Tree.Node( + Suggestion.Type( + externalId = None, + module = "Unnamed.Test", + name = "T", + params = Seq(), + returnType = "Unnamed.Test.T", + parentType = Some(SuggestionBuilder.Any), + documentation = None + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "A", + arguments = Seq(), + returnType = "Unnamed.Test.T", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "B", + arguments = Seq(), + returnType = "Unnamed.Test.T", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Type( + externalId = None, + module = "Unnamed.Test", + name = "K", + params = Seq(), + returnType = "Unnamed.Test.K", + parentType = Some(SuggestionBuilder.Any), + documentation = None + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "B", + arguments = Seq(), + returnType = "Unnamed.Test.K", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "C", + arguments = Seq(), + returnType = "Unnamed.Test.K", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.DefinedMethod( + externalId = None, + module = "Unnamed.Test", + name = "foo", + arguments = Seq( + Suggestion.Argument( + "a", + "Unnamed.Test.T | Unnamed.Test.K", + false, + false, + None, + Some( + Seq( + "Unnamed.Test.T.A", + "Unnamed.Test.T.B", + "Unnamed.Test.K.B", + "Unnamed.Test.K.C" + ) + ) + ) + ), + selfType = "Unnamed.Test", + returnType = SuggestionBuilder.Any, + isStatic = true, + documentation = None, + annotations = Seq() + ), + Vector() + ) + ) + ) + } + "build method with lazy arguments" in { val code = @@ -1230,8 +1445,8 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { Some("Boolean.True"), Some( List( - "Standard.Base.Data.Boolean.Boolean.True", - "Standard.Base.Data.Boolean.Boolean.False" + "~True", + "~False" ) ) ) From 67621f9c391d9e811fd3a86a40501f4d19f8142a Mon Sep 17 00:00:00 2001 From: Dmitry Bushev Date: Wed, 6 Mar 2024 13:52:58 +0000 Subject: [PATCH 3/6] feat: autoscope from ascribed type and type signature --- .../compiler/context/SuggestionBuilder.scala | 21 ++-- .../test/context/SuggestionBuilderTest.scala | 98 ++++++++++++++++++- 2 files changed, 101 insertions(+), 18 deletions(-) diff --git a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala index 9525a1df8a05..a3a5192fe58e 100644 --- a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala +++ b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala @@ -297,7 +297,7 @@ final class SuggestionBuilder[A: IndexedSource]( buildTypeSignatureFromMetadata( arg.getMetadata(TypeSignatures) ).headOption - .map(buildTypedArgument(arg, _, isTypeAscription = true)) + .map(buildTypedArgument(arg, _)) .getOrElse(buildArgument(arg)) }.tail @@ -583,11 +583,7 @@ final class SuggestionBuilder[A: IndexedSource]( go( vtail, ttail, - acc :+ buildTypedArgument( - varg, - targ, - isTypeAscription = false - ) + acc :+ buildTypedArgument(varg, targ) ) case _ => go(vtail, targs, acc :+ buildArgument(varg)) @@ -624,11 +620,7 @@ final class SuggestionBuilder[A: IndexedSource]( go( vtail, ttail, - acc :+ buildTypedArgument( - varg, - targ, - isTypeAscription = false - ) + acc :+ buildTypedArgument(varg, targ) ) case _ => go(vtail, targs, acc :+ buildArgument(varg)) @@ -647,8 +639,7 @@ final class SuggestionBuilder[A: IndexedSource]( */ private def buildTypedArgument( varg: DefinitionArgument, - targ: TypeArg, - isTypeAscription: Boolean + targ: TypeArg ): Suggestion.Argument = Suggestion.Argument( name = varg.name.name, @@ -656,7 +647,7 @@ final class SuggestionBuilder[A: IndexedSource]( isSuspended = varg.suspended, hasDefault = varg.defaultValue.isDefined, defaultValue = varg.defaultValue.map(buildDefaultValue), - tagValues = buildTagValues(targ, isTypeAscription) + tagValues = buildTagValues(targ, varg.ascribedType.nonEmpty) ) /** Build tag values of type argument. @@ -737,7 +728,7 @@ final class SuggestionBuilder[A: IndexedSource]( private def buildArgument(arg: DefinitionArgument): Suggestion.Argument = { buildTypeSignatureFromMetadata(arg.getMetadata(TypeSignatures)) match { case Vector(targ) => - buildTypedArgument(arg, targ, isTypeAscription = true) + buildTypedArgument(arg, targ) case _ => Suggestion.Argument( name = arg.name.name, diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala index ae678e3fdd27..4f3a5ff4a508 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala @@ -774,7 +774,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { | |type Auto | - |foo : Text | Boolean | Value | Auto -> Any + |foo : Text | Boolean | Value | Auto -> Value |foo a = a |""".stripMargin val module = code.preprocessModule @@ -854,7 +854,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { ) ), selfType = "Unnamed.Test", - returnType = "Any", + returnType = "Unnamed.Test.Value", isStatic = true, documentation = None, annotations = Seq() @@ -865,7 +865,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { ) } - "build argument tag values using autoscoped values" in { + "build argument tag values from ascribed type" in { val code = """type Value @@ -956,6 +956,98 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { ) } + "build argument tag values from ascribed type and type signature" in { + + val code = + """type Value + | A + | B + | + |type Auto + | + |foo : Value | Auto -> Value | Auto + |foo (a : Value | Auto) = a + |""".stripMargin + val module = code.preprocessModule + + build(code, module) shouldEqual Tree.Root( + Vector( + ModuleNode, + Tree.Node( + Suggestion.Type( + externalId = None, + module = "Unnamed.Test", + name = "Value", + params = Seq(), + returnType = "Unnamed.Test.Value", + parentType = Some(SuggestionBuilder.Any), + documentation = None + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "A", + arguments = Seq(), + returnType = "Unnamed.Test.Value", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Constructor( + externalId = None, + module = "Unnamed.Test", + name = "B", + arguments = Seq(), + returnType = "Unnamed.Test.Value", + documentation = None, + annotations = Seq() + ), + Vector() + ), + Tree.Node( + Suggestion.Type( + externalId = None, + module = "Unnamed.Test", + name = "Auto", + params = Seq(), + returnType = "Unnamed.Test.Auto", + parentType = Some(SuggestionBuilder.Any), + documentation = None + ), + Vector() + ), + Tree.Node( + Suggestion.DefinedMethod( + externalId = None, + module = "Unnamed.Test", + name = "foo", + arguments = Seq( + Suggestion.Argument( + "a", + "Unnamed.Test.Value | Unnamed.Test.Auto", + false, + false, + None, + Some(Seq("~A", "~B", "~Auto")) + ) + ), + selfType = "Unnamed.Test", + returnType = "Unnamed.Test.Value | Unnamed.Test.Auto", + isStatic = true, + documentation = None, + annotations = Seq() + ), + Vector() + ) + ) + ) + } + "build argument tag values checking if autoscoped constructors are distinct" in { val code = From cd0aca7f2d334c5142065b96e846aa016408ec10 Mon Sep 17 00:00:00 2001 From: Dmitry Bushev Date: Wed, 6 Mar 2024 13:55:10 +0000 Subject: [PATCH 4/6] misc: cleanup --- .../compiler/context/SuggestionBuilder.scala | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala index a3a5192fe58e..74a87d864fae 100644 --- a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala +++ b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala @@ -580,11 +580,7 @@ final class SuggestionBuilder[A: IndexedSource]( case varg +: vtail => targs match { case targ +: ttail => - go( - vtail, - ttail, - acc :+ buildTypedArgument(varg, targ) - ) + go(vtail, ttail, acc :+ buildTypedArgument(varg, targ)) case _ => go(vtail, targs, acc :+ buildArgument(varg)) } @@ -617,11 +613,7 @@ final class SuggestionBuilder[A: IndexedSource]( case varg +: vtail => targs match { case targ +: ttail => - go( - vtail, - ttail, - acc :+ buildTypedArgument(varg, targ) - ) + go(vtail, ttail, acc :+ buildTypedArgument(varg, targ)) case _ => go(vtail, targs, acc :+ buildArgument(varg)) } @@ -653,12 +645,12 @@ final class SuggestionBuilder[A: IndexedSource]( /** Build tag values of type argument. * * @param targ the type argument - * @param isTypeAscription if the type ascription was used in type definition + * @param hasTypeAscription if the type ascription was used in type definition * @return the list of tag values */ private def buildTagValues( targ: TypeArg, - isTypeAscription: Boolean + hasTypeAscription: Boolean ): Option[Seq[String]] = { def mkUnqualified(name: QualifiedName): String = name.item @@ -677,9 +669,9 @@ final class SuggestionBuilder[A: IndexedSource]( targ match { case s: TypeArg.Sum => - val tagItems = go(s, isTypeAscription) + val tagItems = go(s, hasTypeAscription) val canUseAutoScope = - isTypeAscription && tagItems.distinct.length == tagItems.length + hasTypeAscription && tagItems.distinct.length == tagItems.length val tagValues = if (canUseAutoScope) tagItems.map(mkAutoScopeCall) else go(s, useAutoScope = false) From edbd318f6780b3340c87bab7acda0ee96030bc8d Mon Sep 17 00:00:00 2001 From: Dmitry Bushev Date: Wed, 6 Mar 2024 13:56:29 +0000 Subject: [PATCH 5/6] update: autoscope syntax --- .../scala/org/enso/compiler/context/SuggestionBuilder.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala index 74a87d864fae..26b7abf27737 100644 --- a/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala +++ b/engine/runtime-compiler/src/main/scala/org/enso/compiler/context/SuggestionBuilder.scala @@ -657,7 +657,7 @@ final class SuggestionBuilder[A: IndexedSource]( def mkQualified(name: QualifiedName): String = name.toString def mkAutoScopeCall(name: String): String = - s"~$name" + s"..$name" def go(arg: TypeArg, useAutoScope: Boolean): Seq[String] = arg match { case TypeArg.Sum(_, List()) => Seq() case TypeArg.Sum(_, variants) => From 4a4701ea3182479a4f33a7e546a979820142d9a2 Mon Sep 17 00:00:00 2001 From: Dmitry Bushev Date: Thu, 7 Mar 2024 12:37:45 +0000 Subject: [PATCH 6/6] misc: update tests --- .../compiler/test/context/SuggestionBuilderTest.scala | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala index 4f3a5ff4a508..b8b08af6239b 100644 --- a/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala +++ b/engine/runtime-integration-tests/src/test/scala/org/enso/compiler/test/context/SuggestionBuilderTest.scala @@ -941,7 +941,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { false, false, None, - Some(Seq("~A", "~B", "~Auto")) + Some(Seq("..A", "..B", "..Auto")) ) ), selfType = "Unnamed.Test", @@ -1033,7 +1033,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { false, false, None, - Some(Seq("~A", "~B", "~Auto")) + Some(Seq("..A", "..B", "..Auto")) ) ), selfType = "Unnamed.Test", @@ -1537,8 +1537,8 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { Some("Boolean.True"), Some( List( - "~True", - "~False" + "..True", + "..False" ) ) ) @@ -2640,7 +2640,7 @@ class SuggestionBuilderTest extends AnyWordSpecLike with Matchers { false, false, None, - Some(Seq("~X", "~Y")) + Some(Seq("..X", "..Y")) ) ), returnType = "Unnamed.Test.T",