mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[Option] For typo '-foo', suggest '--foo'
Summary: https://reviews.llvm.org/rL321877 introduced the `OptTable::findNearest` method, to find the closest edit distance option for a given string. However, the implementation contained a bug: for a typo `-foo` with an edit distance of 1 away from a valid option `--foo`, `findNearest` would suggest a nearby option of `foo`. That is, the result would not include the `--` prefix, and so was not a valid option. Fix the bug by ensuring that the prefix string is initialized to one of the valid prefixes for the option. Test Plan: `check-llvm-unit` Reviewers: v.g.vassilev, teemperor, ruiu, jroelofs, yamaguchi Reviewed By: jroelofs Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D41873 llvm-svn: 322109
This commit is contained in:
parent
0f0fe4383d
commit
6abdbd7d39
@ -277,8 +277,8 @@ unsigned OptTable::findNearest(StringRef Option, std::string &NearestString,
|
|||||||
continue;
|
continue;
|
||||||
// Find the most appropriate prefix. For example, if a user asks for
|
// Find the most appropriate prefix. For example, if a user asks for
|
||||||
// "--helm", suggest "--help" over "-help".
|
// "--helm", suggest "--help" over "-help".
|
||||||
StringRef Prefix;
|
StringRef Prefix = CandidateInfo.Prefixes[0];
|
||||||
for (int P = 0; CandidateInfo.Prefixes[P]; P++) {
|
for (int P = 1; CandidateInfo.Prefixes[P]; P++) {
|
||||||
if (Option.startswith(CandidateInfo.Prefixes[P]))
|
if (Option.startswith(CandidateInfo.Prefixes[P]))
|
||||||
Prefix = CandidateInfo.Prefixes[P];
|
Prefix = CandidateInfo.Prefixes[P];
|
||||||
}
|
}
|
||||||
|
@ -283,6 +283,8 @@ TEST(Option, FindNearest) {
|
|||||||
EXPECT_EQ(Nearest, "-blorp");
|
EXPECT_EQ(Nearest, "-blorp");
|
||||||
EXPECT_EQ(1U, T.findNearest("--blorm", Nearest));
|
EXPECT_EQ(1U, T.findNearest("--blorm", Nearest));
|
||||||
EXPECT_EQ(Nearest, "--blorp");
|
EXPECT_EQ(Nearest, "--blorp");
|
||||||
|
EXPECT_EQ(1U, T.findNearest("-fjormp", Nearest));
|
||||||
|
EXPECT_EQ(Nearest, "--fjormp");
|
||||||
|
|
||||||
// The nearest candidate respects the prefix and value delimiter
|
// The nearest candidate respects the prefix and value delimiter
|
||||||
// of the original string.
|
// of the original string.
|
||||||
|
@ -34,4 +34,5 @@ def Cramb : Joined<["/"], "cramb:">, HelpText<"The cramb option">, MetaVarName<"
|
|||||||
def Doopf1 : Flag<["-"], "doopf1">, HelpText<"The doopf1 option">, Flags<[OptFlag1]>;
|
def Doopf1 : Flag<["-"], "doopf1">, HelpText<"The doopf1 option">, Flags<[OptFlag1]>;
|
||||||
def Doopf2 : Flag<["-"], "doopf2">, HelpText<"The doopf2 option">, Flags<[OptFlag2]>;
|
def Doopf2 : Flag<["-"], "doopf2">, HelpText<"The doopf2 option">, Flags<[OptFlag2]>;
|
||||||
def Ermgh : Joined<["--"], "ermgh">, HelpText<"The ermgh option">, MetaVarName<"ERMGH">, Flags<[OptFlag1]>;
|
def Ermgh : Joined<["--"], "ermgh">, HelpText<"The ermgh option">, MetaVarName<"ERMGH">, Flags<[OptFlag1]>;
|
||||||
|
def Fjormp : Flag<["--"], "fjormp">, HelpText<"The fjormp option">, Flags<[OptFlag1]>;
|
||||||
def DashDash : Option<["--"], "", KIND_REMAINING_ARGS>;
|
def DashDash : Option<["--"], "", KIND_REMAINING_ARGS>;
|
||||||
|
Loading…
Reference in New Issue
Block a user