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

update version and changelog for 2.5 release (#1121)

update readme, changelog, and version for 2.5 release

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
This commit is contained in:
Philip Top 2025-02-27 04:25:31 -08:00 committed by GitHub
parent a48f049365
commit 4160d259d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 100 additions and 29 deletions

View File

@ -2,8 +2,75 @@
## Unreleased
- add mechanism to allow option groups to be hidden and all options be
considered part of the parent for help display
## Version 2.5: Help Formatter
This version add a new formatter with improved control capabilities and output
aligned with standards for help output. It also add a modifier to enable use of
non-standard option names. Along with several bug fixes for edge cases in string
and config file parsing.
- Better help formatter [#866][], this better aligns the help generation with
UNIX standard and allows use in help2man. [#1093][]
- Add mechanism to allow option groups to be hidden and all options be
considered part of the parent for help display [#1039][]
- Add a modifier to allow non-standard single flag option names such as
`-option`. [#1078][]
- Add modifier for subcommands to disable fallthrough which can resolve some
issues with positional arguments [#1073][]
- Add some polish to config file output removing some unnecessary output and add
modifier to control output of default values [#1075][]
- Add the ability to specify pair/tuple defaults and improved parsing [#1081][]
- Bugfix: Take the configurability of an option name into account when
determining naming conflicts [#1049][]
- Bugfix: Fix an issue where an extra subcommand header was being printed in the
output [#1058][]
- Bugfix: Add additional fuzzing tests and fixes for a bug in escape string
processing, and resolve inconsistencies in the handing of `{}` between command
line parsing and config file parsing. [#1060][]
- Bugfix: Improve handling of some ambiguities in vector input processing for
config files, specifically in the case of vector of vector inputs. [#1069][]
- Bugfix: Fix an issue in the handling of uint8_t enums, and some issues related
to single element tuples [#1087][]
- Bugfix: Fix an issue with binary strings containing a `\x` [#1097][]
- Bugfix: Move the help generation priority so it triggers before config file
processing [#1106][]
- Bugfix: Fixed an issue where max/min on positionals was not being respected
and optional positionals were being ignored [#1108][]
- Bugfix: Fix an issue with strings which started and ended with brackets being
misinterpreted as vectors. The parsing now has special handling of strings
which start with `[[` [#1110][]
- Bugfix: Fix some macros for support in C++26 related to wide string parsing
[#1113][]
- Bugfix: Allow trailing spaces on numeric string conversions [#1115][]
- Docs: Update pymod.find_installation to find python in meson.build [#1076][]
- Docs: Add example for transform validators [#689][]
- Docs: Fix several spelling mistakes [#1101][]
- Backend: Update copyright dates to 2025 [#1112][]
- Backend: Update CMAKE minimum version to 3.10 [#1084][]
[#1039]: https://github.com/CLIUtils/CLI11/pull/1039
[#1049]: https://github.com/CLIUtils/CLI11/pull/1049
[#1058]: https://github.com/CLIUtils/CLI11/pull/1058
[#1060]: https://github.com/CLIUtils/CLI11/pull/1060
[#1069]: https://github.com/CLIUtils/CLI11/pull/1069
[#866]: https://github.com/CLIUtils/CLI11/pull/866
[#1073]: https://github.com/CLIUtils/CLI11/pull/1073
[#1075]: https://github.com/CLIUtils/CLI11/pull/1075
[#689]: https://github.com/CLIUtils/CLI11/pull/689
[#1076]: https://github.com/CLIUtils/CLI11/pull/1076
[#1078]: https://github.com/CLIUtils/CLI11/pull/1078
[#1081]: https://github.com/CLIUtils/CLI11/pull/1081
[#1084]: https://github.com/CLIUtils/CLI11/pull/1084
[#1087]: https://github.com/CLIUtils/CLI11/pull/1087
[#1093]: https://github.com/CLIUtils/CLI11/pull/1093
[#1097]: https://github.com/CLIUtils/CLI11/pull/1097
[#1101]: https://github.com/CLIUtils/CLI11/pull/1101
[#1106]: https://github.com/CLIUtils/CLI11/pull/1106
[#1108]: https://github.com/CLIUtils/CLI11/pull/1108
[#1110]: https://github.com/CLIUtils/CLI11/pull/1110
[#1112]: https://github.com/CLIUtils/CLI11/pull/1112
[#1113]: https://github.com/CLIUtils/CLI11/pull/1113
[#1115]: https://github.com/CLIUtils/CLI11/pull/1115
## Version 2.4: Unicode and TOML support

View File

@ -165,6 +165,9 @@ this library:
option to disable it).
- Autocomplete: This might eventually be added to both Plumbum and CLI11, but it
is not supported yet.
- While not recommended, CLI11 does now support non standard option names such
as `-option`. 🆕. This is enabled through `allow_non_standard_option_names()`
modifier on an app.
## Install
@ -203,9 +206,8 @@ int main(int argc, char** argv) {
}
```
For more information about 🆕`ensure_utf8` the section on
[Unicode support](#unicode-support) below. The 🆕`ensure_utf8` function is only
available in main currently and not in a release.
For more information about `ensure_utf8` the section on
[Unicode support](#unicode-support) below.
<details><summary>Note: If you don't like macros, this is what that macro expands to: (click to expand)</summary><p>
@ -415,7 +417,7 @@ Before parsing, you can set the following options:
option. Options can be removed from the excludes list with
`->remove_excludes(opt)`
- `->envname(name)`: Gets the value from the environment if present and not
passed on the command line. 🆕 The value must also pass any validators to be
passed on the command line. The value must also pass any validators to be
used.
- `->group(name)`: The help group to put the option in. No effect for positional
options. Defaults to `"Options"`. Options given an empty string will not show
@ -451,7 +453,7 @@ Before parsing, you can set the following options:
are `CLI::MultiOptionPolicy::Throw`, `CLI::MultiOptionPolicy::Throw`,
`CLI::MultiOptionPolicy::TakeLast`, `CLI::MultiOptionPolicy::TakeFirst`,
`CLI::MultiOptionPolicy::Join`, `CLI::MultiOptionPolicy::TakeAll`,
`CLI::MultiOptionPolicy::Sum`, and `CLI::MultiOptionPolicy::Reverse` 🆕.
`CLI::MultiOptionPolicy::Sum`, and `CLI::MultiOptionPolicy::Reverse`.
- `->check(std::string(const std::string &), validator_name="",validator_description="")`:
Define a check function. The function should return a non empty string with
the error message if the check fails
@ -701,8 +703,8 @@ filters on the key values is performed.
`CLI::FileOnDefaultPath(default_path, false)`. This allows multiple paths to
be chained using multiple transform calls.
- `CLI::EscapedString`: 🆕 can be used to process an escaped string. The
processing is equivalent to that used for TOML config files, see
- `CLI::EscapedString`: can be used to process an escaped string. The processing
is equivalent to that used for TOML config files, see
[TOML strings](https://toml.io/en/v1.0.0#string). With 2 notable exceptions.
\` can also be used as a literal string notation, and it also allows binary
string notation see
@ -859,7 +861,9 @@ triggered once unless the `.immediate_callback()` flag is set or the callback is
specified through the `parse_complete_callback()` function. The
`final_callback()` is triggered only once. In which case the callback executes
on completion of the subcommand arguments but after the arguments for that
subcommand have been parsed, and can be triggered multiple times.
subcommand have been parsed, and can be triggered multiple times. Note that the
`parse_complete_callback()` is executed prior to processing any config files.
The `final_callback()` is executed after config file processing.
Subcommands may also have an empty name either by calling `add_subcommand` with
an empty string for the name or with no arguments. Nameless subcommands function
@ -873,7 +877,7 @@ nameless subcommands are allowed. Callbacks for nameless subcommands are only
triggered if any options from the subcommand were parsed. Subcommand names given
through the `add_subcommand` method have the same restrictions as option names.
🆕 Options or flags in a subcommand may be directly specified using dot notation
Options or flags in a subcommand may be directly specified using dot notation
- `--subcommand.long=val` (long subcommand option)
- `--subcommand.long val` (long subcommand option)
@ -885,8 +889,8 @@ through the `add_subcommand` method have the same restrictions as option names.
The use of dot notation in this form is equivalent `--subcommand.long <args>` =>
`subcommand --long <args> ++`. Nested subcommands also work `sub1.subsub` would
trigger the subsub subcommand in `sub1`. This is equivalent to "sub1 subsub".
Quotes around the subcommand names are permitted 🆕 following the TOML standard
for such specification. This includes allowing escape sequences. For example
Quotes around the subcommand names are permitted following the TOML standard for
such specification. This includes allowing escape sequences. For example
`"subcommand".'f'` or `"subcommand.with.dots".arg1 = value`.
#### Subcommand options
@ -902,7 +906,7 @@ option_groups. These are:
the form of `/s /long /file:file_name.ext` This option does not change how
options are specified in the `add_option` calls or the ability to process
options in the form of `-s --long --file=file_name.ext`.
- `.allow_non_standard_option_names()`:🚧 Allow specification of single `-` long
- `.allow_non_standard_option_names()`:🆕 Allow specification of single `-` long
form option names. This is not recommended but is available to enable
reworking of existing interfaces. If this modifier is enabled on an app or
subcommand, options or flags can be specified like normal but instead of
@ -914,8 +918,8 @@ option_groups. These are:
through" and be matched on a parent option. Subcommands by default are allowed
to "fall through" as in they will first attempt to match on the current
subcommand and if they fail will progressively check parents for matching
subcommands. This can be disabled through `subcommand_fallthrough(false)` 🚧.
- `.subcommand_fallthrough()`: 🚧 Allow subcommands to "fall through" and be
subcommands. This can be disabled through `subcommand_fallthrough(false)` 🆕.
- `.subcommand_fallthrough()`: 🆕 Allow subcommands to "fall through" and be
matched on a parent option. Disabling this prevents additional subcommands at
the same level from being matched. It can be useful in certain circumstances
where there might be ambiguity between subcommands and positionals. The
@ -1027,10 +1031,10 @@ option_groups. These are:
the first unrecognized item. All subsequent arguments are placed in the
remaining_arg list. It is ideal for allowing your app or subcommand to be a
"prefix" to calling another app.
- `.usage(message)`: 🆕 Replace text to appear at the start of the help string
- `.usage(message)`: Replace text to appear at the start of the help string
after description.
- `.usage(std::string())`: 🆕 Set a callback to generate a string that will
appear at the start of the help string after description.
- `.usage(std::string())`: Set a callback to generate a string that will appear
at the start of the help string after description.
- `.footer(message)`: Set text to appear at the bottom of the help string.
- `.footer(std::string())`: Set a callback to generate a string that will appear
at the end of the help string.
@ -1113,8 +1117,8 @@ A subcommand is considered terminated when one of the following conditions are
met.
1. There are no more arguments to process
2. Another subcommand is encountered that would not fit in an optional slot of
the subcommand
2. Another subcommand is encountered that would not fit in an optional
positional slot of the subcommand
3. The `positional_mark` (`--`) is encountered and there are no available
positional slots in the subcommand.
4. The `subcommand_terminator` mark (`++`) is encountered
@ -1246,11 +1250,11 @@ is present, it will be read along with the normal command line arguments. The
file will be read if it exists, and does not throw an error unless `required` is
`true`. Configuration files are in [TOML][] format by default, though the
default reader can also accept files in INI format as well. The config reader
can read most aspects of TOML files including strings both literal 🆕 and with
potential escape sequences 🆕, digit separators 🆕, and multi-line strings 🆕,
and run them through the CLI11 parser. Other formats can be added by an adept
user, some variations are available through customization points in the default
formatter. An example of a TOML file:
can read most aspects of TOML files including strings both literal and with
potential escape sequences, digit separators, and multi-line strings, and run
them through the CLI11 parser. Other formats can be added by an adept user, some
variations are available through customization points in the default formatter.
An example of a TOML file:
```toml
# Comments are supported, using a #

View File

@ -11,8 +11,8 @@
// [CLI11:version_hpp:verbatim]
#define CLI11_VERSION_MAJOR 2
#define CLI11_VERSION_MINOR 4
#define CLI11_VERSION_PATCH 2
#define CLI11_VERSION "2.4.2"
#define CLI11_VERSION_MINOR 5
#define CLI11_VERSION_PATCH 0
#define CLI11_VERSION "2.5.0"
// [CLI11:version_hpp:end]