@@ -21,6 +21,7 @@ import util.Spans.Span
21
21
import localopt .StringInterpolatorOpt
22
22
import inlines .Inlines
23
23
import scala .util .matching .Regex
24
+ import java .util .regex .Pattern
24
25
25
26
/** Implements code coverage by inserting calls to scala.runtime.coverage.Invoker
26
27
* ("instruments" the source code).
@@ -43,6 +44,9 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
43
44
// stores all instrumented statements
44
45
private val coverage = Coverage ()
45
46
47
+ private var coverageExcludeClasslikePatterns : List [Pattern ] = Nil
48
+ private var coverageExcludeFilePatterns : List [Pattern ] = Nil
49
+
46
50
override def run (using ctx : Context ): Unit =
47
51
val outputPath = ctx.settings.coverageOutputDir.value
48
52
@@ -56,19 +60,21 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
56
60
.filter(_.nn.getName.nn.startsWith(" scoverage" ))
57
61
.foreach(_.nn.delete())
58
62
end if
63
+
64
+ coverageExcludeClasslikePatterns = ctx.settings.coverageExcludeClasslikes.value.map(_.r.pattern)
65
+ coverageExcludeFilePatterns = ctx.settings.coverageExcludeFiles.value.map(_.r.pattern)
66
+
59
67
super .run
60
68
61
69
Serializer .serialize(coverage, outputPath, ctx.settings.sourceroot.value)
62
70
63
71
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(
66
73
_.matcher(sym.fullName.toText(ctx.printerFn(ctx)).show).nn.matches
67
74
)
68
75
69
76
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(
72
78
_.matcher(file.path.replace(" .scala" , " " )).nn.matches
73
79
)
74
80
@@ -283,14 +289,14 @@ class InstrumentCoverage extends MacroTransform with IdentityDenotTransformer:
283
289
transformDefDef(tree)
284
290
285
291
case tree : PackageDef =>
286
- if ( isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol))
292
+ if isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol) then
287
293
// only transform the statements of the package
288
294
cpy.PackageDef (tree)(tree.pid, transform(tree.stats))
289
295
else
290
296
tree
291
297
292
298
case tree : TypeDef =>
293
- if ( isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol))
299
+ if isFileIncluded(tree.srcPos.sourcePos.source) && isClassIncluded(tree.symbol) then
294
300
super .transform(tree)
295
301
else
296
302
tree
0 commit comments