49 lines · cpp
1//===----------------------------------------------------------------------===//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-exception6//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, bool CanonicalTypes)22 : NameMatchers(NameList.begin(), NameList.end()),23 CanonicalTypes(CanonicalTypes) {}24 25MatchesAnyListedTypeNameMatcher::~MatchesAnyListedTypeNameMatcher() = default;26 27bool MatchesAnyListedTypeNameMatcher::matches(28 const QualType &Node, ast_matchers::internal::ASTMatchFinder *Finder,29 ast_matchers::internal::BoundNodesTreeBuilder *Builder) const {30 if (NameMatchers.empty())31 return false;32 33 PrintingPolicy PrintingPolicyWithSuppressedTag(34 Finder->getASTContext().getLangOpts());35 PrintingPolicyWithSuppressedTag.PrintAsCanonical = CanonicalTypes;36 PrintingPolicyWithSuppressedTag.FullyQualifiedName = true;37 PrintingPolicyWithSuppressedTag.SuppressScope = false;38 PrintingPolicyWithSuppressedTag.SuppressTagKeyword = true;39 PrintingPolicyWithSuppressedTag.SuppressUnwrittenScope = true;40 std::string TypeName =41 Node.getUnqualifiedType().getAsString(PrintingPolicyWithSuppressedTag);42 43 return llvm::any_of(NameMatchers, [&TypeName](const llvm::Regex &NM) {44 return NM.isValid() && NM.match(TypeName);45 });46}47 48} // namespace clang::tidy::matchers49