Skip to content

Commit

Permalink
add tests and fix case case
Browse files Browse the repository at this point in the history
  • Loading branch information
kasiaMarek committed Oct 6, 2023
1 parent b085d11 commit f1b769c
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ object CaseKeywordCompletion:
new Parents(NoType, definitions)
case sel => new Parents(sel.tpe, definitions)

val selectorSym = parents.selector.metalsDealias.typeSymbol
val selectorSym = parents.selector.widen.metalsDealias.typeSymbol

// Special handle case when selector is a tuple or `FunctionN`.
if definitions.isTupleClass(selectorSym) || definitions.isFunctionClass(
Expand Down Expand Up @@ -150,7 +150,9 @@ object CaseKeywordCompletion:
if isValid(ts) then visit(autoImportsGen.inferSymbolImport(ts))
)
// Step 2: walk through known subclasses of sealed types.
val sealedDescs = subclassesForType(parents.selector.widen.bounds.hi)
val sealedDescs = subclassesForType(
parents.selector.widen.metalsDealias.bounds.hi
)
sealedDescs.foreach { sym =>
val symbolImport = autoImportsGen.inferSymbolImport(sym)
visit(symbolImport)
Expand Down Expand Up @@ -238,9 +240,9 @@ object CaseKeywordCompletion:
completionPos,
clientSupportsSnippets,
)
val tpe = selector.tpe.widen.bounds.hi match
case tr @ TypeRef(_, _) => tr.underlying.metalsDealias
case t => t.metalsDealias
val tpe = selector.tpe.widen.metalsDealias.bounds.hi match
case tr @ TypeRef(_, _) => tr.underlying
case t => t

val sortedSubclasses =
val subclasses =
Expand Down
47 changes: 47 additions & 0 deletions tests/cross/src/test/scala/tests/pc/CompletionCaseSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -693,4 +693,51 @@ class CompletionCaseSuite extends BaseCompletionSuite {
|case Sports(time, intensity) => exhaustive-enum-tags3.Activity""".stripMargin,
)

check(
"type-alias-case".tag(IgnoreScala2),
s"""|object O:
| type Id[A] = A
|
| enum Animal:
| case Cat, Dog
|
| val animal: Id[Animal] = ???
|
| animal match
| cas@@
|""".stripMargin,
"""|case Animal.Cat =>
|case Animal.Dog =>
|""".stripMargin,
)

check(
"type-alias-sealed-trait-case",
s"""|object O {
| type Id[A] = A
|
|sealed trait Animal
|object Animal {
| case class Cat() extends Animal
| case object Dog extends Animal
|}
|
| val animal: Id[Animal] = ???
|
| animal match {
| cas@@
| }
|}
|""".stripMargin,
"""|case Cat() => `type-alias-sealed-trait-case`.O.Animal
|case Dog => `type-alias-sealed-trait-case`.O.Animal
|""".stripMargin,
compat = Map(
"3" ->
"""|case Cat() => type-alias-sealed-trait-case.O.Animal
|case Dog => type-alias-sealed-trait-case.O.Animal
|""".stripMargin
),
)

}
60 changes: 52 additions & 8 deletions tests/cross/src/test/scala/tests/pc/CompletionMatchSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -764,22 +764,66 @@ class CompletionMatchSuite extends BaseCompletionSuite {
filter = _.contains("exhaustive"),
)

check(
"type-alias2".tag(IgnoreScala2),
checkEdit(
"type-alias-sealed-trait",
s"""|object O {
| type Id[A] = A
|
| enum Animal:
| case Cat, Dog
|sealed trait Animal
|object Animal {
| case object Cat extends Animal
| case object Dog extends Animal
|}
|
| val animal: Id[Animal] = ???
|
| animal match {
| \tcase Animal.C@@
| }
|animal ma@@
|}
|""".stripMargin,
"Cat: Animal",
s"""
|import O.Animal.Cat
|import O.Animal.Dog
|object O {
| type Id[A] = A
|
|sealed trait Animal
|object Animal {
| case object Cat extends Animal
| case object Dog extends Animal
|}
|
| val animal: Id[Animal] = ???
|
|animal match {
|\tcase Cat => $$0
|\tcase Dog =>
|}
|}
|""".stripMargin,
compat = Map(
"3" ->
s"""
|import O.Animal.Cat
|import O.Animal.Dog
|object O {
| type Id[A] = A
|
|sealed trait Animal
|object Animal {
| case object Cat extends Animal
| case object Dog extends Animal
|}
|
| val animal: Id[Animal] = ???
|
|animal match
|\tcase Cat => $$0
|\tcase Dog =>
|
|}
|""".stripMargin
),
filter = _.contains("exhaustive"),
)

}

0 comments on commit f1b769c

Please sign in to comment.