-
Notifications
You must be signed in to change notification settings - Fork 332
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Retrieving a machine-readable list of possible options and arguments #637
Comments
I'm ok with either @bnbarham @bitjammer WDYT? |
So this is not fully supported (yet) but what about |
My preference would be some support in swift-argument-parser to output in JSON, though interestingly in this case
comes from From there we could have something like @rauhul |
I hope JSON could also be supported that way, as that allows tools from other ecosystems to easily consume it. |
If I may, I'd like to add that not only the list of Suggested JSON{
"overview": "Initialize a new package",
"usage": "swift package init [--type <type>] [--enable-xctest] [--disable-xctest] [--enable-experimental-swift-testing] [--disable-experimental-swift-testing] [--name <name>]",
"options": [
{
"description": "Package type",
"argument": "type",
"type": "list",
"default": "library",
"values": [
{
"value": "library",
"decription": "A package with a library"
},
{
"value": "executable",
"decription": "A package with an executable"
},
{
"value": "tool",
"decription": "A package with an executable that uses Swift Argument Parser. Use this template if you plan to have a rich set of command-line arguments."
},
// ... other options
]
},
{
"description": "Enable support for XCTest",
"argument": "xctest",
"type": "bool",
"default": "false",
"values": [
{
"value": "enable-xctest",
"decription": "Enable XCTest"
},
{
"value": "disable-xctest",
"decription": "Disable XCTest"
}
]
},
{
"description": "Enable experimental support for swift-testing",
"argument": "experimental-swift-testing",
"type": "bool",
"default": "false",
"values": [
{
"value": "enable-experimental-swift-testing",
"decription": "Enable Experimental Swift Testing"
},
{
"value": "disable-experimental-swift-testing",
"decription": "Disable Experimental Swift Testing"
}
]
},
{
"description": "Provide custom package name",
"argument": "name",
"type": "string",
"default": ""
},
{
"description": "Show the version",
"argument": "version",
"type": "flag",
"default": ""
}
]
} All the options in the JSON above should be feasible to be generated by the properties declared in the user's struct that inherits from |
This is why I mentioned |
It seems like the request for a machine-readable list of options is satisfied by the |
Description
The vscode-swift extension recently added support for creating a new swift project. It does so using
swift package init
with some user input to initialize the project with. Right now, it relies on parsing the output fromswift package init --help
to find the list of available project types for the--type
option. However, this isn't really an ideal solution as the format could presumably change at any point (and has already drastically changed between swift 5.3 and 5.10).Here's what the output looks like in Swift 5.8:
It would be nice to have a more reliable output format (e.g. JSON) that contains the enumerations for the
--type
parameter. No additional information is needed beyond what's already available in the output - the extension only needs the enum value as well as a brief description (a human readable label would be nice to include, but is not necessary as the enum value can be parsed rather easily).Seeing as this is something that might be beneficial for other commands: it might even be a good idea to add this as a feature of swift argument parser. However, I'm raising an issue here first since this is the primary use case for the vscode-swift extension.
Expected behavior
No response
Actual behavior
No response
Steps to reproduce
No response
Swift Package Manager version/commit hash
No response
Swift & OS version (output of
swift --version && uname -a
)No response
The text was updated successfully, but these errors were encountered: