in Sources/ArgumentParser/Usage/DumpHelpGenerator.swift [50:78]
func mergingCompositeArguments() -> ArgumentSet {
var arguments = ArgumentSet()
var slice = self[...]
while var argument = slice.popFirst() {
if argument.help.isComposite {
// If this argument is composite, we have a group of arguments to
// merge together.
let groupEnd = slice
.firstIndex { $0.help.keys != argument.help.keys }
?? slice.endIndex
let group = [argument] + slice[..<groupEnd]
slice = slice[groupEnd...]
switch argument.kind {
case .named:
argument.kind = .named(group.flatMap(\.names))
case .positional, .default:
break
}
argument.help.valueName = group.map(\.valueName).first { !$0.isEmpty } ?? ""
argument.help.defaultValue = group.compactMap(\.help.defaultValue).first
argument.help.abstract = group.map(\.help.abstract).first { !$0.isEmpty } ?? ""
argument.help.discussion = group.map(\.help.discussion).first { !$0.isEmpty } ?? ""
}
arguments.append(argument)
}
return arguments
}