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.
Executable name in usage messages is synthesized from the
@mainstruct 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 asCommandLine.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
mainbranch of this packageSteps to Reproduce
Use this source to create a command-line tool with executable named "foo," then run the tool with no arguments
Expected behavior
A message is printed that describes the usage of the
foocommand.Actual behavior
A message is printed that describes the usage of the nonexistent
tester-of-thingscommand.