Skip to content

Commit

Permalink
0.2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
lihaoyi-databricks authored and lihaoyi committed Apr 3, 2024
1 parent 04ca726 commit 0a70bcc
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 6 deletions.
4 changes: 2 additions & 2 deletions build.sc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ val scala31 = "3.1.1"
val scala2Versions = List(scala212, scala213)

val scalaJSVersions = for {
scalaV <- scala30 :: scala2Versions
scalaV <- scala2Versions
scalaJSV <- Seq("1.5.1")
} yield (scalaV, scalaJSV)

Expand Down Expand Up @@ -84,7 +84,7 @@ trait CommonTestModule extends ScalaModule with TestModule.Utest {


object mainargs extends Module {
object jvm extends Cross[JvmMainArgsModule](scala30 :: scala2Versions: _*)
object jvm extends Cross[JvmMainArgsModule](scala2Versions: _*)
class JvmMainArgsModule(val crossScalaVersion: String)
extends Common with ScalaModule with MainArgsPublishModule {
def platform = "jvm"
Expand Down
10 changes: 6 additions & 4 deletions mainargs/src-2/Macros.scala
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,13 @@ class Macros(val c: Context) {

val argListSymbol = q"${c.fresh[TermName](TermName("argsList"))}"

val defaults = for ((arg, i) <- flattenedArgLists.zipWithIndex) yield {
val defaults = for ((arg0, i) <- flattenedArgLists.zipWithIndex) yield {
val arg = TermName(c.freshName())
hasDefault(i).map(defaultName =>
q"($arg: $curCls) => $arg.${newTermName(defaultName)}"
)
hasDefault(i) match{
case None => q"_root_.scala.None"
case Some(defaultName) =>
q"_root_.scala.Some[$curCls => ${arg0.info}](($arg: $curCls) => $arg.${newTermName(defaultName)}: ${arg0.info})"
}
}

val argSigs = for((arg, defaultOpt) <- flattenedArgLists.zip(defaults)) yield {
Expand Down
51 changes: 51 additions & 0 deletions mainargs/test/src/InvocationArgs.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package mainargs
import utest._
@main
case class LargeArgs(
v1: String,
v2: String = "v2-default",
v3: Option[String] = None,
v4: Option[String] = None,
v5: Int,
v6: Int = 0,
v7: Int = 123,
v8: Int = 3.14.toInt,
v9: Boolean,
v10: Boolean = true,
v11: Boolean = false,
v12: Option[Int] = None,
v13: Option[Int] = None,
v14: String = "v14-default",
v15: String = "v15-default",
v16: String = "v16-default",
v17: String = "v17-default",
v18: String = "v18-default",
v19: String = "v19-default",
v20: String = "v20-default",
v21: String = "v21-default",
v22: String = "v22-default",
v23: String = "v23-default",
v24: String = "v24-default",
v25: String = "v25-default",
v26: String = "v26-default",
v27: String = "v27-default",
v28: String = "v28-default",
v29: String = "v29-default",
v30: String = "v30-default",
v31: String = "v31-default",
v32: String = "v32-default",
)

object LargeClassTests extends TestSuite{
val largeArgsParser = ParserForClass[LargeArgs]

val tests = Tests {
test("simple") {
largeArgsParser.constructOrThrow(
Seq("--v1", "v1-value", "--v5", "5", "--v9", "true", "--v23", "v23-value")
) ==>
LargeArgs(v1 = "v1-value", v5 = 5, v9 = true, v23 = "v23-value")
}
}
}

5 changes: 5 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,11 @@ command-line friendly tool.

# Changelog

## 0.2.4

- Backport of *Fix usage of `ParserForClass` for `case class`es with more than
22 parameters with some default values in Scala 2.x (#123)* on top of 0.2.3

## 0.2.3

- Support Scala 3 [#18](https://github.com/com-lihaoyi/mainargs/pull/18)
Expand Down

0 comments on commit 0a70bcc

Please sign in to comment.