Skip to content

Commit 401b902

Browse files
Cross-compile config module
1 parent c8f3156 commit 401b902

File tree

6 files changed

+43
-10
lines changed

6 files changed

+43
-10
lines changed

build.sc

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ object cli extends Cli
4242

4343
object `cli-options` extends CliOptions
4444
object `build-macros` extends BuildMacros
45-
object config extends Config
45+
object config extends Cross[Config](Scala.all: _*)
4646
object options extends Options
4747
object scalaparse extends ScalaParse
4848
object directives extends Directives
@@ -437,16 +437,27 @@ trait Directives extends ScalaCliSbtModule with ScalaCliPublishModule with HasTe
437437
}
438438
}
439439

440-
trait Config extends ScalaCliSbtModule
440+
class Config(val crossScalaVersion: String) extends ScalaCliCrossSbtModule
441441
with ScalaCliPublishModule
442442
with ScalaCliScalafixModule {
443-
def scalaVersion = Scala.defaultInternal
444-
def ivyDeps = super.ivyDeps() ++ Agg(
445-
Deps.jsoniterCore
446-
)
443+
def ivyDeps = {
444+
val maybeCollectionCompat =
445+
if (crossScalaVersion.startsWith("2.12.")) Seq(Deps.collectionCompat)
446+
else Nil
447+
super.ivyDeps() ++ maybeCollectionCompat ++ Agg(
448+
Deps.jsoniterCore
449+
)
450+
}
447451
def compileIvyDeps = super.compileIvyDeps() ++ Agg(
448452
Deps.jsoniterMacros
449453
)
454+
455+
// Disabling Scalafix in 2.13 and 3, so that it doesn't remove
456+
// some compatibility-related imports, that are actually only used
457+
// in Scala 2.12.
458+
def fix(args: String*) =
459+
if (crossScalaVersion.startsWith("2.12.")) super.fix(args: _*)
460+
else T.command(())
450461
}
451462

452463
trait Options extends ScalaCliSbtModule with ScalaCliPublishModule with HasTests
@@ -664,7 +675,7 @@ trait Cli extends SbtModule with ProtoBuildModule with CliLaunchers
664675
def moduleDeps = Seq(
665676
`build-module`,
666677
`cli-options`,
667-
config,
678+
config(Scala.scala3),
668679
`scala3-graal`(Scala.scala3)
669680
)
670681

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package scala.cli.config
2+
3+
private[config] object Util {
4+
5+
implicit class ConfigStringOps(private val s: String) extends AnyVal {
6+
def toBooleanOption: Option[Boolean] =
7+
try Some(s.toBoolean)
8+
catch {
9+
case e: IllegalArgumentException =>
10+
None
11+
}
12+
}
13+
14+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package scala.cli.config
2+
3+
private[config] object Util
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package scala.cli.config
2+
3+
private[config] object Util

modules/config/src/main/scala/scala/cli/config/ConfigDb.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package scala.cli.config
22

3-
import com.github.plokhotnyuk.jsoniter_scala.core.{Key as _, *}
4-
import com.github.plokhotnyuk.jsoniter_scala.macros.*
3+
import com.github.plokhotnyuk.jsoniter_scala.core.{Key => _, _}
4+
import com.github.plokhotnyuk.jsoniter_scala.macros._
55

66
import java.nio.file.attribute.{PosixFilePermission, PosixFilePermissions}
77
import java.nio.file.{Files, Path}
@@ -87,7 +87,7 @@ final class ConfigDb private (
8787
}
8888
(k, serialize(v0))
8989
}
90-
val sortedMap: Map[String, RawJson] = ListMap.from(keyValues)
90+
val sortedMap: Map[String, RawJson] = ListMap.empty ++ keyValues
9191
writeToArray(sortedMap)(ConfigDb.codec)
9292
}
9393

modules/config/src/main/scala/scala/cli/config/Key.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package scala.cli.config
33
import com.github.plokhotnyuk.jsoniter_scala.core._
44
import com.github.plokhotnyuk.jsoniter_scala.macros._
55

6+
import scala.cli.config.Util._
7+
68
/** A configuration key
79
*/
810
sealed abstract class Key[T] {

0 commit comments

Comments
 (0)