diff --git a/Sources/ArgumentParser/Parsable Properties/Argument.swift b/Sources/ArgumentParser/Parsable Properties/Argument.swift index 54e0e0998..817ebad80 100644 --- a/Sources/ArgumentParser/Parsable Properties/Argument.swift +++ b/Sources/ArgumentParser/Parsable Properties/Argument.swift @@ -244,7 +244,11 @@ extension Argument { transform: @escaping (String) throws -> Value ) { self.init(_parsedValue: .init { key in - let help = ArgumentDefinition.Help(options: [], help: help, key: key) + let help = ArgumentDefinition.Help( + options: initial != nil ? [.isOptional] : [], + help: help, + defaultValue: initial.map { "\($0)" }, + key: key) let arg = ArgumentDefinition(kind: .positional, help: help, completion: completion ?? .default, update: .unary({ (origin, name, valueString, parsedValues) in do { diff --git a/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift b/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift index cc2e3a8e9..4bcc1cdbc 100644 --- a/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift +++ b/Tests/ArgumentParserUnitTests/HelpGenerationTests.swift @@ -775,4 +775,28 @@ extension HelpGenerationTests { See 'custom-usage-hidden --help' for more information. """) } + + struct ArgumentsWithTransform: ParsableCommand { + @Argument(help: "required", transform: { Int($0)! }) + var arg0: Int + @Argument(help: "optional", transform: { Int($0)! }) + var arg1: Int = 0 + @Argument(help: "optional", transform: { Int($0)! }) + var arg2: Int? + } + + func testArgumentsWithTransform() { + AssertHelp(.default, for: ArgumentsWithTransform.self, equals: """ + USAGE: arguments-with-transform [] [] + + ARGUMENTS: + required + optional (default: 0) + optional + + OPTIONS: + -h, --help Show help information. + + """) + } }