Skip to content

Error in docs of Varargs extractor #8540

Closed
@anatoliykmetyuk

Description

@anatoliykmetyuk

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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions