aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
diff options
context:
space:
mode:
authorCarlos Galvez <carlosgalvezp@gmail.com>2022-12-01 13:15:32 +0000
committerCarlos Galvez <carlosgalvezp@gmail.com>2022-12-12 15:26:14 +0000
commit35d9f873e3f21846de1b8f07271feedbbe8518ed (patch)
treecd2ed1a6e7ae79f83335ccf9fe14e4fdd93c44f4 /clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
parent58f1534320318e366fd19e7451272bb9a6774e5f (diff)
downloadllvm-35d9f873e3f21846de1b8f07271feedbbe8518ed.zip
llvm-35d9f873e3f21846de1b8f07271feedbbe8518ed.tar.gz
llvm-35d9f873e3f21846de1b8f07271feedbbe8518ed.tar.bz2
[clang-tidy] Fix a couple additional cases in misc-use-anonymous-namespace only
- Do not analyze header files, since we don't want to promote using anonymous namespaces there. - Do not warn about const/constexpr variables, those are implicitly static in C++ and they don't need to be moved to an anonymous namespace. Warning about redundant static in general could be implemented as a standalone check, moving away some of the functionality from this check. This check has been introduced in the current release, thus no mention of this change is needed in the Release Notes. Differential Revision: https://reviews.llvm.org/D139113
Diffstat (limited to 'clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp')
-rw-r--r--clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp36
1 files changed, 33 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp b/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
index fdf7828..b26632d 100644
--- a/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
+++ b/clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp
@@ -21,6 +21,15 @@ AST_POLYMORPHIC_MATCHER(isStatic, AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl,
return Node.getStorageClass() == SC_Static;
}
+AST_POLYMORPHIC_MATCHER_P(isInHeaderFile,
+ AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl,
+ VarDecl),
+ utils::FileExtensionsSet, HeaderFileExtensions) {
+ return utils::isExpansionLocInHeaderFile(
+ Node.getBeginLoc(), Finder->getASTContext().getSourceManager(),
+ HeaderFileExtensions);
+}
+
AST_MATCHER(FunctionDecl, isMemberFunction) {
return llvm::isa<CXXMethodDecl>(&Node);
}
@@ -31,15 +40,36 @@ AST_MATCHER(Decl, isInAnonymousNamespace) {
}
} // namespace
+UseAnonymousNamespaceCheck::UseAnonymousNamespaceCheck(
+ StringRef Name, ClangTidyContext *Context)
+ : ClangTidyCheck(Name, Context),
+ RawStringHeaderFileExtensions(Options.getLocalOrGlobal(
+ "HeaderFileExtensions", utils::defaultHeaderFileExtensions())) {
+ if (!utils::parseFileExtensions(RawStringHeaderFileExtensions,
+ HeaderFileExtensions,
+ utils::defaultFileExtensionDelimiters())) {
+ this->configurationDiag("Invalid header file extension: '%0'")
+ << RawStringHeaderFileExtensions;
+ }
+}
+
+void UseAnonymousNamespaceCheck::storeOptions(
+ ClangTidyOptions::OptionMap &Opts) {
+ Options.store(Opts, "HeaderFileExtensions", RawStringHeaderFileExtensions);
+}
+
void UseAnonymousNamespaceCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
functionDecl(isStatic(),
- unless(anyOf(isInAnonymousNamespace(), isMemberFunction())))
+ unless(anyOf(isInHeaderFile(HeaderFileExtensions),
+ isInAnonymousNamespace(), isMemberFunction())))
.bind("x"),
this);
Finder->addMatcher(
- varDecl(isStatic(), unless(anyOf(isInAnonymousNamespace(),
- isStaticLocal(), isStaticDataMember())))
+ varDecl(isStatic(),
+ unless(anyOf(isInHeaderFile(HeaderFileExtensions),
+ isInAnonymousNamespace(), isStaticLocal(),
+ isStaticDataMember(), hasType(isConstQualified()))))
.bind("x"),
this);
}