From 2a15178bb75b4d23d601919cd00612da178938f6 Mon Sep 17 00:00:00 2001 From: Sean Robinson Date: Fri, 23 Sep 2022 07:44:33 -0700 Subject: [PATCH 1/2] Include canonical argument name in nargs range validation error The name of a positional argument is never used. Closes #208 Signed-off-by: Sean Robinson --- include/argparse/argparse.hpp | 2 ++ test/test_positional_arguments.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/include/argparse/argparse.hpp b/include/argparse/argparse.hpp index 5e826c5..9465827 100644 --- a/include/argparse/argparse.hpp +++ b/include/argparse/argparse.hpp @@ -758,6 +758,8 @@ private: std::stringstream stream; if (!m_used_name.empty()) { stream << m_used_name << ": "; + } else { + stream << m_names.front() << ": "; } if (m_num_args_range.is_exact()) { stream << m_num_args_range.get_min(); diff --git a/test/test_positional_arguments.cpp b/test/test_positional_arguments.cpp index 0875669..cfee488 100644 --- a/test/test_positional_arguments.cpp +++ b/test/test_positional_arguments.cpp @@ -18,7 +18,7 @@ TEST_CASE("Missing expected positional argument" * argparse::ArgumentParser program("test"); program.add_argument("input"); REQUIRE_THROWS_WITH_AS(program.parse_args({"test"}), - "1 argument(s) expected. 0 provided.", + "input: 1 argument(s) expected. 0 provided.", std::runtime_error); } From 50e3afd81ddc71c05f8ad0667fcfd8c760554240 Mon Sep 17 00:00:00 2001 From: Sean Robinson Date: Fri, 23 Sep 2022 08:05:33 -0700 Subject: [PATCH 2/2] Replace vector::operator[] use with vector::front This is mostly a style change to match other parts of the code. Signed-off-by: Sean Robinson --- include/argparse/argparse.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/argparse/argparse.hpp b/include/argparse/argparse.hpp index 9465827..a807919 100644 --- a/include/argparse/argparse.hpp +++ b/include/argparse/argparse.hpp @@ -597,7 +597,7 @@ public: std::string get_inline_usage() const { std::stringstream usage; // Find the longest variant to show in the usage string - std::string longest_name = m_names[0]; + std::string longest_name = m_names.front(); for (const auto &s : m_names) { if (s.size() > longest_name.size()) { longest_name = s; @@ -775,7 +775,7 @@ private: void throw_required_arg_not_used_error() const { std::stringstream stream; - stream << m_names[0] << ": required."; + stream << m_names.front() << ": required."; throw std::runtime_error(stream.str()); } @@ -1343,9 +1343,9 @@ public: // Add any options inline here for (const auto &argument : this->m_optional_arguments) { - if (argument.m_names[0] == "-v") { + if (argument.m_names.front() == "-v") { continue; - } else if (argument.m_names[0] == "-h") { + } else if (argument.m_names.front() == "-h") { stream << " [-h]"; } else { stream << " " << argument.get_inline_usage();