Commit 0c1114c4 by Gennadiy Rozental Committed by Copybara-Service

Eliminate internal ArgvListAction enum.

PiperOrigin-RevId: 512697257
Change-Id: I828ac7a4ada482d60beba767ef9da6e2c0077c33
parent 2d2801a3
...@@ -41,10 +41,16 @@ enum class OnUndefinedFlag { ...@@ -41,10 +41,16 @@ enum class OnUndefinedFlag {
}; };
std::vector<char*> ParseCommandLineImpl(int argc, char* argv[], std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
ArgvListAction arg_list_act,
UsageFlagsAction usage_flag_act, UsageFlagsAction usage_flag_act,
OnUndefinedFlag on_undef_flag); OnUndefinedFlag on_undef_flag);
// To be removed
inline std::vector<char*> ParseCommandLineImpl(
int argc, char* argv[], ArgvListAction /* arg_list_act */,
UsageFlagsAction usage_flag_act, OnUndefinedFlag on_undef_flag) {
return ParseCommandLineImpl(argc, argv, usage_flag_act, on_undef_flag);
}
// -------------------------------------------------------------------- // --------------------------------------------------------------------
// Inspect original command line // Inspect original command line
......
...@@ -664,7 +664,6 @@ std::vector<std::string> GetMisspellingHints(const absl::string_view flag) { ...@@ -664,7 +664,6 @@ std::vector<std::string> GetMisspellingHints(const absl::string_view flag) {
// -------------------------------------------------------------------- // --------------------------------------------------------------------
std::vector<char*> ParseCommandLineImpl(int argc, char* argv[], std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
ArgvListAction arg_list_act,
UsageFlagsAction usage_flag_act, UsageFlagsAction usage_flag_act,
OnUndefinedFlag on_undef_flag) { OnUndefinedFlag on_undef_flag) {
ABSL_INTERNAL_CHECK(argc > 0, "Missing argv[0]"); ABSL_INTERNAL_CHECK(argc > 0, "Missing argv[0]");
...@@ -740,10 +739,6 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[], ...@@ -740,10 +739,6 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
continue; continue;
} }
if (arg_from_argv && (arg_list_act == ArgvListAction::kKeepParsedArgs)) {
output_args.push_back(argv[curr_list.FrontIndex()]);
}
// 60. Split the current argument on '=' to figure out the argument // 60. Split the current argument on '=' to figure out the argument
// name and value. If flag name is empty it means we've got "--". value // name and value. If flag name is empty it means we've got "--". value
// can be empty either if there were no '=' in argument string at all or // can be empty either if there were no '=' in argument string at all or
...@@ -784,18 +779,11 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[], ...@@ -784,18 +779,11 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
} }
// 90. Deduce flag's value (from this or next argument) // 90. Deduce flag's value (from this or next argument)
auto curr_index = curr_list.FrontIndex();
bool value_success = true; bool value_success = true;
std::tie(value_success, value) = std::tie(value_success, value) =
DeduceFlagValue(*flag, value, is_negative, is_empty_value, &curr_list); DeduceFlagValue(*flag, value, is_negative, is_empty_value, &curr_list);
success &= value_success; success &= value_success;
// If above call consumed an argument, it was a standalone value
if (arg_from_argv && (arg_list_act == ArgvListAction::kKeepParsedArgs) &&
(curr_index != curr_list.FrontIndex())) {
output_args.push_back(argv[curr_list.FrontIndex()]);
}
// 100. Set the located flag to a new new value, unless it is retired. // 100. Set the located flag to a new new value, unless it is retired.
// Setting retired flag fails, but we ignoring it here while also reporting // Setting retired flag fails, but we ignoring it here while also reporting
// access to retired flag. // access to retired flag.
...@@ -881,8 +869,7 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[], ...@@ -881,8 +869,7 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[],
std::vector<char*> ParseCommandLine(int argc, char* argv[]) { std::vector<char*> ParseCommandLine(int argc, char* argv[]) {
return flags_internal::ParseCommandLineImpl( return flags_internal::ParseCommandLineImpl(
argc, argv, flags_internal::ArgvListAction::kRemoveParsedArgs, argc, argv, flags_internal::UsageFlagsAction::kHandleUsage,
flags_internal::UsageFlagsAction::kHandleUsage,
flags_internal::OnUndefinedFlag::kAbortIfUndefined); flags_internal::OnUndefinedFlag::kAbortIfUndefined);
} }
......
...@@ -854,41 +854,6 @@ TEST_F(ParseTest, TestReadingFlagsFromEnvMoxedWithRegularFlags) { ...@@ -854,41 +854,6 @@ TEST_F(ParseTest, TestReadingFlagsFromEnvMoxedWithRegularFlags) {
// -------------------------------------------------------------------- // --------------------------------------------------------------------
TEST_F(ParseTest, TestKeepParsedArgs) {
const char* in_args1[] = {
"testbin", "arg1", "--bool_flag",
"--int_flag=211", "arg2", "--double_flag=1.1",
"--string_flag", "asd", "--",
"arg3", "arg4",
};
auto out_args1 = InvokeParse(in_args1);
EXPECT_THAT(
out_args1,
ElementsAreArray({absl::string_view("testbin"), absl::string_view("arg1"),
absl::string_view("arg2"), absl::string_view("arg3"),
absl::string_view("arg4")}));
auto out_args2 = flags::ParseCommandLineImpl(
11, const_cast<char**>(in_args1), flags::ArgvListAction::kKeepParsedArgs,
flags::UsageFlagsAction::kHandleUsage,
flags::OnUndefinedFlag::kAbortIfUndefined);
EXPECT_THAT(
out_args2,
ElementsAreArray({absl::string_view("testbin"),
absl::string_view("--bool_flag"),
absl::string_view("--int_flag=211"),
absl::string_view("--double_flag=1.1"),
absl::string_view("--string_flag"),
absl::string_view("asd"), absl::string_view("--"),
absl::string_view("arg1"), absl::string_view("arg2"),
absl::string_view("arg3"), absl::string_view("arg4")}));
}
// --------------------------------------------------------------------
TEST_F(ParseTest, TestIgnoreUndefinedFlags) { TEST_F(ParseTest, TestIgnoreUndefinedFlags) {
const char* in_args1[] = { const char* in_args1[] = {
"testbin", "testbin",
...@@ -898,34 +863,13 @@ TEST_F(ParseTest, TestIgnoreUndefinedFlags) { ...@@ -898,34 +863,13 @@ TEST_F(ParseTest, TestIgnoreUndefinedFlags) {
}; };
auto out_args1 = flags::ParseCommandLineImpl( auto out_args1 = flags::ParseCommandLineImpl(
4, const_cast<char**>(in_args1), flags::ArgvListAction::kRemoveParsedArgs, 4, const_cast<char**>(in_args1), flags::UsageFlagsAction::kHandleUsage,
flags::UsageFlagsAction::kHandleUsage,
flags::OnUndefinedFlag::kIgnoreUndefined); flags::OnUndefinedFlag::kIgnoreUndefined);
EXPECT_THAT(out_args1, ElementsAreArray({absl::string_view("testbin"), EXPECT_THAT(out_args1, ElementsAreArray({absl::string_view("testbin"),
absl::string_view("arg1")})); absl::string_view("arg1")}));
EXPECT_EQ(absl::GetFlag(FLAGS_int_flag), 21); EXPECT_EQ(absl::GetFlag(FLAGS_int_flag), 21);
const char* in_args2[] = {
"testbin",
"arg1",
"--undef_flag=aa",
"--string_flag=AA",
};
auto out_args2 = flags::ParseCommandLineImpl(
4, const_cast<char**>(in_args2), flags::ArgvListAction::kKeepParsedArgs,
flags::UsageFlagsAction::kHandleUsage,
flags::OnUndefinedFlag::kIgnoreUndefined);
EXPECT_THAT(
out_args2,
ElementsAreArray(
{absl::string_view("testbin"), absl::string_view("--undef_flag=aa"),
absl::string_view("--string_flag=AA"), absl::string_view("arg1")}));
EXPECT_EQ(absl::GetFlag(FLAGS_string_flag), "AA");
} }
// -------------------------------------------------------------------- // --------------------------------------------------------------------
...@@ -945,8 +889,7 @@ TEST_F(ParseDeathTest, TestSimpleHelpFlagHandling) { ...@@ -945,8 +889,7 @@ TEST_F(ParseDeathTest, TestSimpleHelpFlagHandling) {
}; };
auto out_args2 = flags::ParseCommandLineImpl( auto out_args2 = flags::ParseCommandLineImpl(
3, const_cast<char**>(in_args2), flags::ArgvListAction::kRemoveParsedArgs, 3, const_cast<char**>(in_args2), flags::UsageFlagsAction::kIgnoreUsage,
flags::UsageFlagsAction::kIgnoreUsage,
flags::OnUndefinedFlag::kAbortIfUndefined); flags::OnUndefinedFlag::kAbortIfUndefined);
EXPECT_EQ(flags::GetFlagsHelpMode(), flags::HelpMode::kImportant); EXPECT_EQ(flags::GetFlagsHelpMode(), flags::HelpMode::kImportant);
...@@ -962,8 +905,7 @@ TEST_F(ParseDeathTest, TestSubstringHelpFlagHandling) { ...@@ -962,8 +905,7 @@ TEST_F(ParseDeathTest, TestSubstringHelpFlagHandling) {
}; };
auto out_args1 = flags::ParseCommandLineImpl( auto out_args1 = flags::ParseCommandLineImpl(
2, const_cast<char**>(in_args1), flags::ArgvListAction::kRemoveParsedArgs, 2, const_cast<char**>(in_args1), flags::UsageFlagsAction::kIgnoreUsage,
flags::UsageFlagsAction::kIgnoreUsage,
flags::OnUndefinedFlag::kAbortIfUndefined); flags::OnUndefinedFlag::kAbortIfUndefined);
EXPECT_EQ(flags::GetFlagsHelpMode(), flags::HelpMode::kMatch); EXPECT_EQ(flags::GetFlagsHelpMode(), flags::HelpMode::kMatch);
...@@ -972,8 +914,7 @@ TEST_F(ParseDeathTest, TestSubstringHelpFlagHandling) { ...@@ -972,8 +914,7 @@ TEST_F(ParseDeathTest, TestSubstringHelpFlagHandling) {
const char* in_args2[] = {"testbin", "--help", "some_positional_arg"}; const char* in_args2[] = {"testbin", "--help", "some_positional_arg"};
auto out_args2 = flags::ParseCommandLineImpl( auto out_args2 = flags::ParseCommandLineImpl(
3, const_cast<char**>(in_args2), flags::ArgvListAction::kRemoveParsedArgs, 3, const_cast<char**>(in_args2), flags::UsageFlagsAction::kIgnoreUsage,
flags::UsageFlagsAction::kIgnoreUsage,
flags::OnUndefinedFlag::kAbortIfUndefined); flags::OnUndefinedFlag::kAbortIfUndefined);
EXPECT_EQ(flags::GetFlagsHelpMode(), flags::HelpMode::kImportant); EXPECT_EQ(flags::GetFlagsHelpMode(), flags::HelpMode::kImportant);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment