Remove Never return from ParsableCommand.main()
#162
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This brings the
main()method in line with using the new@mainattribute on the rootcommand type.
Detailed Design
The changes here are to make
ParsableCommand.main()aVoid-returning function, to break out a separate no-argument version, and to remove the default parameter. The default-argument version doesn't satisfy the() -> Voidrequirement for@main.The
main()method now returns without exiting on successful execution of aDocumentation Plan
No real impact. Documentation for using
@mainwith the library to follow.Test Plan
All existing tests continue to pass. SwiftPM will need an update to support
@mainin executable targets.Source Impact
Typical code should continue to behave as expected, but this is source-breaking if anyone has a strongly-typed usage of
ParsableCommand.main(), e.g.let mainFunction: ([String]?) -> Never = MyCommand.main. Keeping the old version with a deprecation/unavailability annotation isn't possible, since there would be ambiguity between that and the new ones.In addition, code that followed
MyCommand.main()inmain.swiftis no longer dead code, and will be executed after successful execution of the command.Checklist