Closed
Description
Minimized example
Macro.scala
import scala.quoted._
inline def sum(args: Int*): Unit = ${ sumExpr('args) }
def sumExpr(argsExpr: Expr[Seq[Int]])(using QuoteContext): Expr[Unit] = argsExpr match
case Varargs(argVarargs) => println(s"Matched varargs: $argVarargs"); Expr.unitExpr
case foo => println(s"Matched something else: $foo"); Expr.unitExpr
Test.scala
@main def Test =
println(sum(1, 2, 3))
Output:
Matched something else: '{ ... }
Expected
Matched varargs: ...
Notice that the following meets expectations:
Macro.scala
import scala.quoted._
inline def sum(args: Int*): Unit = ${ sumExpr('args) }
def sumExpr(argsExpr: Expr[Seq[Int]])(using QuoteContext): Expr[Unit] = argsExpr match
case '{${Varargs(argVarargs)}} => println(s"Matched varargs: $argVarargs"); Expr.unitExpr
case foo => println(s"Matched something else: $foo"); Expr.unitExpr
However, it produces a warning:
-- Warning: /Users/kmetiuk/Projects/scala3/pg/release/macro/issue/Macro.scala:4:7
4 | case '{${Varargs(argVarargs)}} => println(s"Matched varargs: $argVarargs"); Expr.unitExpr
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|Canceled splice directly inside a quote. '{ ${ XYZ } } is equivalent to XYZ.
1 warning found