//===--- 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::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 clang::tidy

#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H
