@@ -21,6 +21,7 @@ import util.Spans.Span
2121import  localopt .StringInterpolatorOpt 
2222import  inlines .Inlines 
2323import  scala .util .matching .Regex 
24+ import  java .util .regex .Pattern 
2425
2526/**  Implements code coverage by inserting calls to scala.runtime.coverage.Invoker
2627  * ("instruments" the source code). 
@@ -43,6 +44,9 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
4344  //  stores all instrumented statements
4445  private  val  coverage  =  Coverage ()
4546
47+   private  var  coverageExcludeClasslikePatterns :  List [Pattern ] =  Nil 
48+   private  var  coverageExcludeFilePatterns :  List [Pattern ] =  Nil 
49+ 
4650  override  def  run (using  ctx : Context ):  Unit  = 
4751    val  outputPath  =  ctx.settings.coverageOutputDir.value
4852
@@ -56,19 +60,21 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
5660        .filter(_.nn.getName.nn.startsWith(" scoverage" 
5761        .foreach(_.nn.delete())
5862    end if 
63+ 
64+     coverageExcludeClasslikePatterns =  ctx.settings.coverageExcludeClasslikes.value.map(_.r.pattern)
65+     coverageExcludeFilePatterns =  ctx.settings.coverageExcludeFiles.value.map(_.r.pattern)
66+ 
5967    super .run
6068
6169    Serializer .serialize(coverage, outputPath, ctx.settings.sourceroot.value)
6270
6371  private  def  isClassIncluded (sym : Symbol )(using  Context ):  Boolean  = 
64-     val  excludedClassNamePatterns  =  ctx.settings.coverageExcludeClasslikes.value.map(_.r.pattern)
65-     excludedClassNamePatterns.isEmpty ||  ! excludedClassNamePatterns.exists(
72+     coverageExcludeClasslikePatterns.isEmpty ||  ! coverageExcludeClasslikePatterns.exists(
6673      _.matcher(sym.fullName.toText(ctx.printerFn(ctx)).show).nn.matches
6774    )
6875
6976  private  def  isFileIncluded (file : SourceFile )(using  Context ):  Boolean  = 
70-     val  excludedFilePatterns  =  ctx.settings.coverageExcludeFiles.value.map(_.r.pattern)
71-     excludedFilePatterns.isEmpty ||  ! excludedFilePatterns.exists(
77+     coverageExcludeFilePatterns.isEmpty ||  ! coverageExcludeFilePatterns.exists(
7278      _.matcher(file.path.replace(" .scala" " " 
7379    )
7480
@@ -283,14 +289,14 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
283289            transformDefDef(tree)
284290
285291          case  tree : PackageDef  => 
286-             if  ( isFileIncluded(tree.srcPos.sourcePos.source) &&  isClassIncluded(tree.symbol)) 
292+             if  isFileIncluded(tree.srcPos.sourcePos.source) &&  isClassIncluded(tree.symbol)  then 
287293              //  only transform the statements of the package
288294              cpy.PackageDef (tree)(tree.pid, transform(tree.stats))
289295            else 
290296              tree
291297
292298          case  tree : TypeDef  => 
293-             if  ( isFileIncluded(tree.srcPos.sourcePos.source) &&  isClassIncluded(tree.symbol)) 
299+             if  isFileIncluded(tree.srcPos.sourcePos.source) &&  isClassIncluded(tree.symbol)  then 
294300              super .transform(tree)
295301            else 
296302              tree
0 commit comments