From 7d7127b4637d959e434b8f6ada1ca47cb454c068 Mon Sep 17 00:00:00 2001 From: Liav A Date: Fri, 4 Nov 2022 20:47:36 +0200 Subject: [PATCH] LibCore: Add add_option aggregating the same option multiple times This could be used in a scenario when it is expected that a user program will be invoked with a specific option multiple times, for example: "program --a-option=example --a-option=anotherexample ..." --- Userland/Libraries/LibCore/ArgsParser.cpp | 19 +++++++++++++++++++ Userland/Libraries/LibCore/ArgsParser.h | 3 +++ 2 files changed, 22 insertions(+) diff --git a/Userland/Libraries/LibCore/ArgsParser.cpp b/Userland/Libraries/LibCore/ArgsParser.cpp index 6a450b4161..a1b4c1704e 100644 --- a/Userland/Libraries/LibCore/ArgsParser.cpp +++ b/Userland/Libraries/LibCore/ArgsParser.cpp @@ -569,6 +569,25 @@ void ArgsParser::add_option(Vector& values, char const* help_string, cha add_option(move(option)); } +void ArgsParser::add_option(Vector& values, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode) +{ + Option option { + OptionArgumentMode::Optional, + help_string, + long_name, + short_name, + value_name, + [&values](char const* s) { + String value = s; + values.append(value); + return true; + }, + hide_mode + }; + + add_option(move(option)); +} + void ArgsParser::add_positional_argument(Arg&& arg) { m_positional_args.append(move(arg)); diff --git a/Userland/Libraries/LibCore/ArgsParser.h b/Userland/Libraries/LibCore/ArgsParser.h index 7ad4ce053a..c3764f5d16 100644 --- a/Userland/Libraries/LibCore/ArgsParser.h +++ b/Userland/Libraries/LibCore/ArgsParser.h @@ -95,6 +95,9 @@ public: void add_option(Optional& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); void add_option(Optional& value, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); void add_option(Vector& values, char const* help_string, char const* long_name, char short_name, char const* value_name, char separator = ',', OptionHideMode hide_mode = OptionHideMode::None); + // Note: This option is being used when we expect the user to use the same option + // multiple times (e.g. "program --option=example --option=anotherexample ..."). + void add_option(Vector& values, char const* help_string, char const* long_name, char short_name, char const* value_name, OptionHideMode hide_mode = OptionHideMode::None); void add_positional_argument(Arg&&); void add_positional_argument(char const*& value, char const* help_string, char const* name, Required required = Required::Yes);