1//===---------- Matchers.cpp - clang-tidy ---------------------------------===//
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#include "Matchers.h"
10#include "ASTUtils.h"
11
12namespace clang::tidy::matchers {
13
14bool NotIdenticalStatementsPredicate::operator()(
15 const clang::ast_matchers::internal::BoundNodesMap &Nodes) const {
16 return !utils::areStatementsIdentical(Node.get<Stmt>(),
17 Nodes.getNodeAs<Stmt>(ID), *Context);
18}
19
20MatchesAnyListedTypeNameMatcher::MatchesAnyListedTypeNameMatcher(
21 llvm::ArrayRef<StringRef> NameList)
22 : NameMatchers(NameList.begin(), NameList.end()) {}
23
24MatchesAnyListedTypeNameMatcher::~MatchesAnyListedTypeNameMatcher() = default;
25
26bool MatchesAnyListedTypeNameMatcher::matches(
27 const QualType &Node, ast_matchers::internal::ASTMatchFinder *Finder,
28 ast_matchers::internal::BoundNodesTreeBuilder *Builder) const {
29
30 if (NameMatchers.empty())
31 return false;
32
33 PrintingPolicy PrintingPolicyWithSuppressedTag(
34 Finder->getASTContext().getLangOpts());
35 PrintingPolicyWithSuppressedTag.PrintCanonicalTypes = true;
36 PrintingPolicyWithSuppressedTag.SuppressElaboration = true;
37 PrintingPolicyWithSuppressedTag.SuppressScope = false;
38 PrintingPolicyWithSuppressedTag.SuppressTagKeyword = true;
39 PrintingPolicyWithSuppressedTag.SuppressUnwrittenScope = true;
40 std::string TypeName =
41 Node.getUnqualifiedType().getAsString(Policy: PrintingPolicyWithSuppressedTag);
42
43 return llvm::any_of(Range: NameMatchers, P: [&TypeName](const llvm::Regex &NM) {
44 return NM.isValid() && NM.match(String: TypeName);
45 });
46}
47
48} // namespace clang::tidy::matchers
49

source code of clang-tools-extra/clang-tidy/utils/Matchers.cpp