usage(): do not emit blank line when a single argument exceeds set_usage_max_line_width()

This commit is contained in:
Even Rouault 2025-01-20 15:55:01 +01:00
parent cbd9fd8ed6
commit 9b4c63a2d8
No known key found for this signature in database
GPG Key ID: 33EBBFC47B3DD87D
2 changed files with 12 additions and 1 deletions

View File

@ -2128,7 +2128,8 @@ public:
} }
} }
cur_mutex = arg_mutex; cur_mutex = arg_mutex;
if (curline.size() + 1 + arg_inline_usage.size() > if (curline.size() != indent_size &&
curline.size() + 1 + arg_inline_usage.size() >
this->m_usage_max_line_width) { this->m_usage_max_line_width) {
stream << curline << std::endl; stream << curline << std::endl;
curline = std::string(indent_size, ' '); curline = std::string(indent_size, ' ');

View File

@ -244,3 +244,13 @@ TEST_CASE("multiline usage, break on mutex") {
" [--will-go-on-new-line]\n" " [--will-go-on-new-line]\n"
" [--on-a-dedicated-line]"); " [--on-a-dedicated-line]");
} }
TEST_CASE("multiline usage, single arg that is larger than the max width") {
argparse::ArgumentParser program("program");
program.set_usage_max_line_width(80);
program.add_argument("--lots-of-choices").metavar("<veeeeeeeeeeeeeeeeeeeeeeeeeeery_long|veeeeeeeeeeeeeeeeeeeery_long2>");
// std::cout << "DEBUG:" << program.usage() << std::endl;
REQUIRE(program.usage() ==
"Usage: program [--help] [--version]\n"
" [--lots-of-choices <veeeeeeeeeeeeeeeeeeeeeeeeeeery_long|veeeeeeeeeeeeeeeeeeeery_long2>]");
}