Commit Graph

723 Commits

Author SHA1 Message Date
geon6
8bacffdf90 fix bug 385 2024-11-27 16:52:29 +08:00
Pranav
cbd9fd8ed6
Merge pull request #382 from rouault/usage_subparser
subparser: use full parser path instead of just parser name in usage() message
2024-11-19 19:22:14 -05:00
Even Rouault
097bac1854
subparser: use full parser path instead of just parser name in usage() message 2024-11-08 20:49:15 +01:00
Even Rouault
b5cfa7ea46
tidy-analysis-stage-01.yml: update to actions/upload-artifact@v4 since v2 is no longer working 2024-11-08 20:48:15 +01:00
Pranav
84c02050ea
Merge pull request #377 from Eng-MohamedHussien/fix/370_range_of_choices
Fix range of choices bug
2024-09-20 09:03:02 -04:00
Pranav
e709046924
Merge pull request #380 from orenc17/fix-store_into-overload
Dont force store_into to override default/explicit values if already set
2024-09-20 09:02:13 -04:00
Oren Cohen
d40d2fcecf Dont force store_into to override default/explicit values if already set 2024-09-19 16:53:54 +03:00
Muhammad Hussein
43072b8e8c Fix range of choices bug
- Support range of choices.
- Add testcases for range of choices scenario.

fix #370
2024-09-03 18:08:50 +03:00
Pranav
fd13c28591
Merge pull request #376 from nick20201/master
Updated the min and max to deal with a macro in minwindef.h
2024-09-02 12:09:52 -04:00
Nick T
df58f9d140
Updated the min and max to deal with a macro in minwindef.h 2024-08-15 15:47:23 +12:00
Pranav
8a7fa18998
Merge pull request #373 from temikfart/edit-readme-toc
Add missed ToC link to README.md
2024-07-31 06:29:48 -04:00
Artyom Fartygin
e927d08698 Add missed ToC link to README.md
Add missed link to 'Getting Argument and Subparser Instances' paragraph.
2024-07-31 00:40:55 +03:00
Pranav Srinivas Kumar
1b27c6f3da Updated package configuration version check to use SameMajorVersion instead of ExactVersion, closes #371 2024-07-19 14:20:54 -04:00
Pranav Srinivas Kumar
68fd0277ee Bumped to v3.1 2024-07-17 19:53:38 -04:00
Pranav
a2b4d27989
Merge pull request #364 from zhao-shihan/master
Allow to install when argparse is a subproject
2024-06-15 13:07:20 -04:00
zhaoshihan
16d0e56005 Allow to install when argparse is a subproject 2024-06-15 21:30:03 +08:00
Pranav
e462ab980c
Merge pull request #361 from RichardBrown384/rbrown/correct-readme
Correct Parent Parser errors in README.md
2024-05-29 20:32:31 -04:00
RichardBrown384
0c44bc349f
Correct Parent Parser errors in README.md
* Rename parent_parser -> surface_parser
* The second constructor argument is a string.
2024-05-29 11:05:15 +02:00
Pranav
9893754f67
Merge pull request #360 from rouault/too_few_arguments
Add argument name after 'Too few arguments' error
2024-05-27 15:57:25 -04:00
Even Rouault
84b7b46ce5
Add argument name after 'Too few arguments' error
If a non-positional argument doesn't get the number of required values,
a generic "Too few arguments" error is generated, without its name, when
it is not the last argument (but if it is the last argument, we get its
name)
2024-05-27 19:21:29 +02:00
Pranav
eab1d75e49
Merge pull request #359 from ericonr/string-warning
parse_args(): work around GCC 12 warning bug.
2024-05-20 14:51:24 -04:00
Érico Nogueira
df43e47c00 parse_args(): work around GCC 12 warning bug.
This bug [1] causes GCC to emit a wrong warning when adding a short
string literal to a std::string. Wrapping the literal in a std::string
doesn't have a large impact and avoids the warning.

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105329
2024-05-20 14:50:02 -03:00
Pranav
f0759fd982
Merge pull request #357 from stripe2933/patch-1
Module improvement.
2024-05-11 10:46:23 -04:00
LEE KYOUNGHEON
df48de9bc8
Suppress false-positive warning.
export extern "C++" style is valid in Clang (https://clang.llvm.org/docs/StandardCPlusPlusModules.html#export-extern-c-style), but warning emitted. This commit disables it.
2024-05-11 19:09:09 +09:00
Pranav
eba16b3773
Merge pull request #353 from rouault/do_from_chars_coverity_warning
do_from_chars(): initialize variable to fix Coverity Scan warning
2024-05-05 19:12:04 -04:00
Even Rouault
5228c57938
do_from_chars(): initialize variable to fix Coverity Scan warning
The argparse.hpp copy inside GDAL has caused Coverity Scan to emit a
(false-positive) warning about x not being initialized.

```
________________________________________________________________________________________________________
*** CID 1544814:  Uninitialized variables  (UNINIT)
/gdal/apps/argparse/argparse.hpp: 257 in gdal_argparse::details::do_from_chars<unsigned char, (int)10>(std::basic_string_view<char, std::char_traits<char>>)()
251       if (ec == std::errc::invalid_argument) {
252         throw std::invalid_argument{"pattern '" + std::string(s) + "' not found"};
253       }
254       if (ec == std::errc::result_out_of_range) {
255         throw std::range_error{"'" + std::string(s) + "' not representable"};
256       }
>>>     CID 1544814:  Uninitialized variables  (UNINIT)
>>>     Using uninitialized value "x".
```

Let's initialize it to 0 to make the analyzer happy
2024-05-05 21:35:58 +02:00
Pranav
ce7db9962a
Merge pull request #352 from FantasqueX/bazel-1
add Bazel support
2024-05-05 10:18:58 -04:00
Letu Ren
cc43cb9a63 add Bazel support 2024-05-05 15:37:45 +08:00
Pranav
805e2356a9
Merge pull request #348 from elpaso/store_into-set-of-string-int
Add Argument::store_into(std::set<int||string> &var) method
2024-04-30 20:38:21 -04:00
Alessandro Pasotti
b85a0a414d Add Argument::store_into(std::set<int||string> &var) method 2024-04-30 17:30:48 +02:00
Pranav
ac4c2c2d96
Merge pull request #346 from abellgithub/store_ints
Store ints
2024-04-18 20:45:29 -04:00
Andrew Bell
7cb70ed6f3 Don't store -1 into unsigned value. 2024-04-18 18:11:07 -04:00
Andrew Bell
29f1d12333 Add cstdint header. 2024-04-18 08:24:57 -04:00
Andrew Bell
e54e459286 Pass type along to parse_number(). 2024-04-17 13:42:37 -04:00
Andrew Bell
d141b8d2a1 Add support for general integer types in store_into. 2024-04-17 13:35:51 -04:00
Pranav
9550b0a88c
Merge pull request #344 from rouault/At_least_one_followed_by_exactly_one
Fix parsing of a program that accepts a positional argument with 1:* cardinality followed by another positional argument with 1:1
2024-04-02 19:46:38 -04:00
Pranav
1c4820579c
Merge pull request #343 from rouault/store_into_vector_int
Add Argument::store_into(std::vector<int> &var) method
2024-04-02 19:45:31 -04:00
Even Rouault
2c245a2c3b
Fix parsing of a program that accepts a positional argument with 1:* cardinality followed by another positional argument with 1:1 2024-04-02 23:35:43 +02:00
Even Rouault
29367256d3
Add Argument::store_into(std::vector<int> &var) method 2024-04-02 23:22:53 +02:00
Pranav
a1c41c5537
Merge pull request #336 from rouault/hidden_argument
Add a Argument::hidden() method to prevent an argument from appearing in usage or help
2024-03-16 10:51:35 -04:00
Even Rouault
d7d2326f42
Add a Argument::hidden() method to prevent an argument from appearing in usage or help 2024-03-16 14:23:51 +01:00
Pranav
cebee4bb4b
Merge pull request #334 from rouault/enhance_usage_and_help
Several bug fixes in usage, and improvement in usage and help
2024-03-13 20:43:43 -04:00
Even Rouault
8f5b3e0722
Several bug fixes in usage, and improvement in usage and help
- Display mutually exclusive arguments as ``[[-a]|[-b]]`` in usage
- Add ... trailer to repeatable arguments in usage: ``[-x]...``

- Implement the following enhancements:

By default usage is reported on a single line.

The ``ArgumentParser::set_usage_max_line_width(width)`` method can be used
to display the usage() on multiple lines, by defining the maximum line width.

It can be combined with a call to ``ArgumentParser::set_usage_break_on_mutex()``
to ask grouped mutually exclusive arguments to be displayed on a separate line.

``ArgumentParser::add_usage_newline()`` can also be used to force the next
argument to be displayed on a new line in the usage output.

The following snippet

```cpp
    argparse::ArgumentParser program("program");
    program.set_usage_max_line_width(80);
    program.set_usage_break_on_mutex();
    program.add_argument("--quite-long-option-name").flag();
    auto &group = program.add_mutually_exclusive_group();
    group.add_argument("-a").flag();
    group.add_argument("-b").flag();
    program.add_argument("-c").flag();
    program.add_argument("--another-one").flag();
    program.add_argument("-d").flag();
    program.add_argument("--yet-another-long-one").flag();
    program.add_argument("--will-go-on-new-line").flag();
    program.add_usage_newline();
    program.add_argument("--new-line").flag();
    std::cout << program.usage() << std::endl;
```

will display:
```console
Usage: program [--help] [--version] [--quite-long-option-name]
               [[-a]|[-b]]
               [-c] [--another-one] [-d] [--yet-another-long-one]
               [--will-go-on-new-line]
               [--new-line]
```

Furthermore arguments can be separated into several groups by calling
``ArgumentParser::add_group(group_name)``. Only optional arguments should
be specified after the first call to add_group().

```cpp
    argparse::ArgumentParser program("program");
    program.set_usage_max_line_width(80);
    program.add_argument("-a").flag().help("help_a");
    program.add_group("Advanced options");
    program.add_argument("-b").flag().help("help_b");
```

will display:
```console
Usage: program [--help] [--version] [-a]

Advanced options:
               [-b]
```
2024-03-13 02:09:44 +01:00
Pranav
0fa7d59964
Merge pull request #332 from rouault/consume_dry_run
Add a dry_run argument to Argument::consume(), and change ArgumentParser private section to protected
2024-03-12 18:51:01 -04:00
Even Rouault
3a6118e4de
Fix clang-tidy warning 2024-03-12 15:36:54 +01:00
Even Rouault
f2e7db6090
Add a dry_run argument to Argument::consume(), and change ArgumentParser private section to protected
Both changes are needed in the special case of GDAL where our existing
hand-made argument parser accepts positional arguments placed anywhere
in the arguments, not just after optional arguments.

In the GDAL code, in 8bb3455eed (diff-4592e7daae8543536dbeadf05a3c110282ea0fc089216186138c923a0d4d8000R170) ,
I've implemented a preliminary pass before calling
ArgumentParser::process_args() that re-order arguments. For that, I need
to be able to call consume() but without side-effects (dry_run=False)
and accept members that are private
2024-03-12 15:30:05 +01:00
Pranav
874b939f13
Merge pull request #331 from rouault/store_into
Add Argument::store_into() functions
2024-03-12 10:13:31 -04:00
Pranav
ce2d4316a4
Merge pull request #330 from rouault/hidden_alias
Add a ArgumentParser::add_hidden_alias_for() method
2024-03-12 10:10:03 -04:00
Even Rouault
8784cc8ddf
Add Argument::store_into() functions
It is possible to bind arguments to a variable storing their value, as an
alternative to explicitly calling ``program.get<T>(arg_name)`` or ``program[arg_name]``

This is currently implementeted for variables of type ``bool`` (this also
implicitly calls ``flag()``), ``int``, ``double``, ``std::string`` and
``std::vector<std::string>``. If the argument is not specified in the command
line, the default value (if set) is set into the variable.

```cpp
bool flagvar = false;
program.add_argument("--flagvar").store_into(flagvar);

int intvar = 0;
program.add_argument("--intvar").store_into(intvar);

double doublevar = 0;
program.add_argument("--doublevar").store_into(doublevar);

std::string strvar;
program.add_argument("--strvar").store_into(strvar);

std::vector<std::string> strvar_repeated;
program.add_argument("--strvar-repeated").append().store_into(strvar_repeated);

std::vector<std::string> strvar_multi_valued;
program.add_argument("--strvar-multi-valued").nargs(2).store_into(strvar_multi_valued);
```
2024-03-12 12:50:22 +01:00
Even Rouault
e6e41d43c6
Add a ArgumentParser::add_hidden_alias_for() method
It is sometimes desirable to offer an alias for an argument, but without it
appearing it in the usage. For example, to phase out a deprecated wording of
an argument while not breaking backwards compatible. This can be done with
the ``ArgumentParser::add_hidden_alias_for()` method.

```cpp
argparse::ArgumentParser program("test");

auto &arg = program.add_argument("--suppress").flag();
program.add_hidden_alias_for(arg, "--supress"); // old misspelled alias
```
2024-03-12 12:08:40 +01:00