//===---------- Matchers.cpp - clang-tidy ---------------------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "Matchers.h" #include "ASTUtils.h" namespace clang::tidy::matchers { bool NotIdenticalStatementsPredicate::operator()( const clang::ast_matchers::internal::BoundNodesMap &Nodes) const { return !utils::areStatementsIdentical(Node.get(), Nodes.getNodeAs(ID), *Context); } MatchesAnyListedTypeNameMatcher::MatchesAnyListedTypeNameMatcher( llvm::ArrayRef NameList) : NameMatchers(NameList.begin(), NameList.end()) {} MatchesAnyListedTypeNameMatcher::~MatchesAnyListedTypeNameMatcher() = default; bool MatchesAnyListedTypeNameMatcher::matches( const QualType &Node, ast_matchers::internal::ASTMatchFinder *Finder, ast_matchers::internal::BoundNodesTreeBuilder *Builder) const { if (NameMatchers.empty()) return false; PrintingPolicy PrintingPolicyWithSuppressedTag( Finder->getASTContext().getLangOpts()); PrintingPolicyWithSuppressedTag.PrintCanonicalTypes = true; PrintingPolicyWithSuppressedTag.SuppressElaboration = true; PrintingPolicyWithSuppressedTag.SuppressScope = false; PrintingPolicyWithSuppressedTag.SuppressTagKeyword = true; PrintingPolicyWithSuppressedTag.SuppressUnwrittenScope = true; std::string TypeName = Node.getUnqualifiedType().getAsString(PrintingPolicyWithSuppressedTag); return llvm::any_of(NameMatchers, [&TypeName](const llvm::Regex &NM) { return NM.isValid() && NM.match(TypeName); }); } } // namespace clang::tidy::matchers