Skip to content

Commit e936d1c

Browse files
yadavan88Gedochao
andauthored
BugFix - Export issues when full scala version is not used in directives (#3032)
* Fixed resolving scala version when only major/minor part is provided in directives * Added tests for export with different scala versions * Fixed issue with export using the scala version resolved from BuildOptions as per review * scalafmt ran * Update modules/integration/src/test/scala/scala/cli/integration/ExportCommonTestDefinitions.scala Co-authored-by: Piotr Chabelski <[email protected]> * Update modules/cli/src/main/scala/scala/cli/exportCmd/MillProjectDescriptor.scala Co-authored-by: Piotr Chabelski <[email protected]> * Update modules/cli/src/main/scala/scala/cli/exportCmd/SbtProjectDescriptor.scala Co-authored-by: Piotr Chabelski <[email protected]> * Update modules/integration/src/test/scala/scala/cli/integration/ExportTestProjects.scala Co-authored-by: Piotr Chabelski <[email protected]> * fixed errors after review comments --------- Co-authored-by: Piotr Chabelski <[email protected]>
1 parent e1c5c9c commit e936d1c

File tree

5 files changed

+37
-6
lines changed

5 files changed

+37
-6
lines changed

modules/cli/src/main/scala/scala/cli/exportCmd/MillProjectDescriptor.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ final case class MillProjectDescriptor(
3838
options.classPathOptions.allExtraDependencies.toSeq
3939
.forall(_.value.nameAttributes == NoAttributes)
4040

41-
val sv = options.scalaOptions.scalaVersion
42-
.flatMap(_.versionOpt) // FIXME If versionOpt is empty, the project is pure Java
43-
.getOrElse(ScalaCli.getDefaultScalaVersion)
41+
val sv = options.scalaParams.toOption.flatten.map(_.scalaVersion).getOrElse(
42+
ScalaCli.getDefaultScalaVersion // FIXME account for pure Java projects, where Scala version isn't defined
43+
)
4444

4545
if (pureJava)
4646
MillProject()

modules/cli/src/main/scala/scala/cli/exportCmd/SbtProjectDescriptor.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,11 @@ final case class SbtProjectDescriptor(
121121
private def scalaVersionSettings(options: BuildOptions): SbtProject = {
122122

123123
val scalaVerSetting = {
124-
val sv = options.scalaOptions.scalaVersion
125-
.flatMap(_.versionOpt) // FIXME If versionOpt is empty, the project is pure Java
126-
.getOrElse(ScalaCli.getDefaultScalaVersion)
124+
125+
val sv = options.scalaParams.toOption.flatten.map(_.scalaVersion).getOrElse(
126+
ScalaCli.getDefaultScalaVersion // FIXME account for pure Java projects, where Scala version isn't defined
127+
)
128+
127129
s"""scalaVersion := "$sv""""
128130
}
129131

modules/integration/src/test/scala/scala/cli/integration/ExportCommonTestDefinitions.scala

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ trait ExportCommonTestDefinitions { _: ScalaCliSuite & TestScalaVersionArgs =>
6161
expect(output.contains("Hello"))
6262
}
6363

64+
protected def scalaVersionTest(scalaVersion: String): Unit =
65+
prepareTestInputs(ExportTestProjects.scalaVersionTest(scalaVersion)).fromRoot {
66+
root =>
67+
exportCommand(".").call(cwd = root, stdout = os.Inherit)
68+
val res = buildToolCommand(root, runMainArgs*)
69+
.call(cwd = root / outputDir)
70+
val output = res.out.text(Charset.defaultCharset())
71+
expect(output.contains("Hello"))
72+
}
73+
6474
def extraSourceFromDirectiveWithExtraDependency(inputs: String*): Unit =
6575
prepareTestInputs(
6676
ExportTestProjects.extraSourceFromDirectiveWithExtraDependency(actualScalaVersion)
@@ -86,6 +96,8 @@ trait ExportCommonTestDefinitions { _: ScalaCliSuite & TestScalaVersionArgs =>
8696
}
8797
}
8898

99+
private val scalaVersionsInDir: Seq[String] = Seq("2.12", "2.13", "2", "3", "3.lts")
100+
89101
if (runExportTests) {
90102
test("compile-time only for jsoniter macros") {
91103
compileOnlyTest()
@@ -105,5 +117,11 @@ trait ExportCommonTestDefinitions { _: ScalaCliSuite & TestScalaVersionArgs =>
105117
test("extra source passed both via directive and from command line") {
106118
extraSourceFromDirectiveWithExtraDependency(".")
107119
}
120+
scalaVersionsInDir.foreach { scalaV =>
121+
test(s"check export for project with scala version in directive as $scalaV") {
122+
scalaVersionTest(scalaV)
123+
}
124+
}
125+
108126
}
109127
}

modules/integration/src/test/scala/scala/cli/integration/ExportTestProjects.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,4 +314,14 @@ object ExportTestProjects {
314314
|}
315315
|""".stripMargin
316316
)
317+
318+
def scalaVersionTest(scalaVersion: String): TestInputs =
319+
TestInputs(
320+
os.rel / "Hello.scala" ->
321+
s"""//> using scala $scalaVersion
322+
|object Main extends App {
323+
| println("Hello")
324+
|}
325+
|""".stripMargin
326+
)
317327
}

modules/options/src/main/scala/scala/build/options/ScalaOptions.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package scala.build.options
33
import dependency.AnyDependency
44

55
import scala.build.Positioned
6+
import scala.build.internal.Constants
67

78
final case class ScalaOptions(
89
scalaVersion: Option[MaybeScalaVersion] = None,

0 commit comments

Comments
 (0)