1
0
mirror of https://github.com/CLIUtils/CLI11.git synced 2025-04-29 12:13:52 +00:00

Adding ->parsed

This commit is contained in:
Henry Fredrick Schreiner 2017-04-23 14:20:23 -04:00
parent 8218425eb0
commit de432f6213
4 changed files with 10 additions and 3 deletions

View File

@ -6,7 +6,7 @@
* Ini no longer lists the help pointer
* Added test for inclusion in multiple files and linking, fixed issues (rarely needed for CLI, but nice for tools)
* Support for complex numbers
* Subcommands now test true/false directly, cleaner parse
* Subcommands now test true/false directly or with `->parsed()`, cleaner parse
## Version 0.8

View File

@ -168,8 +168,8 @@ Subcommands are supported, and can be nested infinitely. To add a subcommand, ca
case).
If you want to require at least one subcommand is given, use `.require_subcommand()` on the parent app. You can optionally give an exact number of subcommands to require, as well.
If an App (main or subcommand) has been parsed on the command line, it's "value" is true, and it is false otherwise.
All `App`s have a `get_subcommands()` method, which returns a list of pointers to the subcommands passed on the command line. A `got_subcommand(App_or_name)` method is also provided that will check to see if an App pointer or a string name was collected on the command line.
If an `App` (main or subcommand) has been parsed on the command line, `->parsed` will be true (or convert directly to bool).
All `App`s have a `get_subcommands()` method, which returns a list of pointers to the subcommands passed on the command line. A `got_subcommand(App_or_name)` method is also provided that will check to see if an `App` pointer or a string name was collected on the command line.
For many cases, however, using an app's callback may be easier. Every app executes a callback function after it parses; just use a lambda function (with capture to get parsed values) to `.set_callback`. If you throw `CLI::Success`, you can
even exit the program through the callback. The main `App` has a callback slot, as well, but it is generally not as useful.
@ -184,6 +184,7 @@ There are several options that are supported on the main app and subcommands. Th
* `.add_subcommand(name, description="")` Add a subcommand, returns a pointer to the internally stored subcommand.
* `.got_subcommand(App_or_name)`: Check to see if a subcommand was received on the command line
* `.get_subcommands()`: The list of subcommands given on the command line
* `.parsed()`: True if this subcommand was given on the command line
* `.set_callback(void() function)`: Set the callback that runs at the end of parsing. The options have already run at this point.
* `.allow_extras()`: Do not throw an error if extra arguments are left over (Only useful on the main `App`, as that's the one that throws errors).

View File

@ -169,6 +169,10 @@ public:
}
/// Check to see if this subcommand was parsed, true only if received on command line.
bool parsed() const {return parsed_;}
/// Check to see if this subcommand was parsed, true only if received on command line.
/// This allows the subcommand to be directly checked.
operator bool () const { return parsed_;}
/// Require a subcommand to be given (does not affect help call)

View File

@ -40,6 +40,7 @@ TEST_F(TApp, MultiSubFallthrough) {
EXPECT_TRUE(app.got_subcommand("sub1"));
EXPECT_TRUE(app.got_subcommand(sub1));
EXPECT_TRUE(*sub1);
EXPECT_TRUE(sub1->parsed());
EXPECT_TRUE(app.got_subcommand("sub2"));
EXPECT_TRUE(app.got_subcommand(sub2));
@ -69,6 +70,7 @@ TEST_F(TApp, MultiSubFallthrough) {
EXPECT_TRUE(*sub1);
EXPECT_FALSE(*sub2);
EXPECT_FALSE(sub2->parsed());
EXPECT_THROW(app.got_subcommand("sub3"), CLI::OptionNotFound);
}