Skip to content

Commit

Permalink
Ensure compiler options passed via the command line and using directi…
Browse files Browse the repository at this point in the history
…ves follow the same order
  • Loading branch information
Gedochao committed Oct 25, 2024
1 parent cae9eeb commit 9454f6e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -101,16 +101,16 @@ object ScalacOptions {
case h :: t
if scalacOptionsPrefixes.exists(h.startsWith) &&
!ScalacDeprecatedOptions.contains(h) =>
Right(Some((Some(h :: acc.getOrElse(Nil)), t)))
Right(Some((Some(acc.getOrElse(Nil) :+ h), t)))
case h :: t if scalacNoArgAliasedOptions.contains(h) =>
Right(Some((Some(h :: acc.getOrElse(Nil)), t)))
Right(Some((Some(acc.getOrElse(Nil) :+ h), t)))
case h :: t if scalacAliasedOptions.contains(h) =>
// check if the next scalac arg is a different option or a param to the current option
val maybeOptionArg = t.headOption.filter(!_.startsWith("-"))
// if it's a param, it'll be treated as such and considered already parsed
val newTail = maybeOptionArg.map(_ => t.drop(1)).getOrElse(t)
val newHead = List(h) ++ maybeOptionArg
Right(Some((Some(newHead ++ acc.getOrElse(Nil)), newTail)))
Right(Some((Some(acc.getOrElse(Nil) ++ newHead), newTail)))
case _ => underlying.step(args, index, acc, formatter)
}
def get(acc: Option[List[String]], formatter: Formatter[Name]): Either[Error, List[String]] =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -515,13 +515,19 @@ class SipScalaTests extends ScalaCliSuite with SbtTestHelper with MillTestHelper
}
}

test("consecutive -Wconf:* flags are not ignored") {
for {
useDirective <- Seq(true, false)
if !Properties.isWin
optionsSource = if (useDirective) "using directive" else "command line"
} test(s"consecutive -Wconf:* flags are not ignored (passed via $optionsSource)") {
val sv = "3.5.2"
val sourceFileName = "example.scala"
val warningConfOptions = Seq("-Wconf:cat=deprecation:e", "-Wconf:any:s")
val maybeDirectiveString =
if (useDirective) s"//> using options ${warningConfOptions.mkString(" ")}" else ""
TestInputs(os.rel / sourceFileName ->
s"""//> using scala $sv
|//> using options ${warningConfOptions.mkString(" ")}
|$maybeDirectiveString
|object WConfExample extends App {
| @deprecated("This method will be removed", "1.0.0")
| def oldMethod(): Unit = println("This is an old method.")
Expand All @@ -539,12 +545,19 @@ class SipScalaTests extends ScalaCliSuite with SbtTestHelper with MillTestHelper
localBin,
s"scalac:$sv"
).call(cwd = root)
val cliRes = os.proc(TestUtil.cli, "compile", sourceFileName, "--server=false")
.call(cwd = root, check = false, stderr = os.Pipe)
val cliRes =
os.proc(
TestUtil.cli,
"compile",
sourceFileName,
"--server=false",
if (useDirective) Nil else warningConfOptions
)
.call(cwd = root, check = false, stderr = os.Pipe)
val scalacRes = os.proc(localBin / "scalac", warningConfOptions, sourceFileName)
.call(cwd = root, check = false, stderr = os.Pipe)
expect(scalacRes.exitCode == cliRes.exitCode)
expect(scalacRes.err.trim() == cliRes.err.trim())
expect(cliRes.err.trim() == scalacRes.err.trim())
}
}

Expand Down

0 comments on commit 9454f6e

Please sign in to comment.