Scala.js module kinds are not being generated by sbt-bloop with Scala.js 1.x
Bug description
Running sbt bloopInstall on a Scala.js 1.0.1 project generates a Bloop config that has platform.kind set to none, regardless of the module kind in the sbt config.
Reproduction
I created a simple project with a small build.sbt config:
lazy val root = project
.in(file("."))
.enablePlugins(ScalaJSPlugin)
.settings(
scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.CommonJSModule) },
scalaJSUseMainModuleInitializer := true
)
The project/plugins.sbt file adds the Scala.js 1.0.1 sbt plugin:
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.0.1")
Running sbt bloopInstall produces .bloop/root.json with the following platform field:
"platform": {
"name": "js",
"config": {
"version": "1.0.1",
"mode": "debug",
"kind": "none",
"emitSourceMaps": false,
"jsdom": false,
"toolchain": [
]
},
"mainClass": [
]
},
.bloop/root.json
{
"version": "1.4.0",
"project": {
"name": "root",
"directory": "/home/maxime/code/tmp",
"workspaceDir": "/home/maxime/code/tmp",
"sources": [
"/home/maxime/code/tmp/src/main/scala-2.12",
"/home/maxime/code/tmp/src/main/scala",
"/home/maxime/code/tmp/src/main/java",
"/home/maxime/code/tmp/target/scala-2.12/src_managed/main"
],
"dependencies": [
],
"classpath": [
"/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-library.jar",
"/home/maxime/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.12/1.0.1/scalajs-library_2.12-1.0.1.jar"
],
"out": "/home/maxime/code/tmp/.bloop/root",
"classesDir": "/home/maxime/code/tmp/.bloop/root/scala-2.12/classes",
"resources": [
"/home/maxime/code/tmp/src/main/resources",
"/home/maxime/code/tmp/target/scala-2.12/resource_managed/main"
],
"scala": {
"organization": "org.scala-lang",
"name": "scala-compiler",
"version": "2.12.10",
"options": [
"-Xplugin:/home/maxime/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-compiler_2.12.10/1.0.1/scalajs-compiler_2.12.10-1.0.1.jar"
],
"jars": [
"/home/maxime/.sbt/boot/scala-2.12.10/lib/jline.jar",
"/home/maxime/.sbt/boot/scala-2.12.10/lib/jansi.jar",
"/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-xml_2.12.jar",
"/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-reflect.jar",
"/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-library.jar",
"/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-compiler.jar"
],
"analysis": "/home/maxime/code/tmp/target/streams/compile/bloopAnalysisOut/_global/streams/inc_compile_2.12.zip",
"setup": {
"order": "mixed",
"addLibraryToBootClasspath": true,
"addCompilerToClasspath": false,
"addExtraJarsToClasspath": false,
"manageBootClasspath": true,
"filterLibraryFromClasspath": true
}
},
"java": {
"options": [
]
},
"test": {
"frameworks": [
{
"names": [
"org.scalacheck.ScalaCheckFramework"
]
},
{
"names": [
"org.specs2.runner.Specs2Framework",
"org.specs2.runner.SpecsFramework"
]
},
{
"names": [
"org.specs.runner.SpecsFramework"
]
},
{
"names": [
"org.scalatest.tools.Framework",
"org.scalatest.tools.ScalaTestFramework"
]
},
{
"names": [
"com.novocode.junit.JUnitFramework"
]
}
],
"options": {
"excludes": [
],
"arguments": [
]
}
},
"platform": {
"name": "js",
"config": {
"version": "1.0.1",
"mode": "debug",
"kind": "none",
"emitSourceMaps": false,
"jsdom": false,
"toolchain": [
]
},
"mainClass": [
]
},
"resolution": {
"modules": [
{
"organization": "org.scala-lang",
"name": "scala-library",
"version": "2.12.10",
"configurations": "default",
"artifacts": [
{
"name": "scala-library",
"path": "/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-library.jar"
}
]
},
{
"organization": "org.scala-js",
"name": "scalajs-library_2.12",
"version": "1.0.1",
"configurations": "default",
"artifacts": [
{
"name": "scalajs-library_2.12",
"path": "/home/maxime/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-js/scalajs-library_2.12/1.0.1/scalajs-library_2.12-1.0.1.jar"
}
]
},
{
"organization": "org.scala-lang",
"name": "scala-library",
"version": "2.12.10",
"configurations": "optional",
"artifacts": [
{
"name": "scala-library",
"path": "/home/maxime/.sbt/boot/scala-2.12.10/lib/scala-library.jar"
}
]
}
]
},
"tags": [
"library"
]
}
}
Cause
I believe the following function is the root cause for the bug:
https://github.com/scalacenter/bloop/blob/78d5dddd9364ad60bf0fe7bbdf457b26a203fb0e/integrations/sbt-bloop/src/main/scala/bloop/integrations/sbt/SbtBloop.scala#L298-L312
The scalaJSModuleKind setting has been deprecated since Scala.js 1.0.0 in favor of scalaJSLinkerConfig, so the function always returns None when the module kind isn't set in scalaJSModuleKind.
Note that the emitSourceMaps setting is quite likely to be affected by this issue too.