Sean Robinson
1c2fd8726d
Add argument name in exception thrown by Argument::get
...
As the user did not include the argument, the longest name for the unused
argument is in the last position of mNames.
This is an API change that may affect programs trying to match the
specific "No value provided" message. The new error message appends the
argument that caused the error.
A solution which works with both versions is to look for "No value
provided" at the beginning of the error message.
- if (err.what() == "No value provided")
+ if (std:string(err.what()).rfind("No value provided", 0) == 0)
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-09-14 09:51:10 -07:00
Yoshihiro Hokazono
971f687a17
Kind error message
2021-09-13 07:08:37 +09:00
Yoshihiro Hokazono
8727c132fc
get("out") and get("--out") are both avaibale
2021-09-13 07:07:20 +09:00
Sean Robinson
37dc4f20ec
Revert "Use std::chars_format rather than local copy"
...
It's too early to use std::chars_format as there is not wide enough
support in stdlib implementations. After the following stdlib become our
supported versions, this can be revisited.
GCC >= 10.1.0
Clang >= 7.0.0 (already our minimum)
MSVC >= 19.4
Reverts commit 1c61082a4c
.
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-08-26 06:55:36 -07:00
Sean Robinson
1c61082a4c
Use std::chars_format rather than local copy
...
I believe the Supported Toolchains all now include <charconv> (and
std::chars_format) and we can use the stdlib-defined values.
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-08-24 09:20:50 -07:00
Pranav
ccf3920ce2
Merge pull request #108 from Bedzior/const-correct-argument-parser
...
Const-correct ArgumentParser
2021-08-07 07:22:12 -05:00
Chuvi
a3f164bcc7
Replace size_t to std::size_t.
...
https://github.com/p-ranav/argparse/pull/109#issuecomment-892943775
2021-08-05 16:06:06 +03:00
Chuvi
0652496435
Use std::min type specialisation
2021-08-04 19:43:20 +03:00
Chuvi
14fd4c6d5b
Fix std::min conflict with min/max definitions from windows.h
2021-08-04 13:54:46 +03:00
Rafal Bedzkowski
4ede429264
Const-correct ArgumentParser
2021-08-02 17:21:46 +02:00
Oliver 'kfsone' Smith
38b1b8114e
Allow user to limit version argument to --version
2021-06-04 16:56:22 -07:00
Sean Robinson
3efd045ea9
Add ArgumentParser.is_used to discern user-supplied values from defaults
...
.present returns std::nullopt if the optional argument is not given by the
user -- as long as a .default_value is not defined. With a .default_value,
.present cannot be used to determine if a value is user-provided or the
default.
.is_used fills that role and only returns true if the argument was passed
by the user.
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-04-07 14:09:10 -07:00
Sean Robinson
54d3cda804
Add Argument.append method to allow repeated argument use
...
The default behavior with optional arguments is to allow only a single use
per invocation. One alternative is to use .nargs, but this requires
previously knowing, and limiting, the quantity of values. The .append
method removes the restriction on repeats for a single Argument.
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-04-07 11:47:09 -07:00
Sean Robinson
0fe17e22f6
Replace integers with bool value keywords
...
While the implicit conversions from `1` to `true` work correctly, this
avoids the conversions.
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-04-06 12:07:53 -07:00
Sean Robinson
e371313b87
Update copyright dates and authors
...
The full list of contributors is available in the git commit log.
Signed-off-by: Sean Robinson <sean.robinson@scottsdalecc.edu>
2021-04-06 11:53:19 -07:00
Kenny Shen
c869f20e2b
Qualify iterator functions
2021-03-25 12:55:26 +08:00
Mike Zozu
ed06438faf
nicer usage text for required arg
2020-12-15 23:01:07 +03:00
Mike Zozu
51dd98f49d
fix is_streamable trait
2020-12-15 21:59:52 +03:00
Mike Zozu
69c2cada35
simplified traits using std::void_t
2020-12-15 20:01:26 +03:00
Mike Zozu
b025166e4c
prettier output in case of absence of arg help msg
2020-12-15 19:09:08 +03:00
Mike Zozu
6b30a65ffd
special case for repr: bool value
2020-12-15 16:59:45 +03:00
Mike Zozu
5572cb0862
trying to fix strange AppleClang compiler error
2020-12-15 16:58:38 +03:00
Mike Zozu
6964cccd2f
clang-format
2020-12-15 16:20:41 +03:00
Mike Zozu
282f9ebf91
show default values in help
2020-12-15 16:10:56 +03:00
Robert Kalinowski
bf12edd9a7
Fix help if required and def-value. Fixes #89 .
...
Propose, skip text "[Required]" if argument has default value,
because the argument can be omitted in commend-line.
2020-11-30 19:53:06 +01:00
Joseph Durel
aef670bd43
Make ArgumentParser::add_*() functions working on the parser itself chainable
2020-07-11 10:12:57 -04:00
bufferbase
43f4629be5
Fix incorrect message when mUsedName is empty
...
Previously, it printed ": expected 1 argument(s). 0 provided." when one positional argument is defined but nothing is provided. Now it prints "1 argument(s) expected. 0 provided."
2020-06-04 17:06:20 -07:00
Pranav Srinivas Kumar
f3e65f69a9
Added --version as a special flag similar to --help
...
* ArgumentParser takes a second argument - the program version (std::string)
* Using --version or -v will print the program version and exit
2020-05-15 19:06:00 -05:00
Pranav Srinivas Kumar
33101e7972
Closes #73
2020-05-08 14:35:05 -05:00
Pranav Srinivas Kumar
9bbd58c6ad
Closes #76
2020-05-08 14:27:20 -05:00
Pranav Srinivas Kumar
3734fc6fca
Closes #74
2020-04-23 07:36:22 -07:00
Pranav Srinivas Kumar
4c69ebf3fe
Placing definitions in unnamed namespace to prevent multiple definition linker error #75
2020-04-12 09:38:21 -05:00
Ethan Slattery
c521ebeaf8
add extra space to match python formatting
2020-01-02 18:42:25 -08:00
Ethan Slattery
7ef0de410b
Better naming: follow python naming convention.
2020-01-02 15:14:20 -08:00
Ethan Slattery
89b9e22f9a
add pre and post text options
...
add variables, assignment functions, and printing for text before and after the argument lists.
2020-01-02 14:15:44 -08:00
Zhihao Yuan
7c57e1e852
Record used names with copies of string_view
2020-01-02 02:19:09 -06:00
Zhihao Yuan
03a0ce831d
Simplify Argument exposition-only constructors
...
Although they are public, they are not meant for end-users
to use, so we can change its interface to use less sfinae.
2020-01-02 02:19:08 -06:00
Zhihao Yuan
e6c6c9b31c
Get arguments in optional<T> with .present<T>()
...
fixes : p-ranav/argparse#66
2019-12-01 02:14:13 -06:00
Zhihao Yuan
e8a44d289d
Parse floating-point numbers in .scan
...
fixes : p-ranav/argparse#63
2019-11-26 00:11:21 -06:00
Zhihao Yuan
426a5dbb76
Parse integers in the .scan fluent interface
2019-11-25 23:45:55 -06:00
Zhihao Yuan
ea2f16d264
Upgrade and describe supported toolchains
2019-11-25 17:23:28 -06:00
Zhihao Yuan
964790cf3c
Determine negative numeric values with a grammar
...
Two differences that diverge from the existing behavior:
1. Leading zeros are not allowed for integers. Negative
octal numbers such as `-066` are not meant to be treated
as positional arguments, but existing code recognize them
as decimal numbers. Note that negative floating-point
numbers with leading zeros (`-003.`) are unambiguous and
are recognized.
2. Inf and NaN are not recognized. This is because options
like `-inf` is indistinguishable from a compound argument
that meant to be a shorthand for `-i -n -f`.
fixes : p-ranav/argparse#55
2019-11-24 00:31:05 -06:00
Zhihao Yuan
77f3bd9b8d
Default --help to print help and exit
...
The change also fixes a rare bug introduced in 9007958
:
when there are duplicated keys, insert_or_update overrides
previously inserted ones, emplace doesn't.
fixes : p-ranav/argparse#59
2019-11-22 16:54:58 -06:00
Zhihao Yuan
36003197c7
Fix print_help for printing nothing
2019-11-22 15:33:15 -06:00
Pranav Srinivas Kumar
c707bcc1c4
Closes #56
2019-11-21 10:25:41 -06:00
Zhihao Yuan
991df83d97
Support capturing remaining() arguments
...
This kind of argument works as if having the "remaining" nargs,
inspired by Python's `argparse.REMAINDER`.
This change also reduces the size of `Argument` by 8 bytes.
See also: https://docs.python.org/2/library/argparse.html#nargs
fixes : p-ranav/argparse#17
2019-11-20 17:47:20 -06:00
Zhihao Yuan
f7dae0d93d
Refactor some uses of SFINAE into constexpr-if
2019-11-17 20:17:27 -06:00
Zhihao Yuan
93ddf85a7b
Factor out any_cast_container
2019-11-17 20:05:25 -06:00
Zhihao Yuan
3177f544f5
Default value is not a container of std::any
2019-11-17 19:11:09 -06:00
Zhihao Yuan
4c5ded8c84
Constrain Argument constructor better
...
Without this change, std::allocator can construct Argument
2019-11-17 18:55:52 -06:00
Zhihao Yuan
556d935491
Suppress MSVC warnings and a Codacy warning
2019-11-17 13:42:28 -06:00
Zhihao Yuan
8201a18568
Fix various issues in Argument constructor
...
Before this change:
1. When the input is built-in string literal or cv-`char*`,
`is_optional` constructs temporary `std::string` while
`mNames` initializer is also constructing `std::string`
due to the use of `std::initializer_list`.
2. When the input is `std::string_view`, doesn't compile.
3. When the input is `std::string`, `mNames` initializer
moves `args`. If argument name is longer than
`std::string`'s SSO buffer, bad thing will happen because
`is_optional` will be accessing `args` in moved-from
states.
Because of the use of `strtol` which expects nul-terminated
input, `is_*` series functions must take `std::string`. This
restriction may be removed after AppleClang adds `<charconv>`.
But for now, it complicates the patch. My solution is to
create an array prvalue still, but use a array reference
rather than `std::initializer_list` to refer to it, so that
the code in delegated constructor can keep using fold
expressions after the necessary `std::string` objects being
created.
2019-11-17 01:51:36 -06:00
Zhihao Yuan
7dd6655a9e
Avoid extra copy made by initializer_list
2019-11-17 01:51:36 -06:00
Zhihao Yuan
56c041707a
Use string_view in getter interface
2019-11-17 01:51:31 -06:00
Zhihao Yuan
f7fe9cf439
Remove unused space in Argument structure
2019-11-16 21:51:01 -06:00
Zhihao Yuan
daeca099e2
Remove undesired access control
2019-11-16 21:45:18 -06:00
Zhihao Yuan
955e1e1e6c
Simplify code with four-legged std::equal
2019-11-16 21:26:49 -06:00
Zhihao Yuan
50c91a0bcc
Clang-format the code
2019-11-16 21:17:53 -06:00
Zhihao Yuan
f84f17d719
Give ArgumentParser value semantics
...
fixes : p-ranav/argparse#50
2019-11-16 15:15:54 -06:00
Zhihao Yuan
9007958c1f
Index arguments without storing their names twice
2019-11-16 14:35:35 -06:00
Zhihao Yuan
3f949fc3f1
Stop sharing argument values with parent parsers
...
See also: p-ranav/argparse#50
2019-11-16 14:33:00 -06:00
Zhihao Yuan
2208ec5b2d
Remove unused copy of parent parsers
2019-11-16 01:51:47 -06:00
Zhihao Yuan
f6e686b69c
Bind extra arguments to actions
...
closes : p-ranav/argparse#38
2019-11-14 01:30:04 -06:00
Zhihao Yuan
dc227448f6
Allow actions that return void
...
closes : p-ranav/argparse#39
2019-11-13 12:54:07 -06:00
Pranav Srinivas Kumar
bda0866320
Merge pull request #44 from lichray/help-stream
...
Help stream
2019-11-13 08:36:58 -06:00
Zhihao Yuan
c6cc306ec8
Remove the undocumented PARSE_ARGS macro
...
closes : p-ranav/argparse#41
2019-11-13 03:00:42 -06:00
Zhihao Yuan
dc74051832
Deprecate print_help()
...
closes : p-ranav/argparse#40
2019-11-13 02:40:15 -06:00
Zhihao Yuan
9d66976421
Print ArgumentParser help with stream insertion
2019-11-13 02:17:28 -06:00
mu001999
dd528a1d70
Add name for anonymous namespace
2019-09-01 21:16:59 +08:00
Pranav Srinivas Kumar
a9bc1c9a4a
Closes #28
2019-08-17 17:56:29 -05:00
Pranav Srinivas Kumar
cb04248cfa
Updated formatting
2019-08-17 17:01:04 -05:00
Pranav Srinivas Kumar
aba9b10101
Merge pull request #32 from wtdcode/remove-newlines
...
Remove extra new lines
2019-08-06 08:49:01 -05:00
Mio
4712288086
Change the format of required arguments
2019-08-06 20:52:31 +08:00
Mio
39c720e6c0
Add a mIsRquired field
2019-08-06 20:48:51 +08:00
Mio
7cb710f404
Remove extra new lines
2019-08-06 20:41:24 +08:00
Pranav Srinivas Kumar
73f6aa7538
Fixes Issue #24
2019-06-06 21:24:32 -04:00
Pranav Srinivas Kumar
af650392e7
Fixes Issue #22 - Tested w/ Visual Studio 2019
2019-06-05 09:13:51 -04:00
Stephan van Veen
6d46876f5c
Do some cleanup in print_help
2019-05-25 20:07:24 +02:00
Stephan van Veen
67e535e171
Move print_help logic into Argument
2019-05-25 20:01:04 +02:00
Stephan van Veen
34d259d892
Sort names on argument construction
2019-05-25 09:49:00 +02:00
Stephan van Veen
d960a41e96
Use local iterator instead of member counter
2019-05-20 22:21:57 +02:00
Stephan van Veen
f2e0bd0de1
Iterate over map instead of both lists
2019-05-20 22:21:57 +02:00
Stephan van Veen
62c2be634a
Remove argc argv version of parse_args_internal
2019-05-20 22:21:57 +02:00
Stephan van Veen
9e7b80034e
Throw exception in case of unknown argument
2019-05-20 22:21:57 +02:00
Stephan van Veen
ecf8e4fd5b
Implement parse_args_internal for compound parameters
2019-05-20 22:20:07 +02:00
Stephan van Veen
d95f9d9f14
First check for positional, then optional and compound
2019-05-20 22:20:07 +02:00
Stephan van Veen
44bef34e79
Implement parse_args_internal for positional parameters
2019-05-20 22:20:07 +02:00
Stephan van Veen
3c9a74049f
Implement parse_args_internal for optional parameters
2019-05-20 22:20:07 +02:00
Stephan van Veen
4da8454a5a
Simplify is_optional check
2019-05-18 14:06:46 +02:00
Pranav Srinivas Kumar
c03e34f981
Merge pull request #18 from svanveen/fix/container-types
...
Unify Argument::get and Argument::operator== for container types
2019-05-14 19:59:31 -04:00
Stephan van Veen
b3494a29d6
Remove is_specialization
2019-05-13 22:53:47 +02:00
Stephan van Veen
20a7d90abe
Don't accept std::string as container
2019-05-13 22:52:26 +02:00
Stephan van Veen
a6ceffdb63
Extend doxygen documentation
2019-05-13 22:42:37 +02:00
Stephan van Veen
f08a280f92
Throw std::logic_error instead of returning empty value
2019-05-13 22:42:37 +02:00
Stephan van Veen
02b3ed1878
Cleanup Argument::get methods
2019-05-13 22:42:37 +02:00
Stephan van Veen
ca68260ec4
Enable equality operator for all iterable types
2019-05-13 22:42:36 +02:00
Pranav Srinivas Kumar
bd8d720faa
Merge pull request #16 from Jackojc/fix_const_argv
...
Allow use of both const char** and char** for argv.
2019-05-12 14:59:12 -04:00
Jack Clarke
3e1a42e312
allow use of const char** and char** for argv
2019-05-12 18:40:30 +01:00
Jack Clarke
5e1b85fdc5
fix warning for implicit type conversion
2019-05-12 17:38:18 +01:00
Stephan van Veen
94ca8e2552
Unify container operations
2019-05-12 17:17:21 +02:00
Stephan van Veen
15f45c2054
Simplify get method
2019-05-12 15:21:11 +02:00
Stephan van Veen
84adf5b2df
Simplify creating of help option
2019-05-12 14:55:45 +02:00
Stephan van Veen
ecf8286c9e
Resolve template recursion in add_parents method
2019-05-12 14:55:45 +02:00
Stephan van Veen
3bd7b342f0
Add const
2019-05-12 14:55:45 +02:00
Stephan van Veen
e923cf2ac3
Invert if-condition to improve readability
2019-05-12 14:55:45 +02:00
Stephan van Veen
95746ae159
Put helper methods into anonymous namespace
2019-05-12 14:55:44 +02:00
Stephan van Veen
8dd508d4b6
Put error message into exception instead of std::cerr
2019-05-12 14:55:44 +02:00
Stephan van Veen
603e87ae69
Move validation logic into Argument class itself
2019-05-12 14:55:44 +02:00
Stephan van Veen
7c938b1f2b
Use stl algorithms instead of nested for loops
2019-05-12 14:55:44 +02:00
Stephan van Veen
a364f3f1e7
Remove code duplication
2019-05-11 18:46:55 +02:00
Stephan van Veen
12ad27f9c3
Don't call print_help inside ArgumentParser
2019-05-11 13:11:49 +02:00
Stephan van Veen
42ff186743
Put error message into exception instead of printing
2019-05-11 12:51:56 +02:00
Stephan van Veen
3c65c5dcab
Add MACRO which calls exit(0) on any runtime_error in parse_args
2019-05-11 11:24:41 +02:00
Stephan van Veen
a0fa02503e
Throw std::runtime_error instead of calling exit(0)
2019-05-11 11:23:44 +02:00
Stephan van Veen
94e4458641
Make use of move semantics
2019-05-11 00:58:20 +02:00
Stephan van Veen
b1c566b434
Prefer emplace_back over push_back
2019-05-10 19:11:43 +02:00
Stephan van Veen
6d3be1927c
Use new constructor of Argument in constructor of ArgumentParser
2019-05-10 17:20:12 +02:00
Stephan van Veen
10fab58969
Replace upsert method by std::map::insert_or_assign
2019-05-10 17:06:28 +02:00
Stephan van Veen
91cd2477de
Fix broken indentation
2019-05-09 20:31:10 +02:00
Stephan van Veen
2dc9121acf
Simplify type traits
2019-05-09 18:44:47 +02:00
Stephan van Veen
df21d07bd6
Prefer emplace_back over push_back
2019-05-09 18:44:46 +02:00
Stephan van Veen
bef90a8d4f
Make use of move semantics
2019-05-09 18:44:46 +02:00
Stephan van Veen
1eadf94438
Use empty() instead of size comparison
2019-05-09 18:44:46 +02:00
Stephan van Veen
d57b191f77
Use range based for loop
2019-05-09 18:44:46 +02:00
Stephan van Veen
89e4bb11ac
Use auto type for iterators
2019-05-09 18:44:46 +02:00
Stephan van Veen
328f1048da
Initialize mNames using
2019-05-09 18:44:46 +02:00
Stephan van Veen
d9bff3dc2b
Construct Argument using template pack of names
2019-05-09 18:44:46 +02:00
Stephan van Veen
8474147a7c
Use default constructor and non-static member initializers
2019-05-09 18:44:46 +02:00
Jack Clarke
4448983ecf
fixed warnings
2019-05-07 17:04:48 +01:00
Pranav Srinivas Kumar
3ea4c79137
Fixes core dump on optional arg (issue #10 )
2019-05-04 11:49:30 -04:00
Pranav Srinivas Kumar
7c9f83c7e1
Fixes issue #9 where error message shows the small form of the argument even though the user enters the long version
2019-05-01 20:06:13 -04:00
Pranav Srinivas Kumar
4d98282e2f
Fixed formatting in error message (Issue #9 )
2019-05-01 19:55:40 -04:00
Zhihao Yuan
af7380f98b
Fix C4267 in MSVC
2019-04-23 18:28:15 -05:00
Pranav Srinivas Kumar
88eca55b06
Fixes issue #6
2019-04-18 22:42:43 -04:00
Pranav Srinivas Kumar
bb4a2dbba7
Renamed directories
2019-04-01 22:01:40 -04:00