brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · c9086df Raw
71 lines · c
1//===----------------------------------------------------------------------===//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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H10#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H11 12#include "clang/Basic/LLVM.h"13#include "llvm/ADT/SmallVector.h"14#include "llvm/ADT/StringMap.h"15#include "llvm/ADT/StringRef.h"16#include "llvm/Support/Regex.h"17 18namespace clang::tidy {19 20/// Read-only set of strings represented as a list of positive and negative21/// globs.22///23/// Positive globs add all matched strings to the set, negative globs remove24/// them in the order of appearance in the list.25class GlobList {26public:27  virtual ~GlobList() = default;28 29  /// \p Globs is a comma-separated list of globs (only the '*' metacharacter is30  /// supported) with an optional '-' prefix to denote exclusion.31  ///32  /// An empty \p Globs string is interpreted as one glob that matches an empty33  /// string.34  ///35  /// \p KeepNegativeGlobs a bool flag indicating whether to keep negative36  /// globs from \p Globs or not. When false, negative globs are simply ignored.37  GlobList(StringRef Globs, bool KeepNegativeGlobs = true);38 39  /// Returns \c true if the pattern matches \p S. The result is the last40  /// matching glob's Positive flag.41  virtual bool contains(StringRef S) const;42 43private:44  struct GlobListItem {45    bool IsPositive;46    llvm::Regex Regex;47    llvm::StringRef Text;48  };49  SmallVector<GlobListItem, 0> Items;50 51public:52  const SmallVectorImpl<GlobListItem> &getItems() const { return Items; };53};54 55/// A \p GlobList that caches search results, so that search is performed only56/// once for the same query.57class CachedGlobList final : public GlobList {58public:59  using GlobList::GlobList;60 61  /// \see GlobList::contains62  bool contains(StringRef S) const override;63 64private:65  mutable llvm::StringMap<bool> Cache;66};67 68} // namespace clang::tidy69 70#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H71