//===--- GlobList.h ---------------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H
#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H

#include "clang/Basic/LLVM.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Support/Regex.h"

namespace clang {
namespace tidy {

/// Read-only set of strings represented as a list of positive and negative
/// globs.
///
/// Positive globs add all matched strings to the set, negative globs remove
/// them in the order of appearance in the list.
class GlobList {
public:
  virtual ~GlobList() = default;

  /// \p Globs is a comma-separated list of globs (only the '*' metacharacter is
  /// supported) with an optional '-' prefix to denote exclusion.
  ///
  /// An empty \p Globs string is interpreted as one glob that matches an empty
  /// string.
  ///
  /// \p KeepNegativeGlobs a bool flag indicating whether to keep negative
  /// globs from \p Globs or not. When false, negative globs are simply ignored.
  GlobList(StringRef Globs, bool KeepNegativeGlobs = true);

  /// Returns \c true if the pattern matches \p S. The result is the last
  /// matching glob's Positive flag.
  virtual bool contains(StringRef S) const;

private:
  struct GlobListItem {
    bool IsPositive;
    llvm::Regex Regex;
  };
  SmallVector<GlobListItem, 0> Items;
};

/// A \p GlobList that caches search results, so that search is performed only
/// once for the same query.
class CachedGlobList final : public GlobList {
public:
  using GlobList::GlobList;

  /// \see GlobList::contains
  bool contains(StringRef S) const override;

private:
  mutable llvm::StringMap<bool> Cache;
};

} // namespace tidy
} // namespace clang

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H
