Description
Compiler version
3.2.0-RC1
If you're not sure what version you're using, run print scalaVersion
from sbt
(if you're running scalac manually, use scalac -version
instead).
Minimized code
Macro.scala
package excludeme
import scala.quoted.*
object Macro {
inline def toUpperS(s: String): String = ${ Macro.toUpperSImpl('s) }
def toUpperSImpl(s: Expr[String])(using q: Quotes): Expr[String] = '{ ($s.toUpperCase) } // will add coverage info
}
Main.scala
import excludeme.*
@main def main: Unit =
println(Macro.toUpperS("test"))
Minimized code (using third party library)
Keeping this for the sake of history how it was originally reported.
import io.circe.*
import io.circe.generic.semiauto.*
import io.circe.syntax.*
implicit val basicCodec: Codec[Tuple1[String]] = deriveCodec[Tuple1[String]]
@main def main: Unit =
println(Tuple1("value").asJson.noSpaces)
Full project is here https://github.com/arixmkii/macro_cov_3.2.0-RC1
I will think about a better minimal example, because circe-generic
is a heavy one. May be with 2 source files and using one with macro as pre-compiled class.
Output
scoverage.coverage
file contains records of
modules/core/shared/src/main/scala-3/io/circe/Derivation.scala
Expectation
No coverage data for third party libraries as source might not be provided for them.
Originally posted here scoverage/scalac-scoverage-plugin#474 I think that workarounds could be added to report generation to handle such cases (probably giving out a warning by default), but I'm not sure if this is the right approach for dealing with macros from referenced libraries.