Skip to content

Commit f79bef6

Browse files
committed
Factor out canonical names logic
1 parent 6eb5f69 commit f79bef6

File tree

1 file changed

+29
-18
lines changed

1 file changed

+29
-18
lines changed

library/src/scala/annotation/newMain.scala

+29-18
Original file line numberDiff line numberDiff line change
@@ -115,23 +115,10 @@ final class newMain extends MainAnnotation[FromString, Any]:
115115
errors += msg
116116
}
117117

118-
val namesToCanonicalName: Map[String, String] = info.parameters.flatMap(
119-
infos =>
120-
val names = getAlternativeNames(infos)
121-
val canonicalName = infos.name
122-
if nameIsValid(canonicalName) then (canonicalName +: names).map(_ -> canonicalName)
123-
else names.map(_ -> canonicalName)
124-
).toMap
125-
val shortNamesToCanonicalName: Map[Char, String] = info.parameters.flatMap(
126-
infos =>
127-
val names = getShortNames(infos)
128-
val canonicalName = infos.name
129-
if shortNameIsValid(canonicalName) then (canonicalName(0) +: names).map(_ -> canonicalName)
130-
else names.map(_ -> canonicalName)
131-
).toMap
118+
val canonicalNames = CanonicalNames(info)
132119

133-
val helpIsOverridden = namesToCanonicalName.exists((name, _) => name == helpArg)
134-
val shortHelpIsOverridden = shortNamesToCanonicalName.exists((name, _) => name == shortHelpArg)
120+
val helpIsOverridden = canonicalNames.getName(helpArg).isDefined
121+
val shortHelpIsOverridden = canonicalNames.getShortName(shortHelpArg).isDefined
135122

136123
val displayHelp =
137124
(!helpIsOverridden && args.contains(getNameWithMarker(helpArg))) ||
@@ -146,9 +133,9 @@ final class newMain extends MainAnnotation[FromString, Any]:
146133
val (positionalArgs, byNameArgs, invalidByNameArgs) = {
147134
def getCanonicalArgName(arg: String): Option[String] =
148135
if arg.startsWith(argMarker) && arg.length > argMarker.length then
149-
namesToCanonicalName.get(arg.drop(argMarker.length))
136+
canonicalNames.getName(arg.drop(argMarker.length))
150137
else if arg.startsWith(shortArgMarker) && arg.length == shortArgMarker.length + 1 then
151-
shortNamesToCanonicalName.get(arg(shortArgMarker.length))
138+
canonicalNames.getShortName(arg(shortArgMarker.length))
152139
else
153140
None
154141

@@ -348,9 +335,33 @@ final class newMain extends MainAnnotation[FromString, Any]:
348335
execProgram()
349336
}
350337

338+
private class CanonicalNames(info: Info):
339+
private val namesToCanonicalName: Map[String, String] = info.parameters.flatMap(
340+
infos =>
341+
val names = getAlternativeNames(infos)
342+
val canonicalName = infos.name
343+
if nameIsValid(canonicalName) then (canonicalName +: names).map(_ -> canonicalName)
344+
else names.map(_ -> canonicalName)
345+
).toMap
346+
347+
private val shortNamesToCanonicalName: Map[Char, String] = info.parameters.flatMap(
348+
infos =>
349+
val names = getShortNames(infos)
350+
val canonicalName = infos.name
351+
if shortNameIsValid(canonicalName) then (canonicalName(0) +: names).map(_ -> canonicalName)
352+
else names.map(_ -> canonicalName)
353+
).toMap
354+
355+
def getName(name: String): Option[String] = namesToCanonicalName.get(name)
356+
357+
def getShortName(name: Char): Option[String] = shortNamesToCanonicalName.get(name)
358+
359+
end CanonicalNames
360+
351361
end newMain
352362

353363
object newMain:
354364
@experimental
355365
final class Alias(val aliases: String*) extends MainAnnotation.ParameterAnnotation
366+
356367
end newMain

0 commit comments

Comments
 (0)