llvm.org GIT mirror llvm / 2fd0a70
[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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322109 91177308-0d34-0410-b5e6-96231b3b80d8 Brian Gesiak 1 year, 7 months ago
3 changed file(s) with 5 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
276276 continue;
277277 // Find the most appropriate prefix. For example, if a user asks for
278278 // "--helm", suggest "--help" over "-help".
279 StringRef Prefix;
280 for (int P = 0; CandidateInfo.Prefixes[P]; P++) {
279 StringRef Prefix = CandidateInfo.Prefixes[0];
280 for (int P = 1; CandidateInfo.Prefixes[P]; P++) {
281281 if (Option.startswith(CandidateInfo.Prefixes[P]))
282282 Prefix = CandidateInfo.Prefixes[P];
283283 }
282282 EXPECT_EQ(Nearest, "-blorp");
283283 EXPECT_EQ(1U, T.findNearest("--blorm", Nearest));
284284 EXPECT_EQ(Nearest, "--blorp");
285 EXPECT_EQ(1U, T.findNearest("-fjormp", Nearest));
286 EXPECT_EQ(Nearest, "--fjormp");
285287
286288 // The nearest candidate respects the prefix and value delimiter
287289 // of the original string.
3333 def Doopf1 : Flag<["-"], "doopf1">, HelpText<"The doopf1 option">, Flags<[OptFlag1]>;
3434 def Doopf2 : Flag<["-"], "doopf2">, HelpText<"The doopf2 option">, Flags<[OptFlag2]>;
3535 def Ermgh : Joined<["--"], "ermgh">, HelpText<"The ermgh option">, MetaVarName<"ERMGH">, Flags<[OptFlag1]>;
36 def Fjormp : Flag<["--"], "fjormp">, HelpText<"The fjormp option">, Flags<[OptFlag1]>;
3637 def DashDash : Option<["--"], "", KIND_REMAINING_ARGS>;