Skip to content

Commit 79059ae

Browse files
Parametrize -- in main
1 parent e59a950 commit 79059ae

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

library/src/scala/main.scala

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ final class main(maxLineLength: Int) extends MainAnnotation:
3333

3434
override def command(args: Array[String], commandName: String, docComment: String) =
3535
new Command[ArgumentParser, MainResultType]:
36+
private val argMarker = "--"
37+
private val shortArgMarker = "-"
38+
3639
private var argNames = new mutable.ArrayBuffer[String]
3740
private var argShortNames = new mutable.ArrayBuffer[Option[Char]]
3841
private var argTypes = new mutable.ArrayBuffer[String]
@@ -55,8 +58,8 @@ final class main(maxLineLength: Int) extends MainAnnotation:
5558

5659
private def isArgNameAt(idx: Int): Boolean =
5760
val arg = args(argIdx)
58-
val isFullName = arg.startsWith("--")
59-
val isShortName = arg.startsWith("-") && arg.length == 2 && shortNameIsValid(arg(1))
61+
val isFullName = arg.startsWith(argMarker)
62+
val isShortName = arg.startsWith(shortArgMarker) && arg.length == 2 && shortNameIsValid(arg(1))
6063

6164
isFullName || isShortName
6265

@@ -76,7 +79,7 @@ final class main(maxLineLength: Int) extends MainAnnotation:
7679

7780
private def argUsage(pos: Int): String =
7881
val name = argNames(pos)
79-
val namePrint = argShortNames(pos).map(short => s"[-$short | --$name]").getOrElse(s"[--$name]")
82+
val namePrint = argShortNames(pos).map(short => s"[$shortArgMarker$short | $argMarker$name]").getOrElse(s"[$argMarker$name]")
8083

8184
argKinds(pos) match {
8285
case ArgumentKind.SimpleArgument => s"$namePrint <${argTypes(pos)}>"
@@ -153,8 +156,8 @@ final class main(maxLineLength: Int) extends MainAnnotation:
153156
val i = args.indexOf(s, from)
154157
if i < 0 then Seq() else i +: allIndicesOf(s, i + 1)
155158

156-
val indices = allIndicesOf(s"--$argName", 0)
157-
val indicesShort = shortArgName.map(shortName => allIndicesOf(s"-$shortName", 0)).getOrElse(Seq())
159+
val indices = allIndicesOf(s"$argMarker$argName", 0)
160+
val indicesShort = shortArgName.map(shortName => allIndicesOf(s"$shortArgMarker$shortName", 0)).getOrElse(Seq())
158161
(indices ++: indicesShort).filter(_ >= 0)
159162

160163
private def getArgGetter[T](paramInfos: ParameterInfos[_], getDefaultGetter: () => () => T)(using p: ArgumentParser[T]): () => T =
@@ -190,7 +193,7 @@ final class main(maxLineLength: Int) extends MainAnnotation:
190193
argKinds += argKind
191194

192195
val shortName = getShortName(paramInfos)
193-
shortName.foreach(c => if !shortNameIsValid(c) then throw IllegalArgumentException(s"Invalid short name: -$c"))
196+
shortName.foreach(c => if !shortNameIsValid(c) then throw IllegalArgumentException(s"Invalid short name: $shortArgMarker$c"))
194197
argShortNames += shortName
195198

196199
override def argGetter[T](paramInfos: ParameterInfos[T])(using p: ArgumentParser[T]): () => T =
@@ -223,12 +226,12 @@ final class main(maxLineLength: Int) extends MainAnnotation:
223226
case None =>
224227
for
225228
arg <- args
226-
if arg.startsWith("--") && !argNames.contains(arg.drop(2))
229+
if arg.startsWith(argMarker) && !argNames.contains(arg.drop(2))
227230
do
228231
error(s"unknown argument name: $arg")
229232
end flagUnused
230233

231-
if args.contains("--help") then
234+
if args.contains(s"${argMarker}help") then
232235
usage()
233236
println()
234237
explain()

0 commit comments

Comments
 (0)