Skip to content

std.getopt: improve error message for malformed arguments #9662

@dlangBugzillaToGithub

Description

@dlangBugzillaToGithub

initrd.gz (@ColonelThirtyTwo) reported this on 2015-06-23T16:33:35Z

Transfered from https://issues.dlang.org/show_bug.cgi?id=14725

CC List

  • rburners

Description

When parsing an argument that isn't a string (ex. an int), getopt just uses `std.conv.to`, which throws a ConvException that's not very helpful to the end user.

For example:


import std.stdio;
import std.getopt;
import std.conv;

void main(string[] args) {
	int num;
	
	GetoptResult helpinfo;
	try {
		helpinfo = getopt(args,
			"num", "An integer", &num,
		);
	} catch(ConvException ex) {
		stderr.writeln("Error parsing arguments: ", ex.msg);
		return;
	}
	
	if(helpinfo.helpWanted) {
		defaultGetoptPrinter("I am help text", helpinfo.options);
	}
}


$ rdmd ~/test.d --num=foo
Error parsing arguments: Unexpected 'o' when converting from type string to type int

It would be nicer if getopt caught the ConvException, then threw a GetOptException with a more end-user-friendly message. For example:

$ rdmd ~/test.d --num=foo
Error parsing arguments: `num` was passed a non-integer value.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions