Git Product home page Git Product logo

zig-plain-argparse's Introduction

zig-plain-argparse

[WIP] A "plain" argument parsing library for Zig.

The key feature is that it parses arguments imperatively (not declaratively).

This makes it lower-level than zig-clap, which is more declarative (and probably better for general use).

Motiviation

Hopefully this more imperitive design reduce the amount of compile time magic . :)

I couldn't understand zig-clap well enough to implement "proper" subcommands.

In this more imperative style of parsing, subcommands are not a problem because they are just positional values.

You can parse a subcommand as a Zig enum, then create a new parser for the remaining arguments.

Also another plus side is zero allocation ;)

Features

  • Good error messages (descriptive errors)
  • Zero allocation (Parser is a thin wrapper around [][]const u8)
  • Imperative argument parsing (hopefully) minimizes comptime complexity
  • Support for subcommands follows nicely from the simplicity
    • See examples for this (TODO)

Missing features (TODO?)

  • Automatic help generation
    • This would be nice
  • More tests

zig-plain-argparse's People

Contributors

techcable avatar

Watchers

James Cloos avatar  avatar  avatar

zig-plain-argparse's Issues

Improve context for missing argument error messages

Right now missing arguments always give messages in the form "ERROR: Expected 3 positional args but only got 2", regardless of whether or not the argument is actually positional :(

Examples:

  1. hello --msg gives "ERROR: Expected 3 positional args but only got 2". However, the real problem is that --msg expects an argument
  2. Missing a subcommand gives "ERROR: Expected 1 positional args but only got 0" where it should mention subcommand somehow

Automatic help generation

Difficult to do because we are imperative. I forgot how I did it for plainlibs.

Maybe add aArgEnumInfo.help field given to match_flag_enum?.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.