diff options
author | Gennadiy Rozental <rogeeff@google.com> | 2023-03-13 21:22:11 -0700 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2023-03-13 21:22:51 -0700 |
commit | 6db185d8e2ba93adf32d689fd702ee0465b2e5ec (patch) | |
tree | 9726a1a6a1e38b7c579feacb53ae6922dbdbb655 /absl | |
parent | 52578edd8950227f1eb28821622c861804241de6 (diff) |
Correct semantic and documentation for the ReportUnrecognizedFlags interface
PiperOrigin-RevId: 516411395
Change-Id: I442fc9435bd7a829802c325e2e4106aa6775c263
Diffstat (limited to 'absl')
-rw-r--r-- | absl/flags/parse.cc | 67 | ||||
-rw-r--r-- | absl/flags/parse.h | 13 |
2 files changed, 41 insertions, 39 deletions
diff --git a/absl/flags/parse.cc b/absl/flags/parse.cc index fcd6a52d..236d31b7 100644 --- a/absl/flags/parse.cc +++ b/absl/flags/parse.cc @@ -22,7 +22,6 @@ #include <cstdlib> #include <fstream> #include <iostream> -#include <iterator> #include <string> #include <tuple> #include <utility> @@ -600,6 +599,34 @@ bool CanIgnoreUndefinedFlag(absl::string_view flag_name) { return false; } +// -------------------------------------------------------------------- + +void ReportUnrecognizedFlags( + const std::vector<UnrecognizedFlag>& unrecognized_flags, + bool report_as_fatal_error) { + for (const auto& unrecognized : unrecognized_flags) { + // Verify if flag_name has the "no" already removed + std::vector<std::string> misspelling_hints; + if (unrecognized.source == UnrecognizedFlag::kFromArgv) { + misspelling_hints = + flags_internal::GetMisspellingHints(unrecognized.flag_name); + } + + if (misspelling_hints.empty()) { + flags_internal::ReportUsageError( + absl::StrCat("Unknown command line flag '", unrecognized.flag_name, + "'"), + report_as_fatal_error); + } else { + flags_internal::ReportUsageError( + absl::StrCat("Unknown command line flag '", unrecognized.flag_name, + "'. Did you mean: ", + absl::StrJoin(misspelling_hints, ", "), " ?"), + report_as_fatal_error); + } + } +} + } // namespace // -------------------------------------------------------------------- @@ -674,12 +701,15 @@ std::vector<char*> ParseCommandLineImpl(int argc, char* argv[], argc, argv, positional_args, unrecognized_flags); if (undef_flag_action != OnUndefinedFlag::kIgnoreUndefined) { - ReportUnrecognizedFlags( - unrecognized_flags, - undef_flag_action == - flags_internal::OnUndefinedFlag::kAbortIfUndefined); + if (parse_successful && + undef_flag_action == OnUndefinedFlag::kAbortIfUndefined) { + if (!unrecognized_flags.empty()) { parse_successful = false; } + } - if (!unrecognized_flags.empty()) { parse_successful = false; } + flags_internal::ReportUnrecognizedFlags( + unrecognized_flags, + !parse_successful && + (undef_flag_action == OnUndefinedFlag::kAbortIfUndefined)); } #if ABSL_FLAGS_STRIP_NAMES @@ -871,29 +901,8 @@ bool ParseAbseilFlagsOnly(int argc, char* argv[], // -------------------------------------------------------------------- void ReportUnrecognizedFlags( - const std::vector<UnrecognizedFlag>& unrecognized_flags, - bool report_fatal_error) { - for (const auto& unrecognized : unrecognized_flags) { - // Verify if flag_name has the "no" already removed - std::vector<std::string> misspelling_hints; - if (unrecognized.source == UnrecognizedFlag::kFromArgv) { - misspelling_hints = - flags_internal::GetMisspellingHints(unrecognized.flag_name); - } - - if (misspelling_hints.empty()) { - flags_internal::ReportUsageError( - absl::StrCat("Unknown command line flag '", unrecognized.flag_name, - "'"), - report_fatal_error); - } else { - flags_internal::ReportUsageError( - absl::StrCat("Unknown command line flag '", unrecognized.flag_name, - "'. Did you mean: ", - absl::StrJoin(misspelling_hints, ", "), " ?"), - report_fatal_error); - } - } + const std::vector<UnrecognizedFlag>& unrecognized_flags) { + flags_internal::ReportUnrecognizedFlags(unrecognized_flags, true); } // -------------------------------------------------------------------- diff --git a/absl/flags/parse.h b/absl/flags/parse.h index a5629375..97327274 100644 --- a/absl/flags/parse.h +++ b/absl/flags/parse.h @@ -90,17 +90,10 @@ bool ParseAbseilFlagsOnly(int argc, char* argv[], // ReportUnrecognizedFlags() // -// Reports an error for all non-ignored unrecognized flags in the provided -// `unrecognized_flags` list. -// -// If `report_fatal_error` is true, the fatal error is reported and program is -// aborted. Otherwise non-fatal error is reported for all flags. -// -// This function returns true if any non-ignored unrecognized flags were -// located in the list and false otherwise. +// Reports an error to `stderr` for all non-ignored unrecognized flags in +// the provided `unrecognized_flags` list. void ReportUnrecognizedFlags( - const std::vector<UnrecognizedFlag>& unrecognized_flags, - bool report_fatal_error); + const std::vector<UnrecognizedFlag>& unrecognized_flags); // ParseCommandLine() // |