@@ -11,6 +11,7 @@ import scala.tools.nsc.plugins.PluginComponent
1111import scala .tools .nsc .transform .Transform
1212import scala .tools .nsc .transform .TypingTransformers
1313
14+ import buildinfo .BuildInfo
1415import scoverage .reporter .IOUtils
1516
1617private [scoverage] object ScoverageCompiler {
@@ -24,9 +25,22 @@ private[scoverage] object ScoverageCompiler {
2425 def classPath : Seq [String ] =
2526 getScalaJars.map(
2627 _.getAbsolutePath
27- ) :+ sbtCompileDir.getAbsolutePath :+ runtimeClasses.getAbsolutePath
28+ ) :+ sbtCompileDir.getAbsolutePath :+ runtimeClasses( " jvm " ) .getAbsolutePath
2829
29- def settings : Settings = {
30+ def jsClassPath : Seq [String ] =
31+ getScalaJsJars.map(
32+ _.getAbsolutePath
33+ ) :+ sbtCompileDir.getAbsolutePath :+ runtimeClasses(" js" ).getAbsolutePath
34+
35+ def settings : Settings = settings(classPath)
36+
37+ def jsSettings : Settings = {
38+ val s = settings(jsClassPath)
39+ s.plugin.value = List (getScalaJsCompilerJar.getAbsolutePath)
40+ s
41+ }
42+
43+ def settings (classPath : Seq [String ]): Settings = {
3044 val s = new scala.tools.nsc.Settings
3145 s.Xprint .value = List (" all" , " _" )
3246 s.deprecation.value = true
@@ -46,6 +60,11 @@ private[scoverage] object ScoverageCompiler {
4660 new ScoverageCompiler (settings, reporter)
4761 }
4862
63+ def defaultJS : ScoverageCompiler = {
64+ val reporter = new scala.tools.nsc.reporters.ConsoleReporter (jsSettings)
65+ new ScoverageCompiler (jsSettings, reporter)
66+ }
67+
4968 def locationCompiler : LocationCompiler = {
5069 val reporter = new scala.tools.nsc.reporters.ConsoleReporter (settings)
5170 new LocationCompiler (settings, reporter)
@@ -56,6 +75,19 @@ private[scoverage] object ScoverageCompiler {
5675 scalaJars.map(findScalaJar)
5776 }
5877
78+ private def getScalaJsJars : List [File ] =
79+ findJar(
80+ " org.scala-js" ,
81+ s " scalajs-library_ $ShortScalaVersion" ,
82+ BuildInfo .scalaJSVersion
83+ ) :: getScalaJars
84+
85+ private def getScalaJsCompilerJar : File = findJar(
86+ " org.scala-js" ,
87+ s " scalajs-compiler_ $ScalaVersion" ,
88+ BuildInfo .scalaJSVersion
89+ )
90+
5991 private def sbtCompileDir : File = {
6092 val dir = new File (
6193 s " ./plugin/target/scala- $ScalaVersion/classes "
@@ -67,20 +99,28 @@ private[scoverage] object ScoverageCompiler {
6799 dir
68100 }
69101
70- private def runtimeClasses : File = new File (
71- s " ./runtime/jvm /target/scala- $ScalaVersion/classes "
102+ private def runtimeClasses ( platform : String ) : File = new File (
103+ s " ./runtime/ $platform /target/scala- $ScalaVersion/classes "
72104 )
73105
74106 private def findScalaJar (artifactId : String ): File =
75- findIvyJar(" org.scala-lang" , artifactId, ScalaVersion )
76- .orElse(findCoursierJar(artifactId, ScalaVersion ))
107+ findJar(" org.scala-lang" , artifactId, ScalaVersion )
108+
109+ private def findJar (
110+ groupId : String ,
111+ artifactId : String ,
112+ version : String
113+ ): File =
114+ findIvyJar(groupId, artifactId, version)
115+ .orElse(findCoursierJar(groupId, artifactId, version))
77116 .getOrElse {
78117 throw new FileNotFoundException (
79- s " Could not locate $artifactId/ $ScalaVersion "
118+ s " Could not locate $groupId : $ artifactId: $version "
80119 )
81120 }
82121
83122 private def findCoursierJar (
123+ groupId : String ,
84124 artifactId : String ,
85125 version : String
86126 ): Option [File ] = {
@@ -89,9 +129,10 @@ private[scoverage] object ScoverageCompiler {
89129 " .cache/coursier" , // Linux
90130 " Library/Caches/Coursier" , // MacOSX
91131 " AppData/Local/Coursier/cache" // Windows
92- ).map(loc =>
93- s " $userHome/ $loc/v1/https/repo1.maven.org/maven2/org/scala-lang/ $artifactId/ $version/ $artifactId- $version.jar "
94- )
132+ ).map { loc =>
133+ val gid = groupId.replace('.' , '/' )
134+ s " $userHome/ $loc/v1/https/repo1.maven.org/maven2/ $gid/ $artifactId/ $version/ $artifactId- $version.jar "
135+ }
95136 jarPaths.map(new File (_)).find(_.exists())
96137 }
97138
0 commit comments