| //===---------- 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<Stmt>(), |
| Nodes.getNodeAs<Stmt>(ID), *Context); |
| } |
| |
| MatchesAnyListedTypeNameMatcher::MatchesAnyListedTypeNameMatcher( |
| llvm::ArrayRef<StringRef> 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 |