Skip to content

Commit

Permalink
Also fix default values for cases classes using generics
Browse files Browse the repository at this point in the history
  • Loading branch information
eejbyfeldt committed Feb 21, 2025
1 parent 3e9550e commit 27ff11a
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,10 @@ object LowPriorityParserImplicits {
${ tupleParserImpl[T] }
private def tupleParserImpl[T](using q: Quotes, t: Type[T]): Expr[Parser[_]] = {
import quotes.reflect.*
val tSym = TypeTree.of[T].symbol
val (tSym, params) = TypeRepr.of[T] match {
case AppliedType(base, params) => (base.typeSymbol, Some(params))
case _ => (TypeTree.of[T].symbol, None)
}
val origin = shortName[T]
val fields0 = fields[T]

Expand All @@ -99,7 +102,8 @@ object LowPriorityParserImplicits {
.map(_.name)
val values = body.collect {
case d @ DefDef(name, _, _, _) if name.startsWith("$lessinit$greater$default") =>
Ref(d.symbol).asExpr
val ref = Ref(d.symbol)
params.fold(ref)(ref.appliedToTypes).asExpr
}
names.zip(values).toMap
case None =>
Expand Down
2 changes: 1 addition & 1 deletion tests/shared/src/test/scala/caseapp/CaseAppTests.scala
Original file line number Diff line number Diff line change
Expand Up @@ -635,7 +635,7 @@ object CaseAppTests extends TestSuite {

val expectedRes =
Right(
(GenericArgs("v1", SharedOptions("v2")), RemainingArgs(List(), List()))
(GenericArgs("v1", SharedOptions("v2"), ""), RemainingArgs(List(), List()))
)
assert(res == expectedRes)
}
Expand Down
3 changes: 2 additions & 1 deletion tests/shared/src/test/scala/caseapp/demo/Demo.scala
Original file line number Diff line number Diff line change
Expand Up @@ -121,5 +121,6 @@ object ManualSubCommandStuff {

case class GenericArgs[Shared](
main: String,
@Recurse() shared: Shared
@Recurse() shared: Shared,
opt: String = ""
)

0 comments on commit 27ff11a

Please sign in to comment.