1
1
package scoverage
2
2
3
- import sbt .Keys ._
4
3
import sbt ._
5
- import scoverage .report .{ScoverageHtmlWriter , ScoverageXmlWriter , CoberturaXmlWriter }
4
+ import sbt .Keys ._
5
+ import scoverage .report ._
6
6
7
7
object ScoverageSbtPlugin extends ScoverageSbtPlugin
8
8
9
9
class ScoverageSbtPlugin extends sbt.Plugin {
10
10
11
11
val OrgScoverage = " org.scoverage"
12
- val ArtifactId = " scalac-scoverage-plugin"
12
+ val ScalacArtifact = " scalac-scoverage-plugin"
13
13
val ScoverageVersion = " 0.99.7"
14
14
15
15
object ScoverageKeys {
16
16
val excludedPackages = SettingKey [String ](" scoverage-excluded-packages" )
17
17
val minimumCoverage = SettingKey [Double ](" scoverage-minimum-coverage" )
18
18
val failOnMinimumCoverage = SettingKey [Boolean ](" scoverage-fail-on-minimum-coverage" )
19
- val highlighting = settingKey [Boolean ](" enables range positioning for highlighting" )
19
+ val highlighting = SettingKey [Boolean ](" scoverage-highlighting " , " enables range positioning for highlighting" )
20
20
}
21
21
22
22
import ScoverageKeys ._
23
23
24
- lazy val Scoverage : Configuration = config(" scoverage" ) extend Compile
24
+ lazy val Scoverage : Configuration = config(" scoverage" )
25
25
lazy val ScoverageTest : Configuration = config(" scoverage-test" ) extend Scoverage
26
26
27
27
lazy val instrumentSettings : Seq [Setting [_]] = {
@@ -30,7 +30,7 @@ class ScoverageSbtPlugin extends sbt.Plugin {
30
30
Seq (
31
31
ivyConfigurations ++= Seq (Scoverage .hide, ScoverageTest .hide),
32
32
libraryDependencies += {
33
- OrgScoverage % (ArtifactId + " _" + scalaBinaryVersion.value) % ScoverageVersion % Scoverage .name
33
+ OrgScoverage % (ScalacArtifact + " _" + scalaBinaryVersion.value) % ScoverageVersion % Scoverage .name
34
34
},
35
35
sources in Scoverage := (sources in Compile ).value,
36
36
sourceDirectory in Scoverage := (sourceDirectory in Compile ).value,
@@ -44,15 +44,15 @@ class ScoverageSbtPlugin extends sbt.Plugin {
44
44
highlighting := false ,
45
45
excludedPackages in Scoverage := " " ,
46
46
47
- scalacOptions in Scoverage := {
48
- val target = crossTarget.value
49
- val scoverageDeps = update.value matching configurationFilter(Scoverage .name)
50
- scoverageDeps.find(_.getAbsolutePath.contains(ArtifactId )) match {
51
- case None => throw new Exception (s " Fatal: $ArtifactId not in libraryDependencies " )
47
+ scalacOptions in Scoverage <++= (crossTarget in Compile , update, excludedPackages in Scoverage ) map {
48
+ (target, report, excluded) =>
49
+ val scoverageDeps = report matching configurationFilter(Scoverage .name)
50
+ scoverageDeps.find(_.getAbsolutePath.contains(ScalacArtifact )) match {
51
+ case None => throw new Exception (s " Fatal: $ScalacArtifact not in libraryDependencies " )
52
52
case Some (classpath) =>
53
53
Seq (
54
54
" -Xplugin:" + classpath.getAbsolutePath,
55
- " -P:scoverage:excludedPackages:" + Option ((excludedPackages in Scoverage ).value ).getOrElse(" " ),
55
+ " -P:scoverage:excludedPackages:" + Option (excluded ).getOrElse(" " ),
56
56
" -P:scoverage:dataDir:" + target.getAbsolutePath + " /scoverage-data"
57
57
)
58
58
}
@@ -74,20 +74,16 @@ class ScoverageSbtPlugin extends sbt.Plugin {
74
74
externalDependencyClasspath in ScoverageTest <<= Classpaths
75
75
.concat(externalDependencyClasspath in ScoverageTest , externalDependencyClasspath in Test ),
76
76
77
- internalDependencyClasspath in Scoverage << = (internalDependencyClasspath in Compile ),
77
+ internalDependencyClasspath in Scoverage : = (internalDependencyClasspath in Compile ).value ,
78
78
internalDependencyClasspath in ScoverageTest <<= (internalDependencyClasspath in Test , internalDependencyClasspath in ScoverageTest , classDirectory in Compile ) map {
79
79
(testDeps, scoverageDeps, oldClassDir) =>
80
80
scoverageDeps ++ testDeps.filter(_.data != oldClassDir)
81
81
},
82
82
83
- testOptions in ScoverageTest <<= (testOptions in Test ),
84
-
85
- // copy the test task into compile so we can do scoverage:test instead of scoverage-test:test
86
- test in Scoverage <<= (test in ScoverageTest ),
87
-
88
- test in Scoverage := {
89
- (test in Scoverage ).value
83
+ testOptions in ScoverageTest := (testOptions in Test ).value,
90
84
85
+ test in ScoverageTest := {
86
+ (test in ScoverageTest ).value
91
87
streams.value.log.info(s " [scoverage] Waiting for measurement data to sync... " )
92
88
Thread .sleep(2000 ) // have noticed some delay in writing, hacky but works
93
89
@@ -107,15 +103,16 @@ class ScoverageSbtPlugin extends sbt.Plugin {
107
103
val measurements = IOUtils .invoked(measurementFiles)
108
104
coverage.apply(measurements)
109
105
110
- streams.value.log.info(s " [scoverage] Generating Cobertura report [ ${coberturaDir.getAbsolutePath}/cobertura.xml] " )
111
- new CoberturaXmlWriter (baseDirectory in Compile value, coberturaDir).write(coverage)
106
+ streams.value.log
107
+ .info(s " [scoverage] Generating Cobertura report [ ${coberturaDir.getAbsolutePath}/cobertura.xml] " )
108
+ new CoberturaXmlWriter ((baseDirectory in Compile ).value, coberturaDir).write(coverage)
112
109
113
110
streams.value.log.info(s " [scoverage] Generating XML report [ ${reportDir.getAbsolutePath}/scoverage.xml] " )
114
- new ScoverageXmlWriter (scalaSource in Compile value, reportDir, false ).write(coverage)
115
- new ScoverageXmlWriter (scalaSource in Compile value, reportDir, true ).write(coverage)
111
+ new ScoverageXmlWriter (( scalaSource in Compile ). value, reportDir, false ).write(coverage)
112
+ new ScoverageXmlWriter (( scalaSource in Compile ). value, reportDir, true ).write(coverage)
116
113
117
114
streams.value.log.info(s " [scoverage] Generating HTML report [ ${reportDir.getAbsolutePath}/index.html] " )
118
- new ScoverageHtmlWriter (scalaSource in Compile value, reportDir).write(coverage)
115
+ new ScoverageHtmlWriter (( scalaSource in Compile ). value, reportDir).write(coverage)
119
116
120
117
streams.value.log.info(" [scoverage] Reports completed" )
121
118
@@ -129,17 +126,22 @@ class ScoverageSbtPlugin extends sbt.Plugin {
129
126
if (is100(min) && is100(coverage.statementCoveragePercent)) {
130
127
streams.value.log.info(s " [scoverage] 100% Coverage ! " )
131
128
} else if (min > coverage.statementCoveragePercent) {
132
- streams.value.log.error(s " [scoverage] Coverage is below minimum [ ${coverage.statementCoverageFormatted}% < $min%] " )
129
+ streams.value.log
130
+ .error(s " [scoverage] Coverage is below minimum [ ${coverage.statementCoverageFormatted}% < $min%] " )
133
131
if (failOnMin)
134
132
throw new RuntimeException (" Coverage minimum was not reached" )
135
133
} else {
136
- streams.value.log.info(s " [scoverage] Coverage is above minimum [ ${coverage.statementCoverageFormatted}% > $min%] " )
134
+ streams.value.log
135
+ .info(s " [scoverage] Coverage is above minimum [ ${coverage.statementCoverageFormatted}% > $min%] " )
137
136
}
138
137
}
139
138
140
139
streams.value.log.info(s " [scoverage] All done. Coverage was [ ${coverage.statementCoverageFormatted}%] " )
141
140
()
142
- }
141
+ },
142
+
143
+ // copy the test task into compile so we can do scoverage:test instead of scoverage-test:test
144
+ test in Scoverage := (test in ScoverageTest ).value
143
145
)
144
146
}
145
147
}
0 commit comments