From 3d516420378d5015b21c3500e910c1337935ea89 Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Tue, 12 Jul 2022 22:13:38 +0200 Subject: [PATCH] LibCore: Replace the ArgsParser option argument setting with an enum Replacement conditions for `requires_argument` have been chosen based on what would be most convenient for implementing an eventual optional argument mode. --- .../LibWeb/WrapperGenerator/main.cpp | 2 +- Userland/Libraries/LibCore/ArgsParser.cpp | 42 +++++++++---------- Userland/Libraries/LibCore/ArgsParser.h | 7 +++- .../LibTest/JavaScriptTestRunnerMain.cpp | 2 +- Userland/Shell/Builtin.cpp | 26 ++++++------ Userland/Utilities/du.cpp | 2 +- Userland/Utilities/grep.cpp | 10 ++--- Userland/Utilities/nl.cpp | 2 +- Userland/Utilities/pro.cpp | 2 +- Userland/Utilities/profile.cpp | 3 +- Userland/Utilities/run-tests.cpp | 2 +- Userland/Utilities/test-unveil.cpp | 4 +- Userland/Utilities/top.cpp | 2 +- Userland/Utilities/wasm.cpp | 4 +- Userland/Utilities/watch.cpp | 2 +- 15 files changed, 59 insertions(+), 53 deletions(-) diff --git a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp index e1321c8a9c..bd934bf346 100644 --- a/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp +++ b/Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator/main.cpp @@ -55,7 +55,7 @@ int main(int argc, char** argv) args_parser.add_option(iterator_prototype_header_mode, "Generate the iterator prototype .h file", "iterator-prototype-header", 0); args_parser.add_option(iterator_prototype_implementation_mode, "Generate the iterator prototype .cpp file", "iterator-prototype-implementation", 0); args_parser.add_option(Core::ArgsParser::Option { - .requires_argument = true, + .argument_mode = Core::ArgsParser::OptionArgumentMode::Required, .help_string = "Add a header search path passed to the compiler", .long_name = "header-include-path", .short_name = 'i', diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index 943fa800f6..b26bf87863 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -60,7 +60,7 @@ bool ArgsParser::parse(int argc, char* const* argv, FailureBehavior failure_beha if (opt.long_name) { option long_opt { opt.long_name, - opt.requires_argument ? required_argument : no_argument, + opt.argument_mode == OptionArgumentMode::Required ? required_argument : no_argument, &index_of_found_long_option, static_cast(i) }; @@ -68,7 +68,7 @@ bool ArgsParser::parse(int argc, char* const* argv, FailureBehavior failure_beha } if (opt.short_name) { short_options_builder.append(opt.short_name); - if (opt.requires_argument) + if (opt.argument_mode != OptionArgumentMode::None) short_options_builder.append(':'); } } @@ -103,7 +103,7 @@ bool ArgsParser::parse(int argc, char* const* argv, FailureBehavior failure_beha } VERIFY(found_option); - char const* arg = found_option->requires_argument ? optarg : nullptr; + char const* arg = found_option->argument_mode != OptionArgumentMode::None ? optarg : nullptr; if (!found_option->accept_value(arg)) { warnln("\033[31mInvalid value for option \033[1m{}\033[22m\033[0m", found_option->name_for_display()); fail(); @@ -200,7 +200,7 @@ void ArgsParser::print_usage_terminal(FILE* file, char const* argv0) for (auto& opt : m_options) { if (opt.hide_mode != OptionHideMode::None) continue; - if (opt.requires_argument) + if (opt.argument_mode == OptionArgumentMode::Required) out(file, " [{} {}]", opt.name_for_display(), opt.value_name); else out(file, " [{}]", opt.name_for_display()); @@ -233,7 +233,7 @@ void ArgsParser::print_usage_terminal(FILE* file, char const* argv0) auto print_argument = [&]() { if (opt.value_name) { - if (opt.requires_argument) + if (opt.argument_mode == OptionArgumentMode::Required) out(file, " {}", opt.value_name); } }; @@ -277,7 +277,7 @@ void ArgsParser::print_usage_markdown(FILE* file, char const* argv0) // FIXME: We allow opt.value_name to be empty even if the option // requires an argument. This should be disallowed as it will // currently display a blank name after the option. - if (opt.requires_argument) + if (opt.argument_mode == OptionArgumentMode::Required) out(file, " [{} {}]", opt.name_for_display(), opt.value_name ?: ""); else out(file, " [{}]", opt.name_for_display()); @@ -320,7 +320,7 @@ void ArgsParser::print_usage_markdown(FILE* file, char const* argv0) auto print_argument = [&]() { if (opt.value_name != nullptr) { - if (opt.requires_argument) + if (opt.argument_mode == OptionArgumentMode::Required) out(file, " {}", opt.value_name); } }; @@ -367,7 +367,7 @@ void ArgsParser::add_option(Option&& option) void ArgsParser::add_ignored(char const* long_name, char short_name, OptionHideMode hide_mode) { Option option { - false, + OptionArgumentMode::None, "Ignored", long_name, short_name, @@ -383,7 +383,7 @@ void ArgsParser::add_ignored(char const* long_name, char short_name, OptionHideM void ArgsParser::add_option(bool& value, char const* help_string, char const* long_name, char short_name, OptionHideMode hide_mode) { Option option { - false, + OptionArgumentMode::None, help_string, long_name, short_name, @@ -401,7 +401,7 @@ void ArgsParser::add_option(bool& value, char const* help_string, char const* lo void ArgsParser::add_option(char const*& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -418,7 +418,7 @@ void ArgsParser::add_option(char const*& value, char const* help_string, char co void ArgsParser::add_option(String& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -435,7 +435,7 @@ void ArgsParser::add_option(String& value, char const* help_string, char const* void ArgsParser::add_option(StringView& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -452,7 +452,7 @@ void ArgsParser::add_option(StringView& value, char const* help_string, char con void ArgsParser::add_option(int& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -470,7 +470,7 @@ void ArgsParser::add_option(int& value, char const* help_string, char const* lon void ArgsParser::add_option(unsigned& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -488,7 +488,7 @@ void ArgsParser::add_option(unsigned& value, char const* help_string, char const void ArgsParser::add_option(double& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -506,7 +506,7 @@ void ArgsParser::add_option(double& value, char const* help_string, char const* void ArgsParser::add_option(Optional& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -523,7 +523,7 @@ void ArgsParser::add_option(Optional& value, char const* help_string, ch void ArgsParser::add_option(Optional& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -540,7 +540,7 @@ void ArgsParser::add_option(Optional& value, char const* help_string, ch void ArgsParser::add_option(Vector& values, char const* help_string, char const* long_name, char short_name, char const* value_name, char separator, OptionHideMode hide_mode) { Option option { - true, + OptionArgumentMode::Required, help_string, long_name, short_name, @@ -754,7 +754,7 @@ void ArgsParser::autocomplete(FILE* file, StringView program_name, Spanrequires_argument) + if (it->argument_mode == OptionArgumentMode::Required) skip_next = true; continue; } @@ -775,7 +775,7 @@ void ArgsParser::autocomplete(FILE* file, StringView program_name, Spanrequires_argument) + if (it->argument_mode == OptionArgumentMode::Required) skip_next = true; continue; } @@ -791,7 +791,7 @@ void ArgsParser::autocomplete(FILE* file, StringView program_name, Span