1 //===--- GlobList.h ---------------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H 10 #define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H 11 12 #include "clang/Basic/LLVM.h" 13 #include "llvm/ADT/SmallVector.h" 14 #include "llvm/ADT/StringRef.h" 15 #include "llvm/Support/Regex.h" 16 17 namespace clang { 18 namespace tidy { 19 20 /// Read-only set of strings represented as a list of positive and negative 21 /// globs. 22 /// 23 /// Positive globs add all matched strings to the set, negative globs remove 24 /// them in the order of appearance in the list. 25 class GlobList { 26 public: 27 /// \p Globs is a comma-separated list of globs (only the '*' metacharacter is 28 /// supported) with an optional '-' prefix to denote exclusion. 29 /// 30 /// An empty \p Globs string is interpreted as one glob that matches an empty 31 /// string. 32 GlobList(StringRef Globs); 33 34 /// Returns \c true if the pattern matches \p S. The result is the last 35 /// matching glob's Positive flag. 36 bool contains(StringRef S) const; 37 38 private: 39 40 struct GlobListItem { 41 bool IsPositive; 42 llvm::Regex Regex; 43 }; 44 SmallVector<GlobListItem, 0> Items; 45 }; 46 47 } // end namespace tidy 48 } // end namespace clang 49 50 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H 51