[PATCH] D61373: Fix OptTable::findNearest() adding delimiter for free
Phabricator via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 1 07:44:11 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL359685: Fix OptTable::findNearest() adding delimiter for free (authored by nico, committed by ).
Changed prior to commit:
https://reviews.llvm.org/D61373?vs=197545&id=197552#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D61373/new/
https://reviews.llvm.org/D61373
Files:
llvm/trunk/lib/Option/OptTable.cpp
llvm/trunk/unittests/Option/OptionParsingTest.cpp
llvm/trunk/unittests/Option/Opts.td
Index: llvm/trunk/unittests/Option/OptionParsingTest.cpp
===================================================================
--- llvm/trunk/unittests/Option/OptionParsingTest.cpp
+++ llvm/trunk/unittests/Option/OptionParsingTest.cpp
@@ -298,6 +298,11 @@
EXPECT_EQ(1U, T.findNearest("/framb:foo", Nearest));
EXPECT_EQ(Nearest, "/cramb:foo");
+ // `--glormp` should have an editing distance of 1 to `--glormp=`.
+ EXPECT_EQ(1U, T.findNearest("--glormp", Nearest));
+ EXPECT_EQ(Nearest, "--glormp=");
+ EXPECT_EQ(0U, T.findNearest("--glormp=foo", Nearest));
+
// Flags should be included and excluded as specified.
EXPECT_EQ(1U, T.findNearest("-doopf", Nearest, /*FlagsToInclude=*/OptFlag2));
EXPECT_EQ(Nearest, "-doopf2");
Index: llvm/trunk/unittests/Option/Opts.td
===================================================================
--- llvm/trunk/unittests/Option/Opts.td
+++ llvm/trunk/unittests/Option/Opts.td
@@ -36,4 +36,7 @@
def Doopf2 : Flag<["-"], "doopf2">, HelpText<"The doopf2 option">, Flags<[OptFlag2]>;
def Ermgh : Joined<["--"], "ermgh">, HelpText<"The ermgh option">, MetaVarName<"ERMGH">, Flags<[OptFlag1]>;
def Fjormp : Flag<["--"], "fjormp">, HelpText<"The fjormp option">, Flags<[OptFlag1]>;
+
+def Glormp_eq : Flag<["--"], "glormp=">;
+
def DashDash : Option<["--"], "", KIND_REMAINING_ARGS>;
Index: llvm/trunk/lib/Option/OptTable.cpp
===================================================================
--- llvm/trunk/lib/Option/OptTable.cpp
+++ llvm/trunk/lib/Option/OptTable.cpp
@@ -280,23 +280,22 @@
// Now check if the candidate ends with a character commonly used when
// delimiting an option from its value, such as '=' or ':'. If it does,
// attempt to split the given option based on that delimiter.
- std::string Delimiter = "";
- char Last = CandidateName.back();
- if (Last == '=' || Last == ':')
- Delimiter = std::string(1, Last);
-
StringRef LHS, RHS;
- if (Delimiter.empty())
- LHS = Option;
- else
+ char Last = CandidateName.back();
+ bool CandidateHasDelimiter = Last == '=' || Last == ':';
+ std::string NormalizedName = Option;
+ if (CandidateHasDelimiter) {
std::tie(LHS, RHS) = Option.split(Last);
+ NormalizedName = LHS;
+ if (Option.find(Last) == LHS.size())
+ NormalizedName += Last;
+ }
// Consider each possible prefix for each candidate to find the most
// appropriate one. For example, if a user asks for "--helm", suggest
// "--help" over "-help".
for (int P = 0;
const char *const CandidatePrefix = CandidateInfo.Prefixes[P]; P++) {
- std::string NormalizedName = (LHS + Delimiter).str();
std::string Candidate = (CandidatePrefix + CandidateName).str();
StringRef CandidateRef = Candidate;
unsigned Distance =
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61373.197552.patch
Type: text/x-patch
Size: 2828 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190501/1c16d993/attachment.bin>
More information about the llvm-commits
mailing list