Skip to content

Scala.js module kinds are not being generated by sbt-bloop with Scala.js 1.x #1309

Open
@MaximeKjaer

Description

@MaximeKjaer

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:

def findOutScalaJsModuleKind: Def.Initialize[Option[String]] = Def.settingDyn {
try {
val stageClass = Class.forName("core.tools.linker.backend.ModuleKind")
val stageSetting = proxyForSetting("scalaJSModuleKind", stageClass)
Def.setting {
stageSetting.value.toString match {
case "Some(NoModule)" => Some(NoJSModule)
case "Some(CommonJSModule)" => Some(CommonJSModule)
case _ => None
}
}
} catch {
case _: ClassNotFoundException => Def.setting(None)
}
}

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Scala.jsbugA defect or misbehaviour.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions