Skip to content

Commit 2d9ed19

Browse files
committed
project-builder | Fix splitting scalacOptions, allow for coma seperated values
1 parent 25d09ad commit 2d9ed19

File tree

4 files changed

+28
-3
lines changed

4 files changed

+28
-3
lines changed

project-builder/mill/MillCommunityBuild.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ object MillCommunityBuild {
114114
private def parse(propName: String): List[String] =
115115
sys.props
116116
.get(propName)
117-
.map(_.split(',').filter(_.nonEmpty).toList)
117+
.map(Scala3CommunityBuild.Utils.splitScalacOptionArgs)
118118
.getOrElse(Nil)
119119
private def isSourceVersion(setting: String): Boolean =
120120
setting.stripPrefix("REQUIRE:")

project-builder/sbt/CommunityBuildPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ object CommunityBuildPlugin extends AutoPlugin {
204204
keyTransformCommand("mapScalacOptions", Keys.scalacOptions) {
205205
(args, extracted) => (scope: Scope, currentScalacOptions: Seq[String]) =>
206206
val scalaVersion = extracted.get(scope / Keys.scalaVersion)
207-
val safeArgs = args.map(_.split(",").toList.filter(_.nonEmpty))
207+
val safeArgs = args.map(Scala3CommunityBuild.Utils.splitScalacOptionArgs)
208208
val append = safeArgs.lift(0).getOrElse(Nil)
209209
lazy val (appendScala3Exclusive, appendScala3Inclusive) =
210210
append.partition { opt =>

project-builder/scala-cli/build.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import os.CommandResult
3939
scalaVersion = scalaVersion,
4040
repositoryDir = repositoryDir,
4141
mavenRepoURL = Option(mavenRepoURL).filterNot(_.isEmpty),
42-
extraScalacOptions = extraScalacOptions.split(",").toList.map {
42+
extraScalacOptions = Scala3CommunityBuild.Utils.splitScalacOptionArgs(extraScalacOptions).map {
4343
case s"REQUIRE:$opt" => opt
4444
case opt => opt
4545
}

project-builder/shared/CommunityBuildCore.scala

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,31 @@ object Scala3CommunityBuild {
410410
"Scala2Compat"
411411
)
412412
val ignoredScalacOptions = invalidLanguageOptions.map(v => s"-language:$v")
413+
414+
/** Split by comma only when the remainder starts a new option (-, !, REQUIRE:, MATCH:), so e.g. "-opt-inline:**,!java.**" stays one token. */
415+
def splitScalacOptionArgs(s: String): List[String] = {
416+
val trimmed = s.trim
417+
if (trimmed.isEmpty) return Nil
418+
val result = List.newBuilder[String]
419+
var start = 0
420+
var i = 0
421+
while (i < trimmed.length) {
422+
if (trimmed(i) == ',') {
423+
val afterComma = trimmed.substring(i + 1).trim
424+
if (
425+
afterComma.startsWith("-") || afterComma.startsWith("!") ||
426+
afterComma.startsWith("REQUIRE:") || afterComma.startsWith("MATCH:")
427+
) {
428+
result += trimmed.substring(start, i).trim
429+
start = i + 1
430+
}
431+
}
432+
i += 1
433+
}
434+
result += trimmed.substring(start).trim
435+
result.result().filter(_.nonEmpty)
436+
}
437+
413438
def mapScalacOptions(
414439
scalaVersion: Option[String],
415440
current: Seq[String],

0 commit comments

Comments
 (0)