I have updated the beta release from 0.1.5 to 0.1.8. It still requires Swift 6.2 and MacOS 26.1, or above..
The only change is that functions that get called from generated code that are implemented as public in the macro support framework or the "runtime" framework are now all prefixed with "__."
Functions starting with "__" are meant to be ignored by users of the library.
Consider the expanded @MainFunciton macro in this code:
typealias Greeting = String
typealias Name = String
typealias Count = Int
@main
struct Example_1_Basic {
@MainFunction(shadowGroups: ["lower upper"])
private static func mf1Basic(
i includeIndex: Flag,
u upper: Flag = false,
l lower: Flag = false,
c__count repeats: Count? = nil,
g__greeting greeting: Greeting = "Hello",
_ name: Name,
authors: MetaFlag = MetaFlag(string: "Robert Ford and Jesse James"),
h__help help: MetaFlag = MetaFlag(helpElements: helpElements),
v__version version: MetaFlag = MetaFlag(string: "version 0.1.0 - 2025-10-14"))
{ ...}
}
The expanded macro is the same as in 0.1.5, except that, for example:__config__.addShadowGroups(__shadowGroups__) has been changed to __config__.__addShadowGroups(__shadowGroups__)
Here is the new version of the expanded macro:
private static func main() {
func __flagCheck__(_ x: Bool.Type) {
}
__flagCheck__(Flag.self)
func __typeCheck__(_ xx: any BasicParameterType.Type) {
}
__typeCheck__(Count.self)
__typeCheck__(Greeting.self)
__typeCheck__(Name.self)
let __tokens__ = Array(CommandLine.arguments.dropFirst(1))
let __metaFlagDefs__: [(String, MetaFlagProtocol)] = [
("authors", MetaFlag(string: "Robert Ford and Jesse James")),
("help", MetaFlag(helpElements: helpElements)),
("version", MetaFlag(string: "version 0.1.0 - 2025-10-14"))
]
let __shadowGroups__: [String] = ["lower upper"]
var __config__ = PeerFunctionConfig()
__config__.__addShadowGroups(__shadowGroups__)
__config__.__addMetaFlags(__metaFlagDefs__)
let __greeting__default: Greeting? = "Hello"
let __name__default: Name? = nil
let __parameters__: [Parameter] = [
Parameter(
name: "includeIndex",
labelTriple: ("-i", nil, nil),
defaultValue: nil,
typeName: "Flag",
minMaxNumberOfValues: (0, 0),
minMaxNumberOfOccurances: (0, 9223372036854775807),
minMaxNumberOfElements: (0, 0),
isMetaFlag: false),
Parameter(
name: "upper",
labelTriple: ("-u", nil, nil),
defaultValue: nil,
typeName: "Flag",
minMaxNumberOfValues: (0, 0),
minMaxNumberOfOccurances: (0, 9223372036854775807),
minMaxNumberOfElements: (0, 0),
isMetaFlag: false),
Parameter(
name: "lower",
labelTriple: ("-l", nil, nil),
defaultValue: nil,
typeName: "Flag",
minMaxNumberOfValues: (0, 0),
minMaxNumberOfOccurances: (0, 9223372036854775807),
minMaxNumberOfElements: (0, 0),
isMetaFlag: false),
Parameter(
name: "repeats",
labelTriple: ("-c", nil, "--count"),
defaultValue: nil,
typeName: "Count?",
minMaxNumberOfValues: (1, 1),
minMaxNumberOfOccurances: (0, 1),
minMaxNumberOfElements: (0, 1),
isMetaFlag: false),
Parameter(
name: "greeting",
labelTriple: ("-g", nil, "--greeting"),
defaultValue: __quotedOrNil(__greeting__default),
typeName: "Greeting",
minMaxNumberOfValues: (1, 1),
minMaxNumberOfOccurances: (0, 1),
minMaxNumberOfElements: (0, 1),
isMetaFlag: false),
Parameter(
name: "name",
labelTriple: (nil, nil, nil),
defaultValue: __quotedOrNil(__name__default),
typeName: "Name",
minMaxNumberOfValues: (1, 1),
minMaxNumberOfOccurances: (1, 1),
minMaxNumberOfElements: (1, 1),
isMetaFlag: false),
Parameter(
name: "authors",
labelTriple: (nil, nil, "--authors"),
defaultValue: nil,
typeName: "MetaFlag",
minMaxNumberOfValues: (0, 0),
minMaxNumberOfOccurances: (0, 9223372036854775807),
minMaxNumberOfElements: (0, 0),
isMetaFlag: true),
Parameter(
name: "help",
labelTriple: ("-h", nil, "--help"),
defaultValue: nil,
typeName: "MetaFlag",
minMaxNumberOfValues: (0, 0),
minMaxNumberOfOccurances: (0, 9223372036854775807),
minMaxNumberOfElements: (0, 0),
isMetaFlag: true),
Parameter(
name: "version",
labelTriple: ("-v", nil, "--version"),
defaultValue: nil,
typeName: "MetaFlag",
minMaxNumberOfValues: (0, 0),
minMaxNumberOfOccurances: (0, 9223372036854775807),
minMaxNumberOfElements: (0, 0),
isMetaFlag: true)]
__config__.__addParameters(__parameters__)
do {
let __parseResult__ = try ParseResult(
callNames: ["mf1-basic"],
tokens: __tokens__,
stopWords: [],
config: __config__)
var __messages__ = [String]() // avoids never mutated message if parseBlock is empty
__messages__ += __parseResult__.parsedErrors.map {
$0.description
}
let __initializer = __ValueInitializer(parsedValues: __parseResult__.parsedValues)
let __includeIndex__value: Flag = __initializer.__parseFlag(for: "includeIndex", &__messages__)
let __upper__value: Flag = __initializer.__parseFlag(for: "upper", &__messages__)
let __lower__value: Flag = __initializer.__parseFlag(for: "lower", &__messages__)
let __repeats__value: Count? = __initializer.__parseOptionalValue(for: "repeats", &__messages__)
let __greeting__value: Greeting? = __initializer.__parseValue(for: "greeting", __greeting__default, &__messages__)
let __name__value: Name? = __initializer.__parseValue(for: "name", __name__default, &__messages__)
if !__messages__.isEmpty {
try __config__.__throwErrorScreen(
callNames: ["mf1-basic"],
messages: __messages__)
}
mf1Basic(
i: __includeIndex__value,
u: __upper__value,
l: __lower__value,
c__count: __repeats__value,
g__greeting: __greeting__value!,
__name__value!)
}
catch {
printErrorAndExit(for: error, callNames: ["mf1-basic"])
}
return
}
Please clone the newer versions of CmdArgLib_MainFunction et. al., which depend on cmd-arg-lib 0.1.8.