49 lines
1.8 KiB
C++
49 lines
1.8 KiB
C++
|
//===---------- 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
|