diff --git a/CHANGELOG.md b/CHANGELOG.md index d9b05d29..8a110b2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ Validators are now much more powerful [#118], all built in validators upgraded t Other changes: +* Dropped `set_*` names on options, using `type_name` and `type_size` instead of `set_custom_option`. Methods return this. * Added `->each()` to make adding custom callbacks easier [#126] * Added filter argument to `get_subcommands`, `get_options`; use empty filter `{}` to avoid filtering * Added `get_groups()` to get groups diff --git a/README.md b/README.md index 10c50049..5ba1372c 100644 --- a/README.md +++ b/README.md @@ -180,7 +180,8 @@ The add commands return a pointer to an internally stored `Option`. If you set t * `->required()`: The program will quit if this option is not present. This is `mandatory` in Plumbum, but required options seems to be a more standard term. For compatibility, `->mandatory()` also works. * `->expected(N)`: Take `N` values instead of as many as possible, only for vector args. If negative, require at least `-N`; end with `--` or another recognized option. -* `->set_custom_option(typename, N)`: Set the name and (optional) intrinsic size of an option. The parser will require multiples of this number if negative. +* `->type_name(typename)`: Set the name of an Option's type (`type_name_fn` allows a function instead) +* `->type_size(N)`: Set the intrinsic size of an option. The parser will require multiples of this number if negative. * `->needs(opt)`: This option requires another option to also be present, opt is an `Option` pointer. * `->excludes(opt)`: This option cannot be given with `opt` present, opt is an `Option` pointer. * `->envname(name)`: Gets the value from the environment if present and not passed on the command line. diff --git a/examples/enum.cpp b/examples/enum.cpp index 3e841da6..5d404579 100644 --- a/examples/enum.cpp +++ b/examples/enum.cpp @@ -17,7 +17,7 @@ int main(int argc, char **argv) { Level level; app.add_set("-l,--level", level, {Level::High, Level::Medium, Level::Low}, "Level settings") - ->set_type_name("enum/Level in {High=0, Medium=1, Low=2}"); + ->type_name("enum/Level in {High=0, Medium=1, Low=2}"); CLI11_PARSE(app, argc, argv); diff --git a/include/CLI/App.hpp b/include/CLI/App.hpp index c1d30ec4..0c915c2b 100644 --- a/include/CLI/App.hpp +++ b/include/CLI/App.hpp @@ -331,7 +331,7 @@ class App { CLI::callback_t fun = [&variable](CLI::results_t res) { return detail::lexical_cast(res[0], variable); }; Option *opt = add_option(name, fun, description, false); - opt->set_custom_option(detail::type_name()); + opt->type_name(detail::type_name()); return opt; } @@ -345,11 +345,11 @@ class App { CLI::callback_t fun = [&variable](CLI::results_t res) { return detail::lexical_cast(res[0], variable); }; Option *opt = add_option(name, fun, description, defaulted); - opt->set_custom_option(detail::type_name()); + opt->type_name(detail::type_name()); if(defaulted) { std::stringstream out; out << variable; - opt->set_default_str(out.str()); + opt->default_str(out.str()); } return opt; } @@ -371,7 +371,7 @@ class App { }; Option *opt = add_option(name, fun, description, false); - opt->set_custom_option(detail::type_name(), -1); + opt->type_name(detail::type_name())->type_size(-1); return opt; } @@ -393,9 +393,9 @@ class App { }; Option *opt = add_option(name, fun, description, defaulted); - opt->set_custom_option(detail::type_name(), -1); + opt->type_name(detail::type_name())->type_size(-1); if(defaulted) - opt->set_default_str("[" + detail::join(variable) + "]"); + opt->default_str("[" + detail::join(variable) + "]"); return opt; } @@ -440,7 +440,7 @@ class App { Option *opt = add_option(name, fun, description, false); if(opt->get_positional()) throw IncorrectConstruction::PositionalFlag(name); - opt->set_custom_option("", 0); + opt->type_size(0); return opt; } @@ -460,7 +460,7 @@ class App { Option *opt = add_option(name, fun, description, false); if(opt->get_positional()) throw IncorrectConstruction::PositionalFlag(name); - opt->set_custom_option("", 0); + opt->type_size(0); return opt; } @@ -480,7 +480,7 @@ class App { Option *opt = add_option(name, fun, description, false); if(opt->get_positional()) throw IncorrectConstruction::PositionalFlag(name); - opt->set_custom_option("", 0); + opt->type_size(0); opt->multi_option_policy(CLI::MultiOptionPolicy::TakeLast); return opt; } @@ -499,7 +499,7 @@ class App { Option *opt = add_option(name, fun, description, false); if(opt->get_positional()) throw IncorrectConstruction::PositionalFlag(name); - opt->set_custom_option("", 0); + opt->type_size(0); return opt; } @@ -530,7 +530,7 @@ class App { Option *opt = add_option(name, fun, description, false); std::string typeval = detail::type_name(); typeval += " in {" + detail::join(options) + "}"; - opt->set_custom_option(typeval); + opt->type_name(typeval); return opt; } @@ -550,7 +550,7 @@ class App { }; Option *opt = add_option(name, fun, description, false); - opt->set_type_name_fn( + opt->type_name_fn( [&options]() { return std::string(detail::type_name()) + " in {" + detail::join(options) + "}"; }); return opt; @@ -575,11 +575,11 @@ class App { Option *opt = add_option(name, fun, description, defaulted); std::string typeval = detail::type_name(); typeval += " in {" + detail::join(options) + "}"; - opt->set_custom_option(typeval); + opt->type_name(typeval); if(defaulted) { std::stringstream out; out << member; - opt->set_default_str(out.str()); + opt->default_str(out.str()); } return opt; } @@ -601,12 +601,12 @@ class App { }; Option *opt = add_option(name, fun, description, defaulted); - opt->set_type_name_fn( + opt->type_name_fn( [&options]() { return std::string(detail::type_name()) + " in {" + detail::join(options) + "}"; }); if(defaulted) { std::stringstream out; out << member; - opt->set_default_str(out.str()); + opt->default_str(out.str()); } return opt; } @@ -634,7 +634,7 @@ class App { Option *opt = add_option(name, fun, description, false); std::string typeval = detail::type_name(); typeval += " in {" + detail::join(options) + "}"; - opt->set_custom_option(typeval); + opt->type_name(typeval); return opt; } @@ -660,7 +660,7 @@ class App { }; Option *opt = add_option(name, fun, description, false); - opt->set_type_name_fn([&options]() { + opt->type_name_fn([&options]() { return std::string(detail::type_name()) + " in {" + detail::join(options) + "}"; }); @@ -691,9 +691,9 @@ class App { Option *opt = add_option(name, fun, description, defaulted); std::string typeval = detail::type_name(); typeval += " in {" + detail::join(options) + "}"; - opt->set_custom_option(typeval); + opt->type_name(typeval); if(defaulted) { - opt->set_default_str(member); + opt->default_str(member); } return opt; } @@ -720,11 +720,11 @@ class App { }; Option *opt = add_option(name, fun, description, defaulted); - opt->set_type_name_fn([&options]() { + opt->type_name_fn([&options]() { return std::string(detail::type_name()) + " in {" + detail::join(options) + "}"; }); if(defaulted) { - opt->set_default_str(member); + opt->default_str(member); } return opt; } @@ -749,11 +749,11 @@ class App { }; CLI::Option *opt = add_option(name, fun, description, defaulted); - opt->set_custom_option(label, 2); + opt->type_name(label)->type_size(2); if(defaulted) { std::stringstream out; out << variable; - opt->set_default_str(out.str()); + opt->default_str(out.str()); } return opt; } diff --git a/include/CLI/Option.hpp b/include/CLI/Option.hpp index db625576..d0335ff9 100644 --- a/include/CLI/Option.hpp +++ b/include/CLI/Option.hpp @@ -174,7 +174,7 @@ class Option : public OptionBase