Skip to content

Commit

Permalink
Merge pull request #3245 from Gedochao/maintenance/repeating-wconf
Browse files Browse the repository at this point in the history
Ensure consecutive `-Wconf:*` flags are not ignored
  • Loading branch information
Gedochao authored Oct 25, 2024
2 parents edd0516 + 9454f6e commit 7751341
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 4 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,6 +515,52 @@ class SipScalaTests extends ScalaCliSuite with SbtTestHelper with MillTestHelper
}
}

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
|$maybeDirectiveString
|object WConfExample extends App {
| @deprecated("This method will be removed", "1.0.0")
| def oldMethod(): Unit = println("This is an old method.")
| oldMethod()
|}
|""".stripMargin).fromRoot { root =>
val localCache = root / "local-cache"
val localBin = root / "local-bin"
os.proc(
TestUtil.cs,
"install",
"--cache",
localCache,
"--install-dir",
localBin,
s"scalac:$sv"
).call(cwd = root)
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(cliRes.err.trim() == scalacRes.err.trim())
}
}

for {
sv <- Seq(Constants.scala212, Constants.scala213, Constants.scala3NextRc)
code =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ object ScalacOpt {
private val repeatingKeys = Set(
"-Xplugin",
"-P", // plugin options
"-language"
"-language",
"-Wconf"
)

implicit val hashedType: HashedType[ScalacOpt] = {
Expand Down

0 comments on commit 7751341

Please sign in to comment.