August 25, 2021

I've rewritten JCLI, and this is the first release where I think it's useable again: https://code.dlang.org/packages/jcli

Here's a snippet from the README

Features

  • Building:

    • This library was primarily built using Meson as the build system, so should be fully integratable into other Meson projects.

    • All individual parts of this library are intended to be reusable. Allowing you to build your own CLI core using these already-made components, if desired.

    • All individual parts of this library are split into sub packages, so you can only include what you need if you're not using the main jcli package.

  • Argument parsing:

    • Named and positional arguments.

    • Boolean arguments (flags).

    • Optional arguments using the standard Nullable type.

    • User-Defined argument binding (string -> any_type_you_want) - blanket and per-argument.

    • User-Defined argument validation (via UDAs that follow a convention).

    • Pass through unparsed arguments (./mytool parsed args -- these are unparsed args).

    • Capture overflowed arguments (./mytool arg1 arg2 overflow1 overflow2)

    • Automatic error messages for missing and malformed arguments.

  • Commands:

    • Standard command line format (./mytool command args --flag=value ...).

    • Automatic command dispatch.

    • Defined using UDAs, and are automatically discovered.

    • Supports a default command.

    • Supports named commands that allow for multiple words and per-command argument parsing.

    • Support for command inheritance (currently broken).

    • Only structs are allowed for the moment.

  • Help text:

    • Automatically generated with slight ability for customisation.

    • Works for the default command.

    • Works for exact matches for named commands.

    • Works for partial matches for named commands.

    • Arguments can be displayed in organised groups.

  • Utilities:

    • Bash completion support. (will be reimplemented soon)

    • Decent support for writing and parsing ANSI text via jansi.

    • An ANSI-enabled text buffer, for easier and efficient control over coloured, non-uniform text output.

In the future I'd like to get a few things done, namely:

  • Reimplement bash completion.

  • Reimplement command partial match completion (right now it'll just display every command known)

  • Maybe add back in dependency injection and a basic configuration interface, but I'm not sure it was ever really useful.

  • Add more tooling for text output. Progress bars, tables, etc.

  • Figure out how I want to handle arguments that are of an array type. Currently because arg binding is extensible you can implement your own solutions, but I'd like a default, built-in one.

  • Make sure there's no leftovers in the README of the pre-rewrite version of JCLI.

Any thoughts and comments are welcome.

August 25, 2021

On Wednesday, 25 August 2021 at 09:18:50 UTC, SealabJaster wrote:

>

...

Oh, I'd also like to redocument the code. The old code was almost 50% comments or something, and the rewrite has almost no comments.