mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-05-07 23:33:52 +00:00
Added basic support for writing description to config string.
This commit is contained in:
parent
67cd2e6345
commit
97b1def525
@ -809,35 +809,46 @@ class App {
|
||||
|
||||
/// Produce a string that could be read in as a config of the current values of the App. Set default_also to include
|
||||
/// default arguments. Prefix will add a string to the beginning of each option.
|
||||
std::string config_to_str(bool default_also = false, std::string prefix = "") const {
|
||||
std::string config_to_str(bool default_also = false, std::string prefix = "", bool write_description = false) const {
|
||||
std::stringstream out;
|
||||
for(const Option_p &opt : options_) {
|
||||
|
||||
// Only process option with a long-name and configurable
|
||||
if(!opt->lnames_.empty() && opt->get_configurable()) {
|
||||
std::string name = prefix + opt->lnames_[0];
|
||||
std::string value;
|
||||
|
||||
// Non-flags
|
||||
if(opt->get_expected() != 0) {
|
||||
|
||||
// If the option was found on command line
|
||||
if(opt->count() > 0)
|
||||
out << name << "=" << detail::inijoin(opt->results()) << std::endl;
|
||||
value = detail::inijoin(opt->results());
|
||||
|
||||
// If the option has a default and is requested by optional argument
|
||||
else if(default_also && !opt->defaultval_.empty())
|
||||
out << name << "=" << opt->defaultval_ << std::endl;
|
||||
value = opt->defaultval_;
|
||||
// Flag, one passed
|
||||
} else if(opt->count() == 1) {
|
||||
out << name << "=true" << std::endl;
|
||||
value = "true";
|
||||
|
||||
// Flag, multiple passed
|
||||
} else if(opt->count() > 1) {
|
||||
out << name << "=" << opt->count() << std::endl;
|
||||
value = std::to_string(opt->count());
|
||||
|
||||
// Flag, not present
|
||||
} else if(opt->count() == 0 && default_also) {
|
||||
out << name << "=false" << std::endl;
|
||||
value = "false";
|
||||
}
|
||||
|
||||
if (value.size() != 0) {
|
||||
if (write_description and opt->description_.size() != 0) {
|
||||
if (out.tellp() != 0) {
|
||||
out << std::endl;
|
||||
}
|
||||
out << "; " << opt->description_ << std::endl;
|
||||
}
|
||||
out << name << "=" << value << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -575,6 +575,31 @@ TEST_F(TApp, IniOutputNoConfigurable) {
|
||||
EXPECT_EQ("simple=3\n", str);
|
||||
}
|
||||
|
||||
TEST_F(TApp, IniOutputShortSingleDescription) {
|
||||
std::string flag = "some_flag";
|
||||
std::string description = "Some short description.";
|
||||
app.add_flag("--" + flag, description);
|
||||
|
||||
run();
|
||||
|
||||
std::string str = app.config_to_str(true, "", true);
|
||||
EXPECT_THAT(str, HasSubstr("; " + description + "\n" + flag + "=false\n"));
|
||||
}
|
||||
|
||||
TEST_F(TApp, IniOutputShortDoubleDescription) {
|
||||
std::string flag1 = "flagnr1";
|
||||
std::string flag2 = "flagnr2";
|
||||
std::string description1 = "First description.";
|
||||
std::string description2 = "Second description.";
|
||||
app.add_flag("--" + flag1, description1);
|
||||
app.add_flag("--" + flag2, description2);
|
||||
|
||||
run();
|
||||
|
||||
std::string str = app.config_to_str(true, "", true);
|
||||
EXPECT_EQ(str, "; " + description1 + "\n" + flag1 + "=false\n\n; " + description2 + "\n" + flag2 + "=false\n");
|
||||
}
|
||||
|
||||
TEST_F(TApp, IniOutputVector) {
|
||||
|
||||
std::vector<int> v;
|
||||
|
Loading…
x
Reference in New Issue
Block a user