more tests

v2
Brett 2025-02-22 13:38:36 -05:00
parent 30f975e165
commit f8ed21fda5
3 changed files with 539 additions and 504 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.20)
include(cmake/color.cmake)
set(BLT_VERSION 4.0.22)
set(BLT_VERSION 4.0.23)
set(BLT_TARGET BLT)

View File

@ -314,7 +314,7 @@ namespace blt::argparse
m_end(args.data() + args.size())
{
BLT_ASSERT(!args.empty() &&
"Argument consumer must have at least one argument allocated to it. First argument is always assumed to be program");
"Argument consumer must have at least one argument allocated to it. First argument is always assumed to be program");
}
[[nodiscard]] const argument_string_t& absolute_first() const
@ -567,12 +567,9 @@ namespace blt::argparse
class argument_positional_storage_t
{
public:
argument_positional_storage_t() = default;
argument_builder_t& add(const std::string_view name)
explicit argument_positional_storage_t(std::vector<std::pair<std::string, argument_builder_t>> storage): positional_arguments(
std::move(storage))
{
positional_arguments.emplace_back(name, argument_builder_t{});
return positional_arguments.back().second;
}
argument_builder_t& peek()
@ -627,7 +624,7 @@ namespace blt::argparse
argument_builder_t& add_positional(const std::string_view arg)
{
auto& b = m_positional_arguments.add(arg);
auto& b = m_positional_arguments.emplace_back(arg, argument_builder_t{}).second;
b.set_dest(std::string{arg});
b.set_required(true);
b.set_nargs(1);
@ -722,13 +719,14 @@ namespace blt::argparse
void handle_compound_flags(hashset_t<std::string>& found_flags, argument_storage_t& parsed_args, argument_consumer_t& consumer,
const argument_string_t& arg);
void parse_flag(argument_storage_t& parsed_args, argument_consumer_t& consumer, std::string_view arg);
void parse_positional(argument_storage_t& parsed_args, argument_consumer_t& consumer, std::string_view arg);
void parse_positional(argument_storage_t& parsed_args, argument_consumer_t& consumer, argument_positional_storage_t& storage,
std::string_view arg);
static void handle_missing_and_default_args(hashmap_t<std::string_view, argument_builder_t*>& arguments,
const hashset_t<std::string>& found, argument_storage_t& parsed_args, std::string_view type);
static expected<std::vector<std::string>, std::string> consume_until_flag_or_end(argument_consumer_t& consumer,
hashset_t<std::string>* allowed_choices);
hashset_t<std::string>* allowed_choices);
static std::vector<std::string> consume_argc(i32 argc, argument_consumer_t& consumer, hashset_t<std::string>* allowed_choices,
std::string_view arg);
std::string_view arg);
std::optional<std::string> m_name;
std::optional<std::string> m_usage;
@ -737,7 +735,7 @@ namespace blt::argparse
std::vector<std::pair<std::string_view, argument_subparser_t>> m_subparsers;
std::vector<std::unique_ptr<argument_builder_t>> m_argument_builders;
hashmap_t<std::string_view, argument_builder_t*> m_flag_arguments;
argument_positional_storage_t m_positional_arguments;
std::vector<std::pair<std::string, argument_builder_t>> m_positional_arguments;
hashset_t<char> allowed_flag_prefixes = {'-', '+', '/'};
};

File diff suppressed because it is too large Load Diff