aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
diff options
context:
space:
mode:
authorCarlos Galvez <carlosgalvezp@gmail.com>2022-12-02 12:48:16 +0000
committerCarlos Galvez <carlosgalvezp@gmail.com>2022-12-08 11:40:50 +0000
commit7fd8387917167d9cb4bab14a8548f0f78b0eaa79 (patch)
treeccf465561db4760ea49a3d7ddf130f29dc274447 /clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
parent19158eb7f06d7ed4a834a35a3afa6bda2685a05b (diff)
downloadllvm-7fd8387917167d9cb4bab14a8548f0f78b0eaa79.zip
llvm-7fd8387917167d9cb4bab14a8548f0f78b0eaa79.tar.gz
llvm-7fd8387917167d9cb4bab14a8548f0f78b0eaa79.tar.bz2
[clang-tidy] Do not warn about redundant static in misc-use-anonymous-namespace
The same functionality is already implemented in the readability-static-definition-in-anonymous-namespace check, including automatic fixes. Differential Revision: https://reviews.llvm.org/D139197
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp31
1 files changed, 12 insertions, 19 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp b/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
index 5632347..878cba3 100644
--- a/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
@@ -25,36 +25,29 @@ AST_MATCHER(FunctionDecl, isMemberFunction) {
return llvm::isa<CXXMethodDecl>(&Node);
}
AST_MATCHER(VarDecl, isStaticDataMember) { return Node.isStaticDataMember(); }
-} // namespace
-static bool isInAnonymousNamespace(const Decl *Decl) {
- const DeclContext *DC = Decl->getDeclContext();
- if (DC && DC->isNamespace()) {
- const auto *ND = llvm::cast<NamespaceDecl>(DC);
- if (ND && ND->isAnonymousNamespace())
- return true;
- }
- return false;
+AST_MATCHER(Decl, isInAnonymousNamespace) {
+ return Node.isInAnonymousNamespace();
}
+} // namespace
template <typename T>
void UseAnonymousNamespaceCheck::processMatch(const T *MatchedDecl) {
StringRef Type = llvm::isa<VarDecl>(MatchedDecl) ? "variable" : "function";
- if (isInAnonymousNamespace(MatchedDecl))
- diag(MatchedDecl->getLocation(), "%0 %1 declared 'static' in "
- "anonymous namespace, remove 'static'")
- << Type << MatchedDecl;
- else
- diag(MatchedDecl->getLocation(),
- "%0 %1 declared 'static', move to anonymous namespace instead")
- << Type << MatchedDecl;
+ diag(MatchedDecl->getLocation(),
+ "%0 %1 declared 'static', move to anonymous namespace instead")
+ << Type << MatchedDecl;
}
void UseAnonymousNamespaceCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
- functionDecl(isStatic(), unless(isMemberFunction())).bind("func"), this);
+ functionDecl(isStatic(),
+ unless(anyOf(isInAnonymousNamespace(), isMemberFunction())))
+ .bind("func"),
+ this);
Finder->addMatcher(
- varDecl(isStatic(), unless(anyOf(isStaticLocal(), isStaticDataMember())))
+ varDecl(isStatic(), unless(anyOf(isInAnonymousNamespace(),
+ isStaticLocal(), isStaticDataMember())))
.bind("var"),
this);
}