From 09c08271ca26981318e69417b35c8b88fd4572ac Mon Sep 17 00:00:00 2001 From: Spmn Date: Wed, 30 Sep 2020 01:45:51 +0300 Subject: [PATCH] Fix empty option name in `OptionException` --- include/cxxopts.hpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/include/cxxopts.hpp b/include/cxxopts.hpp index 96881d6..4f9ffa8 100644 --- a/include/cxxopts.hpp +++ b/include/cxxopts.hpp @@ -456,7 +456,7 @@ namespace cxxopts public: explicit option_has_no_value_exception(const std::string& option) : OptionException( - option.empty() ? + !option.empty() ? ("Option " + LQUOTE + option + RQUOTE + " has no value") : "Option has no value") { @@ -1122,6 +1122,12 @@ namespace cxxopts m_value->parse(); } + void + parse_no_value(const std::shared_ptr& details) + { + m_long_name = &details->long_name(); + } + CXXOPTS_NODISCARD size_t count() const noexcept @@ -1354,6 +1360,9 @@ namespace cxxopts void parse_default(const std::shared_ptr& details); + void + parse_no_value(const std::shared_ptr& details); + private: void finalise_aliases(); @@ -1751,6 +1760,14 @@ OptionParser::parse_default(const std::shared_ptr& details) store.parse_default(details); } +inline +void +OptionParser::parse_no_value(const std::shared_ptr& details) +{ + auto& store = m_parsed[details->hash()]; + store.parse_no_value(details); +} + inline void OptionParser::parse_option @@ -2002,8 +2019,13 @@ OptionParser::parse(int argc, const char** argv) auto& store = m_parsed[detail->hash()]; - if(value.has_default() && !store.count() && !store.has_default()){ - parse_default(detail); + if (value.has_default()) { + if (!store.count() && !store.has_default()) { + parse_default(detail); + } + } + else { + parse_no_value(detail); } }