@@ -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" , " " )).nn.matches
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