-
Notifications
You must be signed in to change notification settings - Fork 354
Description
I'd like the ability for an input to be able to work as both a Flag and an Option in my CLI. For example, I would want both of the following examples to be possible:
$ example --build
# and
$ example --build Foo BarThe first case would parse to build: [] and the second case to build: ["Foo", "Bar"]. I tried making this work in two ways. First I tried making an @Option with a type of [String]? = nil and using a custom transform closure. My assumption was that passing --build without a value would pass an empty string to the transform closure. Instead, the CLI emits the following error when running:
Error: Missing value for '--build <build>'
The second strategy I tried was creating two separate fields, making one a @Flag and one an @Option, and giving them the same name. This time, I got an assertion failure:
ArgumentParser/ParsableArguments.swift:243: Fatal error: Validation failed for `Example`:
- Multiple (2) `Option` or `Flag` arguments are named "--build".
The first strategy—the one that uses only a single @Option field—seems the most ergonomic to me. I could also picture using a new initializer parameter to @Option e.g. allowsMissingValue: Bool, etc. My apologies if this is already possible and I just didn't dig hard enough.