-
Notifications
You must be signed in to change notification settings - Fork 342
Description
Executable name in usage messages is synthesized from the @main
struct name. That's incorrect by almost any measure: no executable by that name exists in most cases. IMO the right behavior is to report the executable name as CommandLine.arguments.first!
. There are at least several command-line packages that are installed as a family of symlinks to a single executable, where the behavior of the command may actually depend on the name of the symlink through which it was invoked.
Replace this paragraph with a short description of the incorrect incorrect behavior. If this is a regression, please note the last version that the behavior was correct in addition to your current version.
ArgumentParser version: 1.2.2
Swift version: swift-driver version: 1.75.2 Apple Swift version 5.8 (swiftlang-5.8.0.124.2 clang-1403.0.22.11.100)
Target: arm64-apple-macosx13.0
Checklist
- If possible, I've reproduced the issue using the
main
branch of this package - I've searched for existing GitHub issues
Steps to Reproduce
Use this source to create a command-line tool with executable named "foo," then run the tool with no arguments
import ArgumentParser
import Foundation
@main
struct TesterOfThings: ParsableCommand {
@Argument(help: "Paths.", transform: URL.init(fileURLWithPath:))
var files: [URL]
func run() throws {
print(CommandLine.arguments)
}
}
Expected behavior
A message is printed that describes the usage of the foo
command.
Actual behavior
A message is printed that describes the usage of the nonexistent tester-of-things
command.