From 7d1efcf3ed509b1f36867d830ab6ccb482e8f0c2 Mon Sep 17 00:00:00 2001 From: Gerald Nelson <5158870+Nergy-TCGeneric@users.noreply.github.com> Date: Thu, 8 May 2025 17:45:41 +0900 Subject: [PATCH] fix: Accept multiple phases instead of one - #164 opened up the possibility of configurable phase control - But sometimes, one may need to use more phases than one - Now accepts multiple phases delimited by ; - This is for making it consistent along other options --- .../scala/scoverage/ScoverageOptions.scala | 18 +++++++++++------- .../main/scala/scoverage/ScoveragePlugin.scala | 8 ++++---- .../scala/scoverage/ScoverageOptionsTest.scala | 4 ++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/plugin/src/main/scala/scoverage/ScoverageOptions.scala b/plugin/src/main/scala/scoverage/ScoverageOptions.scala index 6519c3a2..6cf2016c 100644 --- a/plugin/src/main/scala/scoverage/ScoverageOptions.scala +++ b/plugin/src/main/scala/scoverage/ScoverageOptions.scala @@ -27,8 +27,8 @@ object ScoverageOptions { "-P:scoverage:excludedPackages:; semicolon separated list of regexs for packages to exclude", "-P:scoverage:excludedFiles:; semicolon separated list of regexs for paths to exclude", "-P:scoverage:excludedSymbols:; semicolon separated list of regexs for symbols to exclude", - "-P:scoverage:extraAfterPhase: phase after which scoverage phase runs (must be after typer phase)", - "-P:scoverage:extraBeforePhase: phase before which scoverage phase runs (must be before patmat phase)", + "-P:scoverage:extraAfterPhase:; phase after which scoverage phase runs (must be after typer phase)", + "-P:scoverage:extraBeforePhase:; phase before which scoverage phase runs (must be before patmat phase)", " Any classes whose fully qualified name matches the regex will", " be excluded from coverage." ).mkString("\n") @@ -72,12 +72,16 @@ object ScoverageOptions { def processPhaseOptions( opts: List[String] - ): (Option[String], Option[String]) = { + ): (Option[List[String]], Option[List[String]]) = { - val afterPhase: Option[String] = - opts.collectFirst { case ExtraAfterPhase(phase) => phase } - val beforePhase: Option[String] = - opts.collectFirst { case ExtraBeforePhase(phase) => phase } + val afterPhase: Option[List[String]] = + opts.collectFirst { case ExtraAfterPhase(phase) => + phase.split(";").toList + } + val beforePhase: Option[List[String]] = + opts.collectFirst { case ExtraBeforePhase(phase) => + phase.split(";").toList + } (afterPhase, beforePhase) } diff --git a/plugin/src/main/scala/scoverage/ScoveragePlugin.scala b/plugin/src/main/scala/scoverage/ScoveragePlugin.scala index 6a144e9c..c7ee1e66 100644 --- a/plugin/src/main/scala/scoverage/ScoveragePlugin.scala +++ b/plugin/src/main/scala/scoverage/ScoveragePlugin.scala @@ -74,8 +74,8 @@ class ScoveragePlugin(val global: Global) extends Plugin { class ScoverageInstrumentationComponent( val global: Global, - extraAfterPhase: Option[String], - extraBeforePhase: Option[String] + extraAfterPhase: Option[List[String]], + extraBeforePhase: Option[List[String]] ) extends PluginComponent with TypingTransformers with Transform { @@ -87,9 +87,9 @@ class ScoverageInstrumentationComponent( override val phaseName: String = ScoveragePlugin.phaseName override val runsAfter: List[String] = - List("typer") ::: extraAfterPhase.toList + List("typer") ::: extraAfterPhase.getOrElse(Nil) override val runsBefore: List[String] = - List("patmat") ::: extraBeforePhase.toList + List("patmat") ::: extraBeforePhase.getOrElse(Nil) /** Our options are not provided at construction time, but shortly after, * so they start as None. diff --git a/plugin/src/test/scala/scoverage/ScoverageOptionsTest.scala b/plugin/src/test/scala/scoverage/ScoverageOptionsTest.scala index 4367a2e4..e7748dcc 100644 --- a/plugin/src/test/scala/scoverage/ScoverageOptionsTest.scala +++ b/plugin/src/test/scala/scoverage/ScoverageOptionsTest.scala @@ -11,8 +11,8 @@ class ScoverageOptionsTest extends FunSuite { "excludedPackages:some.package;another.package*", "excludedFiles:*.proto;iHateThisFile.scala", "excludedSymbols:someSymbol;anotherSymbol;aThirdSymbol", - "extraAfterPhase:extarAfter", - "extraBeforePhase:extraBefore", + "extraAfterPhase:extarAfter;extraAfter2", + "extraBeforePhase:extraBefore;extraBefore2", "reportTestName" )