From 5ce2e347103fd826342d78727bacaf64243c28b8 Mon Sep 17 00:00:00 2001 From: Lukasz Stefaniak Date: Tue, 29 Mar 2016 18:11:29 +0200 Subject: [PATCH 1/5] Add coveragePluginVersion key Make it easier to change version of scalac-scoverage-plugin dependency --- src/main/scala/scoverage/ScoverageKeys.scala | 1 + src/main/scala/scoverage/ScoverageSbtPlugin.scala | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/scala/scoverage/ScoverageKeys.scala b/src/main/scala/scoverage/ScoverageKeys.scala index 71466182..349ab60f 100644 --- a/src/main/scala/scoverage/ScoverageKeys.scala +++ b/src/main/scala/scoverage/ScoverageKeys.scala @@ -17,4 +17,5 @@ object ScoverageKeys { lazy val coverageOutputDebug = settingKey[Boolean]("turn on the debug report") lazy val coverageCleanSubprojectFiles = settingKey[Boolean]("removes subproject data after an aggregation") lazy val coverageOutputTeamCity = settingKey[Boolean]("turn on teamcity reporting") + lazy val coveragePluginVersion = settingKey[String]("version of scalac-scoverage-plugin to use") } diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index b0e6feea..aa08ac64 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -40,7 +40,8 @@ object ScoverageSbtPlugin extends AutoPlugin { coverageOutputCobertura := true, coverageOutputDebug := false, coverageCleanSubprojectFiles := true, - coverageOutputTeamCity := false + coverageOutputTeamCity := false, + coveragePluginVersion := DefaultScoverageVersion ) /** From b91fcc8a11804291308d70a9da376f234151ce81 Mon Sep 17 00:00:00 2001 From: Lukasz Stefaniak Date: Tue, 29 Mar 2016 18:12:35 +0200 Subject: [PATCH 2/5] Make libraryDependencies depend on coverageEnabled value --- .../scala/scoverage/ScoverageSbtPlugin.scala | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index aa08ac64..f9c78012 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -41,7 +41,14 @@ object ScoverageSbtPlugin extends AutoPlugin { coverageOutputDebug := false, coverageCleanSubprojectFiles := true, coverageOutputTeamCity := false, - coveragePluginVersion := DefaultScoverageVersion + coveragePluginVersion := DefaultScoverageVersion, + libraryDependencies <<= (libraryDependencies, coverageEnabled, scalaBinaryVersion, coveragePluginVersion) { + (deps, enabled, binaryVersion, pluginVersion) => + if (enabled) deps ++ Seq( + OrgScoverage % (ScalacRuntimeArtifact + "_" + binaryVersion) % pluginVersion % "provided" intransitive(), + OrgScoverage % (ScalacPluginArtifact + "_" + binaryVersion) % pluginVersion % "provided" intransitive() + ) else deps + } ) /** @@ -52,13 +59,7 @@ object ScoverageSbtPlugin extends AutoPlugin { val extracted = Project.extract(state) val newSettings = extracted.structure.allProjectRefs flatMap { proj => Seq( - coverageEnabled in proj := status, - libraryDependencies in proj ++= { - if (status) Seq( - OrgScoverage % (ScalacRuntimeArtifact + "_" + scalaBinaryVersion.value) % DefaultScoverageVersion % "provided" intransitive(), - OrgScoverage % (ScalacPluginArtifact + "_" + scalaBinaryVersion.value) % DefaultScoverageVersion % "provided" intransitive() - ) else Nil - } + coverageEnabled in proj := status ) } extracted.append(newSettings, state) From 9bc108c1d2bf0d0428c5d7312bfabbd83bab9f51 Mon Sep 17 00:00:00 2001 From: Lukasz Stefaniak Date: Tue, 29 Mar 2016 19:03:14 +0200 Subject: [PATCH 3/5] Add scalacOptions for scoverage only if coverageEnabled --- .../scala/scoverage/ScoverageSbtPlugin.scala | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index f9c78012..f4036580 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -120,16 +120,21 @@ object ScoverageSbtPlugin extends AutoPlugin { } private lazy val scoverageScalacOptions = Def.task { - val scoverageDeps: Seq[File] = update.value matching configurationFilter("provided") - scoverageDeps.find(_.getAbsolutePath.contains(ScalacPluginArtifact)) match { - case None => throw new Exception(s"Fatal: $ScalacPluginArtifact not in libraryDependencies") - case Some(pluginPath) => - scalaArgs(coverageEnabled.value, - pluginPath, - crossTarget.value, - coverageExcludedPackages.value, - coverageExcludedFiles.value, - coverageHighlighting.value) + val isEnabled = coverageEnabled.value + if (isEnabled) { + val scoverageDeps: Seq[File] = update.value matching configurationFilter("provided") + scoverageDeps.find(_.getAbsolutePath.contains(ScalacPluginArtifact)) match { + case None => throw new Exception(s"Fatal: $ScalacPluginArtifact not in libraryDependencies") + case Some(pluginPath) => + scalaArgs(coverageEnabled.value, + pluginPath, + crossTarget.value, + coverageExcludedPackages.value, + coverageExcludedFiles.value, + coverageHighlighting.value) + } + } else { + Seq() } } From 3c738d2500883a2661f18661ac499707e70d487e Mon Sep 17 00:00:00 2001 From: Lukasz Stefaniak Date: Tue, 29 Mar 2016 19:17:55 +0200 Subject: [PATCH 4/5] scalac-scoverage-plugin should be in compile scope only --- src/main/scala/scoverage/ScoverageSbtPlugin.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index f4036580..c72093d0 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -46,7 +46,7 @@ object ScoverageSbtPlugin extends AutoPlugin { (deps, enabled, binaryVersion, pluginVersion) => if (enabled) deps ++ Seq( OrgScoverage % (ScalacRuntimeArtifact + "_" + binaryVersion) % pluginVersion % "provided" intransitive(), - OrgScoverage % (ScalacPluginArtifact + "_" + binaryVersion) % pluginVersion % "provided" intransitive() + OrgScoverage % (ScalacPluginArtifact + "_" + binaryVersion % pluginVersion % "compile" intransitive() ) else deps } ) @@ -122,7 +122,7 @@ object ScoverageSbtPlugin extends AutoPlugin { private lazy val scoverageScalacOptions = Def.task { val isEnabled = coverageEnabled.value if (isEnabled) { - val scoverageDeps: Seq[File] = update.value matching configurationFilter("provided") + val scoverageDeps: Seq[File] = update.value matching configurationFilter("compile") scoverageDeps.find(_.getAbsolutePath.contains(ScalacPluginArtifact)) match { case None => throw new Exception(s"Fatal: $ScalacPluginArtifact not in libraryDependencies") case Some(pluginPath) => From 2c1e7bb979a7a9720841a6222c11e0f18799c65a Mon Sep 17 00:00:00 2001 From: Lukasz Stefaniak Date: Tue, 29 Mar 2016 19:29:11 +0200 Subject: [PATCH 5/5] Add support for scala.js runtime --- src/main/scala/scoverage/ScoverageSbtPlugin.scala | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index c72093d0..9469d33a 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -45,8 +45,8 @@ object ScoverageSbtPlugin extends AutoPlugin { libraryDependencies <<= (libraryDependencies, coverageEnabled, scalaBinaryVersion, coveragePluginVersion) { (deps, enabled, binaryVersion, pluginVersion) => if (enabled) deps ++ Seq( - OrgScoverage % (ScalacRuntimeArtifact + "_" + binaryVersion) % pluginVersion % "provided" intransitive(), - OrgScoverage % (ScalacPluginArtifact + "_" + binaryVersion % pluginVersion % "compile" intransitive() + OrgScoverage % (ScalacRuntimeArtifact + runtimeClassifier(deps, binaryVersion)) % pluginVersion % "provided" intransitive(), + OrgScoverage % (ScalacPluginArtifact + "_" + binaryVersion) % pluginVersion % "compile" intransitive() ) else deps } ) @@ -65,6 +65,14 @@ object ScoverageSbtPlugin extends AutoPlugin { extracted.append(newSettings, state) } + private def runtimeClassifier(deps: Seq[ModuleID], binaryVersion:String): String = { + val sjsClassifier = deps.collectFirst{ + case ModuleID("org.scala-js", "scalajs-library", v, _, _, _, _, _, _, _, _) => v + }.map(_.take(3)).map(sjsVersion => "_sjs" + sjsVersion + "_" + binaryVersion) + + sjsClassifier getOrElse "_" + binaryVersion + } + private lazy val coverageReport0 = Def.task { val target = crossTarget.value val log = streams.value.log @@ -134,7 +142,7 @@ object ScoverageSbtPlugin extends AutoPlugin { coverageHighlighting.value) } } else { - Seq() + Nil } }