Fixing valid options for std.getopt

Jens Mueller jens.k.mueller at gmx.de
Tue Aug 9 14:32:52 PDT 2011


Hi,

I've added some changes to getopt to change when an options is
accepted/rejected. I'm going to describe its old behavior in contrast
with its old behavior.

Consider parsing an option of Type T:

T timeout;
getopt(args, "t|timeout", &timeout);

Short options (single dash):
-t v accept (was rejected)
-t=v accept
-tv only accept for numeric v (was accepted for all types except associative arrays)

Strange short options:
-timeout v reject
-timeout=v reject (was accepted)
-timeoutv reject

Long options (double dash):
--timeout v accept
--timeout=v accept
--timeoutv reject

Strange long options:
--t v reject (was accepted)
--t=v reject (was accepted)
--tv reject


I would like to know whether you find the new behavior better or if you
prefer the old. Or even a mix of both. Or none of the above.

The current behavior is quite simple if you remember some simple rules:
1. Short options consist of a single dash and a single character.
2. Long options consist of two dashes and more than one character.
3. Passing short and long options is supported by
   <short/long option><space+><value> and <short/long option>=<value>
4. The form <short option><value> is only supported for numeric values.
5. Anything else is not supported and an exception is thrown.

To look at the changes see here:
https://github.com/jkm/phobos/commit/b208eeb142ff5a3f189c2595b9800425646b4794 (fixes old behavior)
https://github.com/jkm/phobos/commit/a25cd2459418d462c85ab14c2d970dd413b4fb05 (introduces new behavior)

Please comment.

Jens


More information about the Digitalmars-d mailing list