From 8d7aefe21f24d8aa77e19eced2ce93d806fffa92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fred=20Helmesj=C3=B6?= Date: Tue, 22 Jan 2019 18:19:47 +0100 Subject: [PATCH] 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 --- CHANGELOG.md | 16 +++++++++------- README.md | 7 +++++-- include/CLI/App.hpp | 6 ++++++ include/CLI/Option.hpp | 6 ++++++ tests/HelpTest.cpp | 29 +++++++++++++++++++++++++++++ 5 files changed, 55 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3920e278..ff7128e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 @@ -125,7 +127,7 @@ Other changes: Backend and testing changes: -* Internally, `type_name` is now a lambda function; for sets, this reads the set live. [#116] +* Internally, `type_name` is now a lambda function; for sets, this reads the set live. [#116] * Cleaner tests without `app.reset()` (and `reset` is now `clear`). [#141] * Better CMake policy handling. [#110] * Includes are properly sorted. [#120] @@ -221,7 +223,7 @@ This version adds lots of smaller fixes and additions after the refactor in vers * Added `ExistingPath` validator [#73] * `app.allow_ini_extras()` added to allow extras in INI files [#70] * Multiline INI comments now supported -* Descriptions can now be written with `config_to_str` [#66] +* Descriptions can now be written with `config_to_str` [#66] * Double printing of error message fixed [#77] * Renamed `requires` to `needs` to avoid C++20 keyword [#75], [#82] * MakeSingleHeader now works if outside of git [#78] @@ -260,7 +262,7 @@ favorite CLI programs. Error messages and help messages are better and more flex * Footers can be added to help [#42](https://github.com/CLIUtils/CLI11/pull/42) * Help flags are easier to customize [#43](https://github.com/CLIUtils/CLI11/pull/43) * Subcommand now support groups [#46](https://github.com/CLIUtils/CLI11/pull/46) -* `CLI::RuntimeError` added, for easy exit with error codes [#45](https://github.com/CLIUtils/CLI11/pull/45) +* `CLI::RuntimeError` added, for easy exit with error codes [#45](https://github.com/CLIUtils/CLI11/pull/45) * The clang-format script is now no longer "hidden" [#48](https://github.com/CLIUtils/CLI11/pull/48) * The order is now preserved for subcommands (list and callbacks) [#49](https://github.com/CLIUtils/CLI11/pull/49) * Tests now run individually, utilizing CMake 3.10 additions if possible [#50](https://github.com/CLIUtils/CLI11/pull/50) @@ -277,7 +279,7 @@ favorite CLI programs. Error messages and help messages are better and more flex * Allow options to be disabled from INI file, rename `add_config` to `set_config` [#60](https://github.com/CLIUtils/CLI11/pull/60) > ### Converting from CLI11 1.2: -> +> > * `app.parse` no longer returns a vector. Instead, use `app.remaining(true)`. > * `"hidden"` is no longer a special group name, instead use `""` > * Validators API has changed to return an error string; use `.empty()` to get the old bool back @@ -302,8 +304,8 @@ This release focuses on making CLI11 behave properly in corner cases, and with c This release incorporates feedback from the release announcement. The examples are slowly being expanded, some corner cases improved, and some new functionality for tricky parsing situations. * Added simple support for enumerations, allow non-printable objects [#12](https://github.com/CLIUtils/CLI11/issues/12) -* Added `app.parse_order()` with original parse order ([#13](https://github.com/CLIUtils/CLI11/issues/13), [#16](https://github.com/CLIUtils/CLI11/pull/16)) -* Added `prefix_command()`, which is like `allow_extras` but instantly stops and returns. ([#8](https://github.com/CLIUtils/CLI11/issues/8), [#17](https://github.com/CLIUtils/CLI11/pull/17)) +* Added `app.parse_order()` with original parse order ([#13](https://github.com/CLIUtils/CLI11/issues/13), [#16](https://github.com/CLIUtils/CLI11/pull/16)) +* Added `prefix_command()`, which is like `allow_extras` but instantly stops and returns. ([#8](https://github.com/CLIUtils/CLI11/issues/8), [#17](https://github.com/CLIUtils/CLI11/pull/17)) * Removed Windows warning ([#10](https://github.com/CLIUtils/CLI11/issues/10), [#20](https://github.com/CLIUtils/CLI11/pull/20)) * Some improvements to CMake, detect Python and no dependencies on Python 2 (like Python 3) ([#18](https://github.com/CLIUtils/CLI11/issues/18), [#21](https://github.com/CLIUtils/CLI11/pull/21)) diff --git a/README.md b/README.md index f9d909c5..fac85e08 100644 --- a/README.md +++ b/README.md @@ -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) +- [ncihneg](https://github.com/ncihneg) +- [Fred Helmesjö](https://github.com/helmesjo) ## License diff --git a/include/CLI/App.hpp b/include/CLI/App.hpp index 8335c6e3..f9b605d6 100644 --- a/include/CLI/App.hpp +++ b/include/CLI/App.hpp @@ -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 get_options(const std::function filter = {}) const { std::vector options(options_.size()); diff --git a/include/CLI/Option.hpp b/include/CLI/Option.hpp index e1a6c5ed..7f2a121a 100644 --- a/include/CLI/Option.hpp +++ b/include/CLI/Option.hpp @@ -517,6 +517,12 @@ class Option : public OptionBase