diff options
author | Taylor C. Richberger <taywee@gmx.com> | 2019-06-25 14:01:10 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-25 14:01:10 -0600 |
commit | 401663c1d57006566db6d8e5b37a21018fbd0bc3 (patch) | |
tree | b1ed4402bd951afe4dbc59613274321dd35a3bd2 /args.hxx | |
parent | Merge pull request #76 from pavel-belikov/fix-default-value-parser (diff) | |
parent | Fixes #74 : Fix group validation in Subparser/Command (diff) | |
download | args.hxx-401663c1d57006566db6d8e5b37a21018fbd0bc3.tar.xz |
Merge pull request #77 from pavel-belikov/subparser-group-validation
Fix group validation in Subparser/Command
Diffstat (limited to 'args.hxx')
-rw-r--r-- | args.hxx | 29 |
1 files changed, 19 insertions, 10 deletions
@@ -1633,11 +1633,11 @@ namespace args public: Subparser(std::vector<std::string> args_, ArgumentParser &parser_, const Command &command_, const HelpParams &helpParams_) - : args(std::move(args_)), parser(&parser_), helpParams(helpParams_), command(command_) + : Group({}, Validators::AllChildGroups), args(std::move(args_)), parser(&parser_), helpParams(helpParams_), command(command_) { } - Subparser(const Command &command_, const HelpParams &helpParams_) : helpParams(helpParams_), command(command_) + Subparser(const Command &command_, const HelpParams &helpParams_) : Group({}, Validators::AllChildGroups), helpParams(helpParams_), command(command_) { } @@ -2128,18 +2128,23 @@ namespace args return; } - for (Base *child: Children()) + auto onValidationError = [&] { - if (child->IsGroup() && !child->Matched()) - { - std::ostringstream problem; - problem << "Group validation failed somewhere!"; + std::ostringstream problem; + problem << "Group validation failed somewhere!"; #ifdef ARGS_NOEXCEPT - error = Error::Validation; - errorMsg = problem.str(); + error = Error::Validation; + errorMsg = problem.str(); #else - throw ValidationError(problem.str()); + throw ValidationError(problem.str()); #endif + }; + + for (Base *child: Children()) + { + if (child->IsGroup() && !child->Matched()) + { + onValidationError(); } child->Validate(shortprefix, longprefix); @@ -2148,6 +2153,10 @@ namespace args if (subparser != nullptr) { subparser->Validate(shortprefix, longprefix); + if (!subparser->Matched()) + { + onValidationError(); + } } if (selectedCommand == nullptr && commandIsRequired && (Group::HasCommand() || subparserHasCommand)) |