Skip to content

Releases: apple/swift-argument-parser

ArgumentParser 1.6.1

01 Jul 15:35
309a47b
Compare
Choose a tag to compare

Fixes

  • Resolves a source break for clients that have conditional conformances to ExpressibleByArgument or ParsableArguments. (#792)

ArgumentParser 1.6.0

30 Jun 23:08
852f74c
Compare
Choose a tag to compare

Additions

  • Options with CaseIterable types can now provide help descriptions on a per-value basis. (#647)
  • New API for accessing the shell and shell version while generating completions. (#680, #690)
  • The generate-docc-reference plugin generates a DocC reference folder for your CLI tool. (#694, #754, #773)

Changes

  • Testing and continuous integration improvements, including migrating to GitHub workflows. (#692, #693, #696, #698, #699, #700, #701, #708, #711, #718, #716, #714, #712, #732, #730, #746, #747, #760)
  • The associated closure for CompletionKind.custom now takes three parameters: the array of shell words currently in use for the completion request, the offset in that array for the word that completions are being requested for, and the prefix of that word that precedes the cursor. In addition, the associated closure can be async. The single-argument closure version of CompletionKind.custom is deprecated with this release. (#763, #770, #782)
  • ParsableArguments and ExpressibleByArgument now conform to SendableMetatype when builing with a minimum Swift 6.2 compiler. (#789)

Fixes

  • Significant fixes and improvements across the entire completion script generation system, too numerous to mention here. Please note: numerous longstanding issues still remain in the completion scripts (mainly involving quoting/escaping); they will be fixed over time. A special thanks to @rgoldberg for the investment in completion script quality! (#727, #735, #738, #740, #762, #763, #775, #770, #777, #767)
  • Improvements to generate-manual plugin. (#663, #667)
  • Error messaging when a user provides a single-dash option is now improved, along with other error reporting improvements. (#728, #744)
  • Implementation improvements and fixes for both older and newer versions of Swift. (#676, #707, #705, #720, #666, #724, #731, #766, #685, #729, #736, #741)
  • Better capturing of tool configuration in ToolInfo. (#669, #697)
  • Documentation improvements. (#657, #678, #743)

The 1.6.0 release includes contributions from @bripeticca, @cg-soft, @compnerd, @dshan4585, @heckj, @natecook1000, @rauhul, @rgoldberg, and @Steelskin. Thank you!

ArgumentParser 1.5.1

29 May 03:57
Compare
Choose a tag to compare

Fixes

  • Relax the CMake build system to allow implicit linking of Foundation and XCTest when not explicitly given the associated build tree. (#783)

The 1.5.1 release includes a contribution from @compnerd. Thank you!

ArgumentParser 1.5.0

18 Jul 18:04
41982a3
Compare
Choose a tag to compare

Additions

  • Subcommands can now be grouped into sections, to enable a better help display for commands with many subcommands. (#644)
  • Improved unofficial support for Android and riscv64 platforms. (#649, #651)

Fixes

  • Command-line completion scripts correctly complete for arguments that are included via option group. (#648)
  • Several warnings when compiling with strict concurrency enabled, or in Swift 6 language mode, are now silenced. (#650)

The 1.5.0 release includes contributions from @CraigSiemens, @DougGregor, @finagolfin, @futurejones, and @natecook1000. Thank you!

ArgumentParser 1.4.0

21 May 22:53
0fbc884
Compare
Choose a tag to compare

Additions

  • Adds support for subcommand aliases via a new CommandConfiguration.aliases parameter. Aliases are shown in help text and used during command parsing. For example, a subcommand like "average" from the example "math" tool can be defined with the aliases ["avg"]. The resulting subcommand can now be invoked with either of math stats average and ``math stats avg`. See the updated documentation and example for additional details. (#627)
  • Adds a new API usageString to ParsableArguments and ParsableCommand for retrieving their usage text, allowing for more flexible construction of error screens. (#634)
  • Adds support for passing custom arguments to AsyncParsableCommand.main() with a new static func main(_ arguments: [String]?) async method. (#568)

Fixes

  • Removes default parameter values from deprecated CommandConfiguration initializers to prevent them from being selected as overloads. Some niche invalid deprecation warnings should no longer occur. (#636)

The 1.4.0 release includes contributions from @Austinpayne, @dcantah, @KS1019, @natecook1000, @rauhul, and @revolter. Thank you!

ArgumentParser 1.3.1

16 Mar 18:23
4698969
Compare
Choose a tag to compare

Changes

  • The CommandConfigration type is now designated as Sendable. (#615)
  • The library uses internal imports instead of @_implementationOnly annotations in Swift versions where permitted. (#616)

Fixes

  • @Option- and @Argument-annotated optional properties that use a transform closure for parsing can now be declared without ambiguity. (#619)
  • The help flag is now recognized more consistently when a default subcommand has been specified. (#612)
  • Options that use the .upToNextOption parsing strategy can now recognize an attached value (e.g. --numbers=1 2 3). (#610)
  • Generated completion scripts for zsh handle repeatable options correctly. (#614)
  • Documentation improvements and clarifications. (#607, #611, #617, #621)
  • Build improvements for CMake builds. (#606, #608)

The 1.3.1 release includes contributions from @Coeur, @compnerd, @keith, @MaxDesiatov, @mayoff, and @natecook1000. Thank you!

ArgumentParser 1.3.0

07 Dec 05:27
c8ed701
Compare
Choose a tag to compare

Changes

  • The @Option, @Argument, @Flag, and @OptionGroup property wrappers now conditionally conform to Sendable when the wrapper's Value type conforms. With this change, you can mark ParsableCommand types as Sendable when you want to be able to pass a parsed command across concurrent contexts. (#582)

    Migration: Users that aren't ready to resolve sendability warnings can add the @preconcurrency attribute to import ArgumentParser statements.

  • To support migration to Sendable annotation, the minimum Swift version for swift-argument-parser has been increased to Swift 5.7. Users of older Swift versions will be able to continue using version 1.2.3 of the library. (#582)

Additions

  • Help screens now include possible options for ExpressibleByArgument types with non empty allValueStrings. Types also conforming to CaseIterable do not need to manually implement allValueStrings, instead it is derived from allCases. (#594)

Fixes

  • The titles for nested option groups are preserved when embedded into commands without specifying a new title. (#592)
  • When wrapping help and error messages, the library now uses the COLUMNS environment variable when set, instead of immediately falling back to 80 columns. (#596)
  • Bash completion scripts now respect the extensions given in a .file(...) completion kind. (#590)
  • Bash completion scripts now properly escape command names that include hyphens. (#573)
  • Documentation improvements. (#572, #565, #602)

The 1.2.3 release includes contributions from @Alkenso, @compnerd, @gwynne,
@kennyyork, @natecook1000, @rauhul, @robertmryan, and @vlm. Thank you!

ArgumentParser 1.2.3

15 Aug 19:04
8f4d275
Compare
Choose a tag to compare

Additions

  • You can now use ArgumentParser with Musl libc. (#574)

Fixes

  • Fixes a bug where single-page manuals did not include command abstracts for
    subcommands. (#552)
  • Fixes a bug where non-optional properties in ParsableCommands could cause
    ArgumentParser to crash. You can now include properties like dictionaries in
    ParsableCommands without issue. (#554)
  • Fixes a configuration issue which would cause ArgumentParserTestHelpers to
    fail to link when building for Windows. (#579)

The 1.2.3 release includes contributions from @compnerd, @gwynne,
@MaxDesiatov, @natecook1000, and @rauhul. Thank you!

ArgumentParser 1.2.2

09 Feb 17:27
fee6933
Compare
Choose a tag to compare

Fixes

  • Arguments with the .allUnrecognized parsing strategy no longer consume built-in flags like --help and --version. (#550)
  • Fixes an issue introduced in version 1.2.0 where properties with underscored names couldn't be parsed. (#548)
  • Improves the error message for cases where platform availability causes the synchronous ParsableCommand.main() static method to be run on an AsyncParsableCommand type. (#547)

ArgumentParser 1.2.1

13 Jan 19:19
4ad606b
Compare
Choose a tag to compare

Changes

Fixes

  • exit(_:) no longer causes infinite recursion on the WASI platform. (#520)
  • Completion scripts for fish now provide completions after a non-hyphen-prefixed argument has been provided. (#535)
  • Overload selection for custom ExpressibleByArgument types has been improved. (#522)
  • The usage string for .postTerminator arguments now includes the required terminator (--). (#542)
  • Documentation and testing fixes and improvements.

The 1.2.1 release includes contributions from @Chamepp, @KKK669, @mtj0928, @natecook1000, @rauhul, @rickrizzo, @TiagoMaiaL, and @yim-lee. Thank you!