Infer short completion descriptions for commandline flags

Descriptions for commandline flags may not include newlines and should
be rather short for display in a shell. Truncate the description string
of a flag on '\n' or '.' to and add an ellipsis if needed.
This commit is contained in:
Philipp Jungkamp 2023-02-10 18:03:19 +01:00
parent e4a2a5c074
commit a537095e1f

View file

@ -29,7 +29,16 @@ void Args::removeFlag(const std::string & longName)
void Completions::add(std::string completion, std::string description)
{
assert(description.find('\n') == std::string::npos);
// strip whitespace/empty lines from the front of the description
description.erase(0, description.find_first_not_of(" \t\n"));
// ellipsize overflowing content on the back of the description
auto end_index = description.find_first_of(".\n");
if (end_index != std::string::npos) {
auto needs_ellipsis = end_index != description.size() - 1;
description.resize(end_index);
if (needs_ellipsis)
description.append(" [...]");
}
insert(Completion {
.completion = completion,
.description = description