mirror of
https://github.com/KeqingMoe/argparse.git
synced 2025-07-04 07:04:39 +00:00
Make throw_* funcs and make validate() clearer
This commit is contained in:
parent
12fcae66a7
commit
3459eec647
@ -553,46 +553,19 @@ public:
|
|||||||
if (mIsOptional) {
|
if (mIsOptional) {
|
||||||
if (mIsUsed && !mNumArgsRange.contains(mValues.size()) && !mIsRepeatable &&
|
if (mIsUsed && !mNumArgsRange.contains(mValues.size()) && !mIsRepeatable &&
|
||||||
!mDefaultValue.has_value()) {
|
!mDefaultValue.has_value()) {
|
||||||
std::stringstream stream;
|
throw_nargs_range_validation_error();
|
||||||
stream << mUsedName << ": expected ";
|
|
||||||
if (mNumArgsRange.is_exact()) {
|
|
||||||
stream << mNumArgsRange.get_min();
|
|
||||||
} else if (mNumArgsRange.is_right_bounded()) {
|
|
||||||
stream << mNumArgsRange.get_min() << " to " << mNumArgsRange.get_max();
|
|
||||||
} else {
|
|
||||||
stream << mNumArgsRange.get_min() << " or more";
|
|
||||||
}
|
|
||||||
stream << " argument(s). "
|
|
||||||
<< mValues.size() << " provided.";
|
|
||||||
throw std::runtime_error(stream.str());
|
|
||||||
} else {
|
} else {
|
||||||
// TODO: check if an implicit value was programmed for this argument
|
// TODO: check if an implicit value was programmed for this argument
|
||||||
if (!mIsUsed && !mDefaultValue.has_value() && mIsRequired) {
|
if (!mIsUsed && !mDefaultValue.has_value() && mIsRequired) {
|
||||||
std::stringstream stream;
|
throw_required_arg_not_used_error();
|
||||||
stream << mNames[0] << ": required.";
|
|
||||||
throw std::runtime_error(stream.str());
|
|
||||||
}
|
}
|
||||||
if (mIsUsed && mIsRequired && mValues.size() == 0) {
|
if (mIsUsed && mIsRequired && mValues.size() == 0) {
|
||||||
std::stringstream stream;
|
throw_required_arg_no_value_provided_error();
|
||||||
stream << mUsedName << ": no value provided.";
|
|
||||||
throw std::runtime_error(stream.str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!mNumArgsRange.contains(mValues.size()) && !mDefaultValue.has_value()) {
|
if (!mNumArgsRange.contains(mValues.size()) && !mDefaultValue.has_value()) {
|
||||||
std::stringstream stream;
|
throw_nargs_range_validation_error();
|
||||||
if (!mUsedName.empty())
|
|
||||||
stream << mUsedName << ": ";
|
|
||||||
if (mNumArgsRange.is_exact()) {
|
|
||||||
stream << mNumArgsRange.get_min();
|
|
||||||
} else if (mNumArgsRange.is_right_bounded()) {
|
|
||||||
stream << mNumArgsRange.get_min() << " to " << mNumArgsRange.get_max();
|
|
||||||
} else {
|
|
||||||
stream << mNumArgsRange.get_min() << " or more";
|
|
||||||
}
|
|
||||||
stream << " argument(s) expected. " << mValues.size()
|
|
||||||
<< " provided.";
|
|
||||||
throw std::runtime_error(stream.str());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -646,6 +619,35 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
void throw_nargs_range_validation_error() const {
|
||||||
|
std::stringstream stream;
|
||||||
|
if (!mUsedName.empty())
|
||||||
|
stream << mUsedName << ": ";
|
||||||
|
if (mNumArgsRange.is_exact()) {
|
||||||
|
stream << mNumArgsRange.get_min();
|
||||||
|
} else if (mNumArgsRange.is_right_bounded()) {
|
||||||
|
stream << mNumArgsRange.get_min() << " to " << mNumArgsRange.get_max();
|
||||||
|
} else {
|
||||||
|
stream << mNumArgsRange.get_min() << " or more";
|
||||||
|
}
|
||||||
|
stream << " argument(s) expected. "
|
||||||
|
<< mValues.size() << " provided.";
|
||||||
|
throw std::runtime_error(stream.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void throw_required_arg_not_used_error() const {
|
||||||
|
std::stringstream stream;
|
||||||
|
stream << mNames[0] << ": required.";
|
||||||
|
throw std::runtime_error(stream.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
void throw_required_arg_no_value_provided_error() const {
|
||||||
|
std::stringstream stream;
|
||||||
|
stream << mUsedName << ": no value provided.";
|
||||||
|
throw std::runtime_error(stream.str());
|
||||||
|
}
|
||||||
|
|
||||||
static constexpr int eof = std::char_traits<char>::eof();
|
static constexpr int eof = std::char_traits<char>::eof();
|
||||||
|
|
||||||
static auto lookahead(std::string_view s) -> int {
|
static auto lookahead(std::string_view s) -> int {
|
||||||
|
Loading…
Reference in New Issue
Block a user