The converters are hooked up, including some weird magic under the hood to automatically handle multi-values as well as the many-to-one case of the structure. The many-to-many case of arrays/slices is not currently handled, but it should be straightforward to do. Hooking up subcommands should be pretty straightforward if I've designed this correctly, so that will be next. The final major piece of the puzzle is help text generation, which in theory can be largely carried over from the old implementation. The error handling is very poorly done right now as well, and I need to figure out a strategy. My plan for converters is to pass in a writable buffer that the parser owns that they can write messages to when they fail, to provide useful context. I will need to figure out how this works for recursive converters (e.g. the struct converter) since the failure happens inside-out, but the error message will read much better if it's composed outside-in. There are many ways to tackle this. The code will also need to be restructured to not be a monolithic 1000 line file.
== nearly obvious command line interface parser A zig library for composing declarative command-line interfaces. Heavily inspired by https://click.palletsprojects.com/[click] for Python. == Extemporaneous Bloviation [quote, George "Albert Einstein" Washington] ____ The alarm rings, and expletives spill from my mouth—instinctively, before any neuron has a chance to fire. You'd think this would get easier, having done it at least 12000 times, but I guess it just goes to show that practice does not necessarily converge on perfection, no matter what infinite limit t approaches. Eyes clamped shut against the encroaching underglow spilling from the curtains, I stretch my arms straight out from my sides and proceed to lose my balance, flying horizontally off of the mattress. An attempt at attitude control fails vigorously and I begin cartwheeling through open space, asserting a lopsided trajectory that intersects with the roof of the house. Passing through it unencumbered, I careen skyward and watch the ground recede into the distance, as the features of the landscape shrink and pop out of existence. ____ == Hello Requires Zig `0.10.0` or maybe better. Uses stage2-only features. === Features * short- (`-s`) and long- (`--long`) style options * short options can be chained (e.g. `-abc` is the same as `-a -b -c`) * conventional `--` to force early of argument parsing * option values are deserialized into rich types using conversion callback functions * can specify default values for options that may be omitted * options can be bound to load from environmental variables if not specified directly * nested subcommands (e.g. for `git`-style CLIs (`command subcommand subsubcommand`)) === Planned * help text generation * better error reporting * better build system === Under consideration * multi-value option flags * shell completion integration * `--long=value` style of value specification * Is it actually possible for a published written document to truly be extemporaneous? === Use `zig build demo` for a demo. Otherwise just copy the file or use a submodule or something. == LICENSE INTERNET SOFTWARE CONSORTIUM LICENSE
Description
Languages
Zig
100%