Skip to content

Commit 607021b

Browse files
authored
Unify @argument and @option initialization paths (#477)
- Fixes #466. - Adds initializers to ArgumentDefinition generic over a Container type. The Container type must conform to a new internal protocol ArgumentDefinitionContainer which describes functionality like default set of help options for the argument defined by the property wrapper, etc. - Adds overloads for Optional @arguments and @options with default values which emit deprecation warning to guide users towards using the non-Optional versions.
1 parent 09106ba commit 607021b

File tree

16 files changed

+1937
-705
lines changed

16 files changed

+1937
-705
lines changed

Sources/ArgumentParser/Parsable Properties/Argument.swift

Lines changed: 326 additions & 258 deletions
Large diffs are not rendered by default.

Sources/ArgumentParser/Parsable Properties/Flag.swift

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,13 @@ extension Flag where Value: EnumerableFlag {
400400
let caseKey = InputKey(rawValue: String(describing: value))
401401
let name = Value.name(for: value)
402402
let helpForCase = hasCustomCaseHelp ? (caseHelps[i] ?? help) : help
403-
let help = ArgumentDefinition.Help(options: initial != nil ? .isOptional : [], help: helpForCase, defaultValue: defaultValue, key: key, isComposite: !hasCustomCaseHelp)
403+
let help = ArgumentDefinition.Help(
404+
allValues: [],
405+
options: initial != nil ? [.isOptional] : [],
406+
help: helpForCase,
407+
defaultValue: defaultValue,
408+
key: key,
409+
isComposite: !hasCustomCaseHelp)
404410
return ArgumentDefinition.flag(name: name, key: key, caseKey: caseKey, help: help, parsingStrategy: .default, initialValue: initial, update: .nullary({ (origin, name, values) in
405411
hasUpdated = try ArgumentSet.updateFlag(key: key, value: value, origin: origin, values: &values, hasUpdated: hasUpdated, exclusivity: exclusivity)
406412
}))
@@ -489,7 +495,15 @@ extension Flag {
489495
let caseKey = InputKey(rawValue: String(describing: value))
490496
let name = Element.name(for: value)
491497
let helpForCase = hasCustomCaseHelp ? (caseHelps[i] ?? help) : help
492-
let help = ArgumentDefinition.Help(options: .isOptional, help: helpForCase, key: key, isComposite: !hasCustomCaseHelp)
498+
499+
let help = ArgumentDefinition.Help(
500+
allValues: [],
501+
options: [.isOptional],
502+
help: helpForCase,
503+
defaultValue: nil,
504+
key: key,
505+
isComposite: !hasCustomCaseHelp)
506+
493507
return ArgumentDefinition.flag(name: name, key: key, caseKey: caseKey, help: help, parsingStrategy: .default, initialValue: nil as Element?, update: .nullary({ (origin, name, values) in
494508
hasUpdated = try ArgumentSet.updateFlag(key: key, value: value, origin: origin, values: &values, hasUpdated: hasUpdated, exclusivity: exclusivity)
495509
}))
@@ -514,7 +528,14 @@ extension Flag {
514528
let caseKey = InputKey(rawValue: String(describing: value))
515529
let name = Element.name(for: value)
516530
let helpForCase = hasCustomCaseHelp ? (caseHelps[i] ?? help) : help
517-
let help = ArgumentDefinition.Help(options: .isOptional, help: helpForCase, key: key, isComposite: !hasCustomCaseHelp)
531+
let help = ArgumentDefinition.Help(
532+
allValues: [],
533+
options: [.isOptional],
534+
help: helpForCase,
535+
defaultValue: nil,
536+
key: key,
537+
isComposite: !hasCustomCaseHelp)
538+
518539
return ArgumentDefinition.flag(name: name, key: key, caseKey: caseKey, help: help, parsingStrategy: .default, initialValue: initial, update: .nullary({ (origin, name, values) in
519540
values.update(forKey: key, inputOrigin: origin, initial: [Element](), closure: {
520541
$0.append(value)

0 commit comments

Comments
 (0)