@@ -38,9 +38,6 @@ final class newMain extends MainAnnotation:
38
38
39
39
override def command (args : Array [String ], commandName : String , documentation : String , parameterInfos : ParameterInfo * ) =
40
40
new Command [Parser , Result ]:
41
- private enum ArgumentKind {
42
- case SimpleArgument , OptionalArgument , VarArgument
43
- }
44
41
45
42
private val argMarker = " --"
46
43
private val shortArgMarker = " -"
@@ -114,9 +111,6 @@ final class newMain extends MainAnnotation:
114
111
(pa, nameToArgValues, ia)
115
112
}
116
113
117
- /** The kind of the arguments. Used to display help about the main method. */
118
- private val argKinds = new mutable.ArrayBuffer [ArgumentKind ]
119
-
120
114
/** A buffer for all errors */
121
115
private val errors = new mutable.ArrayBuffer [String ]
122
116
@@ -147,19 +141,15 @@ final class newMain extends MainAnnotation:
147
141
148
142
private def usage (): Unit =
149
143
def argsUsage : Seq [String ] =
150
- for ((infos, kind) <- parameterInfos.zip(argKinds))
151
- yield {
152
- val canonicalName = getNameWithMarker(infos.name)
153
- val shortNames = getShortNames(infos).map(getNameWithMarker)
154
- val alternativeNames = getAlternativeNames(infos).map(getNameWithMarker)
144
+ for info <- parameterInfos yield
145
+ val canonicalName = getNameWithMarker(info.name)
146
+ val shortNames = getShortNames(info).map(getNameWithMarker)
147
+ val alternativeNames = getAlternativeNames(info).map(getNameWithMarker)
155
148
val namesPrint = (canonicalName +: alternativeNames ++: shortNames).mkString(" [" , " | " , " ]" )
156
-
157
- kind match {
158
- case ArgumentKind .SimpleArgument => s " $namesPrint < ${infos.typeName}> "
159
- case ArgumentKind .OptionalArgument => s " [ $namesPrint < ${infos.typeName}>] "
160
- case ArgumentKind .VarArgument => s " [< ${infos.typeName}> [< ${infos.typeName}> [...]]] "
161
- }
162
- }
149
+ if info.isVarargs then s " [< ${info.typeName}> [< ${info.typeName}> [...]]] "
150
+ else if info.hasDefault then s " [ $namesPrint < ${info.typeName}>] "
151
+ else s " $namesPrint < ${info.typeName}> "
152
+ end for
163
153
164
154
def wrapArgumentUsages (argsUsage : Seq [String ], maxLength : Int ): Seq [String ] = {
165
155
def recurse (args : Seq [String ], currentLine : String , acc : Vector [String ]): Seq [String ] =
@@ -204,24 +194,21 @@ final class newMain extends MainAnnotation:
204
194
val argDocShift = argNameShift + 2
205
195
206
196
println(" Arguments:" )
207
- for ((infos, kind) <- parameterInfos.zip(argKinds))
208
- val canonicalName = getNameWithMarker(infos .name)
209
- val shortNames = getShortNames(infos ).map(getNameWithMarker)
210
- val alternativeNames = getAlternativeNames(infos ).map(getNameWithMarker)
197
+ for info <- parameterInfos do
198
+ val canonicalName = getNameWithMarker(info .name)
199
+ val shortNames = getShortNames(info ).map(getNameWithMarker)
200
+ val alternativeNames = getAlternativeNames(info ).map(getNameWithMarker)
211
201
val otherNames = (alternativeNames ++: shortNames) match {
212
202
case Seq () => " "
213
203
case names => names.mkString(" (" , " , " , " ) " )
214
204
}
215
205
val argDoc = StringBuilder (" " * argNameShift)
216
- argDoc.append(s " $canonicalName $otherNames- ${infos .typeName}" )
206
+ argDoc.append(s " $canonicalName $otherNames- ${info .typeName}" )
217
207
218
- kind match {
219
- case ArgumentKind .OptionalArgument => argDoc.append(" (optional)" )
220
- case ArgumentKind .VarArgument => argDoc.append(" (vararg)" )
221
- case _ =>
222
- }
208
+ if info.isVarargs then argDoc.append(" (vararg)" )
209
+ else if info.hasDefault then argDoc.append(" (optional)" )
223
210
224
- val doc = infos .documentation
211
+ val doc = info .documentation
225
212
if (doc.nonEmpty) {
226
213
val shiftedDoc =
227
214
doc.split(" \n " ).nn
@@ -231,6 +218,7 @@ final class newMain extends MainAnnotation:
231
218
}
232
219
233
220
println(argDoc)
221
+ end for
234
222
}
235
223
end explain
236
224
@@ -248,7 +236,6 @@ final class newMain extends MainAnnotation:
248
236
249
237
override def argGetter [T ](idx : Int , optDefaultGetter : Option [() => T ])(using p : Parser [T ]): () => T =
250
238
val name = parameterInfos(idx).name
251
- argKinds += (if optDefaultGetter.nonEmpty then ArgumentKind .OptionalArgument else ArgumentKind .SimpleArgument )
252
239
val parameterInfo = nameToParameterInfo(name)
253
240
254
241
byNameArgs.get(name) match {
@@ -273,7 +260,6 @@ final class newMain extends MainAnnotation:
273
260
274
261
override def varargGetter [T ](using p : Parser [T ]): () => Seq [T ] =
275
262
val name = parameterInfos.last.name
276
- argKinds += ArgumentKind .VarArgument
277
263
278
264
val byNameGetters = byNameArgs.getOrElse(name, Seq ()).map(arg => convert(name, arg, p))
279
265
val positionalGetters = positionalArgs.removeAll.map(arg => convert(name, arg, p))
0 commit comments