1
0
mirror of https://github.com/CLIUtils/CLI11.git synced 2025-04-29 12:13:52 +00:00

Added option description setter (#199)

* Added posibility to modify option description: Option::description(const std::string&).
Related: https://github.com/CLIUtils/CLI11/issues/193

* Return Option* from Option::description(...).
Format-fix to make clang-format happy.

* Fixing format

* Added posibility to modify app description: App::description(const std::string&).

* Fixing Style

* Update readme and changelog
This commit is contained in:
Fred Helmesjö 2019-01-22 18:19:47 +01:00 committed by Henry Schreiner
parent 72c384cfbb
commit 8d7aefe21f
5 changed files with 55 additions and 9 deletions

View File

@ -7,7 +7,8 @@ Passing the same subcommand multiple times is better supported. Several new feat
* Added `parse(string)` to split up and parse a command-line style string directly. [#186]
* Added `ignore_underscore` and related functions, to ignore underscores when matching names. [#185]
* The default INI Config will now add quotes to strings with spaces [#195]
* The default message now will mention the help--all flag also if present [#197]
* The default message now will mention the help-all flag also if present [#197]
* Added `->description` to set Option descriptions [#199]
* Subcommands now track how many times they were parsed in a parsing process. `count()` with no arguments will return the number of times a subcommand was encountered. [#179]
* Parsing is now done in phases: `shortcurcuits`, `ini`, `env`, `callbacks`, and `requirements`; all subcommands complete a phase before moving on. [#179]
* Calling parse multiple times is now officially supported without `clear` (automatic). [#179]
@ -26,6 +27,7 @@ Passing the same subcommand multiple times is better supported. Several new feat
[#192]: https://github.com/CLIUtils/CLI11/pull/192
[#197]: https://github.com/CLIUtils/CLI11/pull/197
[#195]: https://github.com/CLIUtils/CLI11/issues/195
[#199]: https://github.com/CLIUtils/CLI11/pull/199
## Version 1.6.2: Help-all

View File

@ -232,6 +232,7 @@ Before parsing, you can set the following options:
- `->group(name)`: The help group to put the option in. No effect for positional options. Defaults to `"Options"`. `""` will not show up in the help print (hidden).
- `->ignore_case()`: Ignore the case on the command line (also works on subcommands, does not affect arguments).
- `->ignore_underscore()`: Ignore any underscores in the options names (also works on subcommands, does not affect arguments). For example "option_one" will match with optionone. This does not apply to short form options since they only have one character
- `.description(str)`: Set/change the description.
- `->multi_option_policy(CLI::MultiOptionPolicy::Throw)`: Set the multi-option policy. Shortcuts available: `->take_last()`, `->take_first()`, and `->join()`. This will only affect options expecting 1 argument or bool flags (which always default to take last).
- `->check(CLI::ExistingFile)`: Requires that the file exists if given.
- `->check(CLI::ExistingDirectory)`: Requires that the directory exists.
@ -306,6 +307,7 @@ There are several options that are supported on the main app and subcommands. Th
- `.get_options(filter)`: Get the list of all defined option pointers (useful for processing the app for custom output formats).
- `.parse_order()`: Get the list of option pointers in the order they were parsed (including duplicates).
- `.formatter(fmt)`: Set a formatter, with signature `std::string(const App*, std::string, AppFormatMode)`. See Formatting for more details.
- `.description(str)`: Set/change the description.
- `.get_description()`: Access the description.
- `.parsed()`: True if this subcommand was given on the command line.
- `.name(name)`: Add or change the name.
@ -478,8 +480,9 @@ Significant features and/or improvements to the code were contributed by:
- [Paweł Bylica](https://github.com/chfast)
- [Philip Top](https://github.com/phlptp)
- [almikhayl](https://github.com/almikhayl)
- [nurelin](https://github.com/nurelin)
- [ncihneg](https://github.com/ncihneg)
- [nurelin](https://github.com/nurelin) <!-- help_all in message -->
- [ncihneg](https://github.com/ncihneg) <!-- Quoting strings in INI generation -->
- [Fred Helmesjö](https://github.com/helmesjo) <!-- `->description()` -->
## License

View File

@ -1374,6 +1374,12 @@ class App {
/// Get the app or subcommand description
std::string get_description() const { return description_; }
/// Set the description
App *description(const std::string &description) {
description_ = description;
return this;
}
/// Get the list of options (user facing function, so returns raw pointers), has optional filter function
std::vector<const Option *> get_options(const std::function<bool(const Option *)> filter = {}) const {
std::vector<const Option *> options(options_.size());

View File

@ -517,6 +517,12 @@ class Option : public OptionBase<Option> {
/// Get the description
const std::string &get_description() const { return description_; }
/// Set the description
Option *description(const std::string &description) {
description_ = description;
return this;
}
///@}
/// @name Help tools
///@{

View File

@ -645,6 +645,35 @@ TEST(THelp, AccessDescription) {
EXPECT_EQ(app.get_description(), "My description goes here");
}
TEST(THelp, SetDescriptionAfterCreation) {
CLI::App app{""};
app.description("My description goes here");
EXPECT_EQ(app.get_description(), "My description goes here");
EXPECT_THAT(app.help(), HasSubstr("My description goes here"));
}
TEST(THelp, AccessOptionDescription) {
CLI::App app{};
int x;
auto opt = app.add_option("-a,--alpha", x, "My description goes here");
EXPECT_EQ(opt->get_description(), "My description goes here");
}
TEST(THelp, SetOptionDescriptionAfterCreation) {
CLI::App app{};
int x;
auto opt = app.add_option("-a,--alpha", x);
opt->description("My description goes here");
EXPECT_EQ(opt->get_description(), "My description goes here");
EXPECT_THAT(app.help(), HasSubstr("My description goes here"));
}
TEST(THelp, CleanNeeds) {
CLI::App app;