llvm/clang-tools-extra/clang-tidy/GlobList.h
Carlos Galvez bf6b0d1674 [clang-tidy] Support globbing in NOLINT* expressions
To simplify suppressing warnings (for example, for
when multiple check aliases are enabled).

The globbing format reuses the same code as for
globbing when enabling checks, so the semantics
and behavior is identical.

Differential Revision: https://reviews.llvm.org/D111208
2021-10-19 16:30:51 +00:00

54 lines
1.7 KiB
C++

//===--- 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/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:
/// \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.
bool contains(StringRef S) const;
private:
struct GlobListItem {
bool IsPositive;
llvm::Regex Regex;
};
SmallVector<GlobListItem, 0> Items;
};
} // end namespace tidy
} // end namespace clang
#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_GLOBLIST_H