D port of docopt
Sönke Ludwig via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Mon Jun 16 13:43:56 PDT 2014
Am 16.06.2014 20:19, schrieb Bob Tolbert:
> On Monday, 16 June 2014 at 17:59:13 UTC, Sönke Ludwig wrote:
>> Am 15.06.2014 19:35, schrieb Bob Tolbert:
>
>>
>> One thing that would be nice is support for multiple help screens
>> (e.g. one per command). For DUB [1] (or GIT) for example there is one
>> main help screen that lists all commands along with common options and
>> then one help screen per command that lists the individual arguments,
>> options and a summary of what the command does. But maybe for such
>> more complex CLIs it starts to be more efficient to use a programmatic
>> approach.
>>
>
> if you have a look at the gitD examples, they do just this. If you do
>
> gitD --help
>
> you get the general help for gitD, but if you do
>
> gitD push -h
> or
> gitD help push
>
> you get the help for the sub-command "push"
>
> so doing this with 'dub' would be pretty simple.
>
> And you don't have to use external sub-commands either. You can parse
> the basic args with the general doc string and then based on the
> sub-command chosen, re-parse with the options specific to that sub module.
>
> I haven't looked at the dub source code, but I'd be happy to help sketch
> out how this might work there specifically.
>
> Bob
>
Ah OK, nice. I was somehow under the impression that all options would
have to match exactly with what is in the help text. But nesting works
fine like this of course.
As for DUB, it probably doesn't make sense to rewrite the CLI now for no
particular reason. Its command line interface maybe isn't as concise as
a docopt based one, but still does pretty well and also has a few
possible advantages, such as direct type validation and automatic
assembly of help pages with nested options (the help text includes both,
global and command specific options, as well as possible intermediate
level options that are shared among several commands).
Currently, everything is in a single module (the "framework" and all
commands), but that is supposed to be broken up into multiple modules in
the future:
https://github.com/D-Programming-Language/dub/blob/master/source/dub/commandline.d
More information about the Digitalmars-d-announce
mailing list