diff --git a/clang-tools-extra/clang-tidy/GlobList.h b/clang-tools-extra/clang-tidy/GlobList.h --- a/clang-tools-extra/clang-tidy/GlobList.h +++ b/clang-tools-extra/clang-tidy/GlobList.h @@ -10,9 +10,9 @@ #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H #include "clang/Basic/LLVM.h" +#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Regex.h" -#include namespace clang { namespace tidy { @@ -39,9 +39,9 @@ struct GlobListItem { bool IsPositive; - mutable llvm::Regex Regex; + llvm::Regex Regex; }; - std::vector Items; + SmallVector Items; }; } // end namespace tidy diff --git a/clang-tools-extra/clang-tidy/GlobList.cpp b/clang-tools-extra/clang-tidy/GlobList.cpp --- a/clang-tools-extra/clang-tidy/GlobList.cpp +++ b/clang-tools-extra/clang-tidy/GlobList.cpp @@ -34,7 +34,7 @@ for (char C : Glob) { if (C == '*') RegexText.push_back('.'); - else if (MetaChars.find(C) != StringRef::npos) + else if (MetaChars.contains(C)) RegexText.push_back('\\'); RegexText.push_back(C); } @@ -43,6 +43,7 @@ } GlobList::GlobList(StringRef Globs) { + Items.reserve(Globs.count(',') + 1); do { GlobListItem Item; Item.IsPositive = !ConsumeNegativeIndicator(Globs); @@ -52,10 +53,11 @@ } bool GlobList::contains(StringRef S) { - bool Contains = false; - for (const GlobListItem &Item : Items) { + // Iterating the container backwards as the last match determins if S is in + // the list. + for (const GlobListItem &Item : llvm::reverse(Items)) { if (Item.Regex.match(S)) - Contains = Item.IsPositive; + return Item.IsPositive; } - return Contains; + return false; }