Commit de432f62137e59241fd0eecb6590395d6ec8ac57

Authored by Henry Fredrick Schreiner
1 parent 8218425e

Adding ->parsed

CHANGELOG.md
@@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
6 * Ini no longer lists the help pointer 6 * Ini no longer lists the help pointer
7 * Added test for inclusion in multiple files and linking, fixed issues (rarely needed for CLI, but nice for tools) 7 * Added test for inclusion in multiple files and linking, fixed issues (rarely needed for CLI, but nice for tools)
8 * Support for complex numbers 8 * Support for complex numbers
9 -* Subcommands now test true/false directly, cleaner parse 9 +* Subcommands now test true/false directly or with `->parsed()`, cleaner parse
10 10
11 ## Version 0.8 11 ## Version 0.8
12 12
README.md
@@ -168,8 +168,8 @@ Subcommands are supported, and can be nested infinitely. To add a subcommand, ca @@ -168,8 +168,8 @@ Subcommands are supported, and can be nested infinitely. To add a subcommand, ca
168 case). 168 case).
169 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. 169 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.
170 170
171 -If an App (main or subcommand) has been parsed on the command line, it's "value" is true, and it is false otherwise.  
172 -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. 171 +If an `App` (main or subcommand) has been parsed on the command line, `->parsed` will be true (or convert directly to bool).
  172 +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.
173 173
174 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 174 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
175 even exit the program through the callback. The main `App` has a callback slot, as well, but it is generally not as useful. 175 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 @@ -184,6 +184,7 @@ There are several options that are supported on the main app and subcommands. Th
184 * `.add_subcommand(name, description="")` Add a subcommand, returns a pointer to the internally stored subcommand. 184 * `.add_subcommand(name, description="")` Add a subcommand, returns a pointer to the internally stored subcommand.
185 * `.got_subcommand(App_or_name)`: Check to see if a subcommand was received on the command line 185 * `.got_subcommand(App_or_name)`: Check to see if a subcommand was received on the command line
186 * `.get_subcommands()`: The list of subcommands given on the command line 186 * `.get_subcommands()`: The list of subcommands given on the command line
  187 +* `.parsed()`: True if this subcommand was given on the command line
187 * `.set_callback(void() function)`: Set the callback that runs at the end of parsing. The options have already run at this point. 188 * `.set_callback(void() function)`: Set the callback that runs at the end of parsing. The options have already run at this point.
188 * `.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). 189 * `.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).
189 190
include/CLI/App.hpp
@@ -169,6 +169,10 @@ public: @@ -169,6 +169,10 @@ public:
169 } 169 }
170 170
171 /// Check to see if this subcommand was parsed, true only if received on command line. 171 /// Check to see if this subcommand was parsed, true only if received on command line.
  172 + bool parsed() const {return parsed_;}
  173 +
  174 + /// Check to see if this subcommand was parsed, true only if received on command line.
  175 + /// This allows the subcommand to be directly checked.
172 operator bool () const { return parsed_;} 176 operator bool () const { return parsed_;}
173 177
174 /// Require a subcommand to be given (does not affect help call) 178 /// Require a subcommand to be given (does not affect help call)
tests/SubcommandTest.cpp
@@ -40,6 +40,7 @@ TEST_F(TApp, MultiSubFallthrough) { @@ -40,6 +40,7 @@ TEST_F(TApp, MultiSubFallthrough) {
40 EXPECT_TRUE(app.got_subcommand("sub1")); 40 EXPECT_TRUE(app.got_subcommand("sub1"));
41 EXPECT_TRUE(app.got_subcommand(sub1)); 41 EXPECT_TRUE(app.got_subcommand(sub1));
42 EXPECT_TRUE(*sub1); 42 EXPECT_TRUE(*sub1);
  43 + EXPECT_TRUE(sub1->parsed());
43 44
44 EXPECT_TRUE(app.got_subcommand("sub2")); 45 EXPECT_TRUE(app.got_subcommand("sub2"));
45 EXPECT_TRUE(app.got_subcommand(sub2)); 46 EXPECT_TRUE(app.got_subcommand(sub2));
@@ -69,6 +70,7 @@ TEST_F(TApp, MultiSubFallthrough) { @@ -69,6 +70,7 @@ TEST_F(TApp, MultiSubFallthrough) {
69 70
70 EXPECT_TRUE(*sub1); 71 EXPECT_TRUE(*sub1);
71 EXPECT_FALSE(*sub2); 72 EXPECT_FALSE(*sub2);
  73 + EXPECT_FALSE(sub2->parsed());
72 74
73 EXPECT_THROW(app.got_subcommand("sub3"), CLI::OptionNotFound); 75 EXPECT_THROW(app.got_subcommand("sub3"), CLI::OptionNotFound);
74 } 76 }