Updated formatting of error message, showing all variations of argument name

This commit is contained in:
Pranav Srinivas Kumar 2023-11-03 22:18:08 -05:00
parent 78ba5e9828
commit 7657a22001
4 changed files with 20 additions and 6 deletions

View File

@ -816,18 +816,18 @@ public:
} }
} }
std::string get_names_csv() const { std::string get_names_csv(char separator = ',') const {
return std::accumulate( return std::accumulate(
m_names.begin(), m_names.end(), std::string{""}, m_names.begin(), m_names.end(), std::string{""},
[](const std::string &result, const std::string &name) { [&](const std::string &result, const std::string &name) {
return result.empty() ? name : result + ',' + name; return result.empty() ? name : result + separator + name;
}); });
} }
std::string get_usage_full() const { std::string get_usage_full() const {
std::stringstream usage; std::stringstream usage;
usage << get_names_csv(); usage << get_names_csv('/');
const std::string metavar = !m_metavar.empty() ? m_metavar : "VAR"; const std::string metavar = !m_metavar.empty() ? m_metavar : "VAR";
if (m_num_args_range.get_max() > 0) { if (m_num_args_range.get_max() > 0) {
usage << " " << metavar; usage << " " << metavar;

View File

@ -2,7 +2,7 @@
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
argparse::ArgumentParser program; argparse::ArgumentParser program;
program.add_argument("-a").required(); program.add_argument("-a", "--number-of-apples");
program.add_argument("-b", "--bro").required(); program.add_argument("-b", "--bro");
program.parse_args(argc, argv); program.parse_args(argc, argv);
} }

Binary file not shown.

View File

@ -35,6 +35,20 @@ TEST_CASE("Missing optional argument name" * test_suite("error_reporting")) {
} }
} }
TEST_CASE("Missing optional argument name (multiple names)" *
test_suite("error_reporting")) {
argparse::ArgumentParser parser("test");
parser.add_argument("-a", "--number-of-apples");
parser.add_argument("-b");
SUBCASE("Bad case 2") {
REQUIRE_THROWS_WITH_AS(parser.parse_args({"test", "1", "2"}),
"Zero positional arguments expected, did you mean "
"-a/--number-of-apples VAR",
std::runtime_error);
}
}
TEST_CASE("Missing optional argument name with other positional arguments" * TEST_CASE("Missing optional argument name with other positional arguments" *
test_suite("error_reporting")) { test_suite("error_reporting")) {
argparse::ArgumentParser parser("test"); argparse::ArgumentParser parser("test");