diff options
author | Carlos Galvez <carlosgalvezp@gmail.com> | 2022-12-01 13:15:32 +0000 |
---|---|---|
committer | Carlos Galvez <carlosgalvezp@gmail.com> | 2022-12-12 15:26:14 +0000 |
commit | 35d9f873e3f21846de1b8f07271feedbbe8518ed (patch) | |
tree | cd2ed1a6e7ae79f83335ccf9fe14e4fdd93c44f4 /clang-tools-extra/clang-tidy/misc/UseAnonymousNamespaceCheck.cpp | |
parent | 58f1534320318e366fd19e7451272bb9a6774e5f (diff) | |
download | llvm-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.cpp | 36 |
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); } |