Fix empty option name in OptionException (#256)

Fix bug where option name is missing in error.
This commit is contained in:
spmn 2021-05-06 01:45:15 +03:00 committed by GitHub
parent c04f8a5bb9
commit 056a6281ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -487,7 +487,7 @@ namespace cxxopts
public: public:
explicit option_has_no_value_exception(const std::string& option) explicit option_has_no_value_exception(const std::string& option)
: OptionException( : OptionException(
option.empty() ? !option.empty() ?
("Option " + LQUOTE + option + RQUOTE + " has no value") : ("Option " + LQUOTE + option + RQUOTE + " has no value") :
"Option has no value") "Option has no value")
{ {
@ -1380,13 +1380,19 @@ namespace cxxopts
m_value->parse(); m_value->parse();
} }
void
parse_no_value(const std::shared_ptr<const OptionDetails>& details)
{
m_long_name = &details->long_name();
}
#if defined(__GNUC__) #if defined(__GNUC__)
#if __GNUC__ <= 10 && __GNUC_MINOR__ <= 1 #if __GNUC__ <= 10 && __GNUC_MINOR__ <= 1
#pragma GCC diagnostic push #pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Werror=null-dereference" #pragma GCC diagnostic ignored "-Werror=null-dereference"
#endif #endif
#endif #endif
CXXOPTS_NODISCARD CXXOPTS_NODISCARD
size_t size_t
count() const noexcept count() const noexcept
@ -1625,6 +1631,9 @@ namespace cxxopts
void void
parse_default(const std::shared_ptr<OptionDetails>& details); parse_default(const std::shared_ptr<OptionDetails>& details);
void
parse_no_value(const std::shared_ptr<OptionDetails>& details);
private: private:
void finalise_aliases(); void finalise_aliases();
@ -2081,6 +2090,14 @@ OptionParser::parse_default(const std::shared_ptr<OptionDetails>& details)
store.parse_default(details); store.parse_default(details);
} }
inline
void
OptionParser::parse_no_value(const std::shared_ptr<OptionDetails>& details)
{
auto& store = m_parsed[details->hash()];
store.parse_no_value(details);
}
inline inline
void void
OptionParser::parse_option OptionParser::parse_option
@ -2332,8 +2349,13 @@ OptionParser::parse(int argc, const char* const* argv)
auto& store = m_parsed[detail->hash()]; auto& store = m_parsed[detail->hash()];
if(value.has_default() && !store.count() && !store.has_default()){ if (value.has_default()) {
parse_default(detail); if (!store.count() && !store.has_default()) {
parse_default(detail);
}
}
else {
parse_no_value(detail);
} }
} }