mirror of
https://github.com/CLIUtils/CLI11.git
synced 2025-04-29 12:13:52 +00:00
Adding functional form of Type printout
This commit is contained in:
parent
2b6b62c52c
commit
e7483afc41
@ -538,9 +538,9 @@ class App {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Option *opt = add_option(name, fun, description, false);
|
Option *opt = add_option(name, fun, description, false);
|
||||||
std::string typeval = detail::type_name<T>();
|
opt->set_type_name(
|
||||||
typeval += " in {" + detail::join(options) + "}";
|
[&options]() { return std::string(detail::type_name<T>()) + " in {" + detail::join(options) + "}"; });
|
||||||
opt->set_custom_option(typeval);
|
|
||||||
return opt;
|
return opt;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -589,9 +589,8 @@ class App {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Option *opt = add_option(name, fun, description, defaulted);
|
Option *opt = add_option(name, fun, description, defaulted);
|
||||||
std::string typeval = detail::type_name<T>();
|
opt->set_type_name(
|
||||||
typeval += " in {" + detail::join(options) + "}";
|
[&options]() { return std::string(detail::type_name<T>()) + " in {" + detail::join(options) + "}"; });
|
||||||
opt->set_custom_option(typeval);
|
|
||||||
if(defaulted) {
|
if(defaulted) {
|
||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
out << member;
|
out << member;
|
||||||
@ -649,9 +648,9 @@ class App {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Option *opt = add_option(name, fun, description, false);
|
Option *opt = add_option(name, fun, description, false);
|
||||||
std::string typeval = detail::type_name<std::string>();
|
opt->set_type_name([&options]() {
|
||||||
typeval += " in {" + detail::join(options) + "}";
|
return std::string(detail::type_name<std::string>()) + " in {" + detail::join(options) + "}";
|
||||||
opt->set_custom_option(typeval);
|
});
|
||||||
|
|
||||||
return opt;
|
return opt;
|
||||||
}
|
}
|
||||||
@ -709,9 +708,9 @@ class App {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Option *opt = add_option(name, fun, description, defaulted);
|
Option *opt = add_option(name, fun, description, defaulted);
|
||||||
std::string typeval = detail::type_name<std::string>();
|
opt->set_type_name([&options]() {
|
||||||
typeval += " in {" + detail::join(options) + "}";
|
return std::string(detail::type_name<std::string>()) + " in {" + detail::join(options) + "}";
|
||||||
opt->set_custom_option(typeval);
|
});
|
||||||
if(defaulted) {
|
if(defaulted) {
|
||||||
opt->set_default_str(member);
|
opt->set_default_str(member);
|
||||||
}
|
}
|
||||||
|
@ -193,8 +193,8 @@ inline std::string Formatter::make_option_opts(const Option *opt) const {
|
|||||||
std::stringstream out;
|
std::stringstream out;
|
||||||
|
|
||||||
if(opt->get_type_size() != 0) {
|
if(opt->get_type_size() != 0) {
|
||||||
if(!opt->get_typeval().empty())
|
if(!opt->get_type_name().empty())
|
||||||
out << " " << get_label(opt->get_typeval());
|
out << " " << get_label(opt->get_type_name());
|
||||||
if(!opt->get_defaultval().empty())
|
if(!opt->get_defaultval().empty())
|
||||||
out << "=" << opt->get_defaultval();
|
out << "=" << opt->get_defaultval();
|
||||||
if(opt->get_expected() > 1)
|
if(opt->get_expected() > 1)
|
||||||
|
@ -171,7 +171,7 @@ class Option : public OptionBase<Option> {
|
|||||||
std::string defaultval_;
|
std::string defaultval_;
|
||||||
|
|
||||||
/// A human readable type value, set when App creates this
|
/// A human readable type value, set when App creates this
|
||||||
std::string typeval_;
|
std::function<std::string()> typeval_;
|
||||||
|
|
||||||
/// True if this option has a default
|
/// True if this option has a default
|
||||||
bool default_{false};
|
bool default_{false};
|
||||||
@ -385,9 +385,6 @@ class Option : public OptionBase<Option> {
|
|||||||
/// The number of arguments the option expects
|
/// The number of arguments the option expects
|
||||||
int get_type_size() const { return type_size_; }
|
int get_type_size() const { return type_size_; }
|
||||||
|
|
||||||
/// The type name (for help printing)
|
|
||||||
std::string get_typeval() const { return typeval_; }
|
|
||||||
|
|
||||||
/// The environment variable associated to this value
|
/// The environment variable associated to this value
|
||||||
std::string get_envname() const { return envname_; }
|
std::string get_envname() const { return envname_; }
|
||||||
|
|
||||||
@ -612,7 +609,7 @@ class Option : public OptionBase<Option> {
|
|||||||
|
|
||||||
/// Set a custom option, typestring, type_size
|
/// Set a custom option, typestring, type_size
|
||||||
void set_custom_option(std::string typeval, int type_size = 1) {
|
void set_custom_option(std::string typeval, int type_size = 1) {
|
||||||
typeval_ = typeval;
|
set_type_name(typeval);
|
||||||
type_size_ = type_size;
|
type_size_ = type_size;
|
||||||
if(type_size_ == 0)
|
if(type_size_ == 0)
|
||||||
required_ = false;
|
required_ = false;
|
||||||
@ -633,10 +630,15 @@ class Option : public OptionBase<Option> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Set the type name displayed on this option
|
/// Set the type name displayed on this option
|
||||||
void set_type_name(std::string val) { typeval_ = val; }
|
void set_type_name(std::string typeval) {
|
||||||
|
typeval_ = [typeval]() { return typeval; };
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the type function to run when displayed on this option
|
||||||
|
void set_type_name(std::function<std::string()> typefun) { typeval_ = typefun; }
|
||||||
|
|
||||||
/// Get the typename for this option
|
/// Get the typename for this option
|
||||||
std::string get_type_name() const { return typeval_; }
|
std::string get_type_name() const { return typeval_(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace CLI
|
} // namespace CLI
|
||||||
|
@ -665,4 +665,25 @@ TEST(THelp, CombinedValidatorsPathyText) {
|
|||||||
std::string help = app.help();
|
std::string help = app.help();
|
||||||
EXPECT_THAT(help, Not(HasSubstr("TEXT")));
|
EXPECT_THAT(help, Not(HasSubstr("TEXT")));
|
||||||
EXPECT_THAT(help, HasSubstr("PATH"));
|
EXPECT_THAT(help, HasSubstr("PATH"));
|
||||||
|
|
||||||
|
// #113 Part 2
|
||||||
|
TEST(THelp, ChangingSet) {
|
||||||
|
CLI::App app;
|
||||||
|
|
||||||
|
std::set<int> vals{1, 2, 3};
|
||||||
|
int val;
|
||||||
|
app.add_set("--val", val, vals);
|
||||||
|
|
||||||
|
std::string help = app.help();
|
||||||
|
|
||||||
|
EXPECT_THAT(help, HasSubstr("1"));
|
||||||
|
EXPECT_THAT(help, Not(HasSubstr("4")));
|
||||||
|
|
||||||
|
vals.insert(4);
|
||||||
|
vals.erase(1);
|
||||||
|
|
||||||
|
help = app.help();
|
||||||
|
|
||||||
|
EXPECT_THAT(help, Not(HasSubstr("1")));
|
||||||
|
EXPECT_THAT(help, HasSubstr("4"));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user