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:
parent
e4a2a5c074
commit
a537095e1f
|
@ -29,7 +29,16 @@ void Args::removeFlag(const std::string & longName)
|
||||||
|
|
||||||
void Completions::add(std::string completion, std::string description)
|
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 {
|
insert(Completion {
|
||||||
.completion = completion,
|
.completion = completion,
|
||||||
.description = description
|
.description = description
|
||||||
|
|
Loading…
Reference in a new issue