[Issue 16539] New: std.getopt should invoke callbacks in the order given on the command line
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sun Sep 25 12:37:14 PDT 2016
https://issues.dlang.org/show_bug.cgi?id=16539
Issue ID: 16539
Summary: std.getopt should invoke callbacks in the order given
on the command line
Product: D
Version: D2
Hardware: x86
OS: Mac OS X
Status: NEW
Severity: enhancement
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: jrdemail2000-dlang at yahoo.com
std.getopt.getopt invokes callback functions in the order they listed in the
call to getopt. Instead callbacks should be invoked in the order used on the
command line at run-time. This would support use cases where the user's
argument order is taken into account. If there are also use cases where the
existing behavior is preferred then a config option can be used.
An example to illustrate. This program has three options with callbacks. The
callbacks simply print that it was called. The options can be passed any in any
order on the command, and any number of times. The callbacks are called in the
order listed in the code, rather than the order listed on the command line.
==== callorder.d ====
void main(string [] args)
{
import std.getopt;
import std.stdio;
void optionHandler(string option, string optionVal)
{
writefln("optionHander(%s, %s)", option, optionVal);
}
try {
auto r = getopt(
args,
"a|aa", "aaa val", &optionHandler,
"b|bb", "bbb val", &optionHandler,
"c|cc", "ccc val", &optionHandler,
);
if (r.helpWanted) {
auto helpText =
"Option handler call order test. Use options multiple times in
different orders.";
defaultGetoptPrinter(helpText, r.options);
}
} catch (Exception exc) {
stderr.writeln("Error proccessing command line arguments: ", exc.msg);
}
}
======================
$ dmd callorder.d
$ ./callorder -a 1 -b 2 -c 3 --cc 4 --bb 5 --aa 6 -a 7 -b 8 -c 9
optionHander(a|aa, 1)
optionHander(a|aa, 6)
optionHander(a|aa, 7)
optionHander(b|bb, 2)
optionHander(b|bb, 5)
optionHander(b|bb, 8)
optionHander(c|cc, 3)
optionHander(c|cc, 4)
optionHander(c|cc, 9)
--
More information about the Digitalmars-d-bugs
mailing list