MCPcopy Index your code
hub / github.com/RazrFalcon/pico-args

github.com/RazrFalcon/pico-args @v0.5.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.5.0 ↗ · + Follow
113 symbols 305 edges 4 files 16 documented · 14%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

pico-args

Build Status Crates.io Documentation Rust 1.32+

An ultra simple CLI arguments parser.

If you think that this library doesn't support some feature, it's probably intentional.

  • No help generation
  • Only flags, options, free arguments and subcommands are supported
  • Options can be separated by a space, = or nothing. See build features
  • Arguments can be in any order
  • Non UTF-8 arguments are supported

Build features

  • eq-separator

Allows parsing arguments separated by =

This feature adds about 1KiB to the resulting binary

  • short-space-opt

Makes the space between short keys and their values optional (e.g. -w10)

If eq-separator is enabled, then it takes precedence and the '=' is not included.

If eq-separator is disabled, then -K=value gives an error instead of returning "=value".

The optional space is only applicable for short keys because --keyvalue would be ambiguous

  • combined-flags

Allows combination of flags, e.g. -abc instead of -a -b -c

If short-space-opt or eq-separator are enabled, you must parse flags after values, to prevent ambiguities

Limitations

The main fundamental limitation of pico-args is that it parses arguments in an arbitrary order. This is because we have a sort of "steaming" API and we don't know all the keys/arguments beforehand. This could lead to some unexpected behaviors. Specifically, let's say you have a following arguments:

--arg1 --arg2 value

If your parser tries to parse --arg1 as key-value first, than its value would be --arg2 and not value, because the parser simply takes the "next" argument. A properer parser would knew that --arg2 is a key and will return an error, since the value is missing.

If your parser tries to parse --arg2 as a flag first and then --arg1 as key-value, than its value would be value, because --arg2 was already removed by the parser and the arguments list looks like --arg1 value to the parser.

If such behavior is unacceptable to your application, then you have to use a more high-level arguments parsing library.

Alternatives

The core idea of pico-args is to provide some "sugar" for arguments parsing without a lot of overhead (binary or compilation time wise). There are no point in comparing parsing features since pico-args supports only the bare minimum. Here is a great comparison of various arguments parsing libraries.

License

MIT

Core symbols most depended-on inside this repo

opt_value_from_str
called by 31
src/lib.rs
value_from_str
called by 5
src/lib.rs
first
called by 5
src/lib.rs
opt_value_from_fn
called by 4
src/lib.rs
opt_value_from_os_str
called by 4
src/lib.rs
index_of
called by 4
src/lib.rs
error_to_string
called by 4
src/lib.rs
second
called by 4
src/lib.rs

Shape

Function 77
Method 30
Class 4
Enum 2

Languages

Rust100%

Modules by API surface

tests/tests.rs64 symbols
src/lib.rs41 symbols
examples/app.rs5 symbols
examples/dash_dash.rs3 symbols

For agents

$ claude mcp add pico-args \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page