Skip to content
This repository has been archived by the owner on Oct 28, 2021. It is now read-only.

Add Version option as a convenience wrapper for version parser #95

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 16 additions & 0 deletions include/clara.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,19 @@ namespace detail {
}
};

struct Version : Opt {
Version( bool &showVersionFlag )
: Opt([&]( bool flag ) {
showVersionFlag = flag;
return ParserResult::ok( ParseResultType::ShortCircuitAll );
})
{
static_cast<Opt &>( *this )
("display version")
["-v"]["--version"]
.optional();
}
};

struct Parser : ParserBase {

Expand Down Expand Up @@ -913,6 +926,9 @@ using detail::ExeName;
// Convenience wrapper for option parser that specifies the help option
using detail::Help;

// Convenience wrapper for option parser that specifies the version option
using detail::Version;

// enum of result types from a parse
using detail::ParseResultType;

Expand Down
13 changes: 13 additions & 0 deletions src/ClaraTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,10 @@ TEST_CASE( "Combined parser" ) {
Config config;

bool showHelp = false;
bool showVersion = false;
auto parser
= Help( showHelp )
| Version(showVersion)
| Opt( config.m_rngSeed, "time|value" )
["--rng-seed"]["-r"]
("set a specific seed for random numbers" )
Expand All @@ -121,6 +123,7 @@ TEST_CASE( "Combined parser" ) {
"\n"
"where options are:\n"
" -?, -h, --help display usage information\n"
" -v, --version display version\n"
" --rng-seed, -r <time|value> set a specific seed for random numbers\n"
" -n, --name <name> the name to use\n"
" -f, --flag a flag to set\n"
Expand All @@ -136,13 +139,23 @@ TEST_CASE( "Combined parser" ) {
REQUIRE( config.m_value == 123.45 );
REQUIRE( config.m_tests == std::vector<std::string> { "test1", "test2" } );
CHECK( showHelp == false );
CHECK( showVersion == false);
}
SECTION( "help" ) {
auto result = parser.parse( Args{ "TestApp", "-?", "-n:NotSet" } );
CHECK( result );
CHECK( result.value().type() == ParseResultType::ShortCircuitAll );
CHECK( config.m_name == "" ); // We should never have processed -n:NotSet
CHECK( showHelp == true );
CHECK( showVersion == false);
}
SECTION( "version" ) {
auto result = parser.parse( Args{ "TestApp", "-v", "-n:NotSet" } );
CHECK( result );
CHECK( result.value().type() == ParseResultType::ShortCircuitAll );
CHECK( config.m_name == "" ); // We should never have processed -n:NotSet
CHECK( showHelp == false );
CHECK( showVersion == true );
}
}

Expand Down