1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-06-12 16:52:44 +08:00

21 Commits

Author SHA1 Message Date
Matthew Woehlke
f2ef60ca54 cmArgumentParser: Ignore positional after keyword
Tweak cmArgumentParser to ignore positional arguments once a keyword
argument has been seen. This prevents mingling of keyword arguments
being able to effectively skip positional arguments, with later
arguments being picked up again; this seems highly likely to lead to
user confusion. This is also consistent with how other languages (e.g.
Python) handle a mix of "named" and positional arguments.
2022-08-17 11:03:51 -04:00
Brad King
7ca8d9f0f8 cmArgumentParser: Model non-empty strings with wrapper type
Some clients have been explicitly checking whether the string specified
after a keyword is empty.  Offer them a way to specify that the string
must be non-empty as part of the binding type.
2022-07-28 08:24:47 -04:00
Brad King
236bacc244 cmArgumentParser: Offer bindings for positional arguments 2022-07-27 07:03:32 -04:00
Brad King
f5d2f6076a cmArgumentParser: Generalize expected argument count
Replace the boolean expectation with an integer count.
2022-07-27 07:03:32 -04:00
Brad King
078e2aec8f cmArgumentParser: Generalize internal state tracking
Use a `std::function` to support general actions on value arguments.
2022-07-27 07:03:32 -04:00
Brad King
2eba10c5ee cmArgumentParser: Drop unused parsedKeywords argument to Parse()
All clients have been ported to use a binding instead.
2022-07-25 13:52:11 -04:00
Brad King
f7e81802f2 cmArgumentParser: Offer binding for list of parsed keywords
Some clients ask for this list in their `Parse()` call.
Offer them a way to express this request as a binding.
2022-07-25 13:52:01 -04:00
Brad King
f95a5832c7 cmArgumentParser: Drop unused keywordsMissingValue argument to Parse()
All clients have been converted to encoding this requirement in their
bindings.
2022-07-25 13:51:43 -04:00
Brad King
9a7efb6813 cmArgumentParser: Offer private binding to cmParseArgumentsCommand
The `keywordsMissingValue` argument to `Parse()` is now needed only for
the `cmake_parse_arguments` result `_KEYWORDS_MISSING_VALUES`.  Offer
its implementation a private binding for this.  Our internal clients can
use `ArgumentParser::NonEmpty<>` and friends to enforce the presence of
values.
2022-07-25 13:48:26 -04:00
Brad King
b7c82b26b0 cmArgumentParser: Capture keyword errors in parse results
Since commit f46b2e9142 (cmArgumentParser: Model maybe-missing string
with wrapper type, 2022-07-06) we know during parsing whether or not it
is an error for a keyword to be missing a value.  Record such errors in
the parse results structure.  Offer clients a helper method to report
them.  This provides clients with an alternative to manually checking
`keywordsMissingValue` and generating their own error message.
2022-07-22 10:32:24 -04:00
Brad King
5955ec1992 cmArgumentParser: Store keyword action map with explicit name 2022-07-22 10:32:17 -04:00
Brad King
84b335c286 cmArgumentParser: Track pending keyword explicitly
Avoid allocating missing keyword vector unnecessarily.
2022-07-20 16:03:13 -04:00
Brad King
197ef69aa1 cmArgumentParser: Simplify internal method signatures
Record `Parse` parameters during construction of the internal instance
instead of passing them to every method.
2022-07-20 16:03:12 -04:00
Brad King
f46b2e9142 cmArgumentParser: Model maybe-missing string with wrapper type
Bindings to `std::string` require one value.  Some clients have been
filtering `keywordsMissingValue` to support keywords that tolerate a
missing value.  Offer them a type-safe way to achieve this instead.
2022-07-07 09:49:04 -04:00
Brad King
e6d1e29ffa cmArgumentParser: Model maybe-empty and non-empty lists with wrapper types
Previously bindings to `std::vector<std::string>` required at least one
value.  Some clients have been filtering `keywordsMissingValue` to
support keywords followed by empty lists.  Instead, require clients to
specify whether a keyword's list can be empty as part of the binding
type.
2022-07-07 09:48:58 -04:00
Brad King
f3dbf4b89d cmArgumentParser: Remove unnecessary local names for common types 2022-07-05 16:35:01 -04:00
Brad King
1ee5a4a548 cmArgumentParser: Avoid allocating copies of keyword strings 2022-07-05 16:34:57 -04:00
Ben Boeckel
1bf8938825 IWYU: add a mapping for other __decay_and_strip instances 2020-04-29 11:16:44 -04:00
Regina Pfeifer
d5a6a13368 cmArgumentParser: Record parsed keywords 2019-09-20 13:27:30 +02:00
Brad King
aeddf63587 cmArgumentParser: Fix -Wcomma warning
Clang `-Wcomma` warns:

```
Source/cmArgumentParser.cxx:58:42: warning: possible misuse of comma operator
  this->CurrentList = (val.emplace_back(), &val.back());
                                         ^
```

This was introduced by commit 4359fe133b (Introduce cmArgumentParser,
2019-03-23).  Suppress it with the suggested cast.
2019-04-11 10:44:38 -04:00
Regina Pfeifer
4359fe133b Introduce cmArgumentParser 2019-04-04 13:24:39 -04:00