[clang-tools-extra] r370193 - [clang-tidy] readability-identifier-naming shouldn't complain about CRTP pseudo-overrides
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 28 05:08:58 PDT 2019
Author: sammccall
Date: Wed Aug 28 05:08:57 2019
New Revision: 370193
URL: http://llvm.org/viewvc/llvm-project?rev=370193&view=rev
Log:
[clang-tidy] readability-identifier-naming shouldn't complain about CRTP pseudo-overrides
Reviewers: ilya-biryukov
Subscribers: xazax.hun, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D66864
Modified:
clang-tools-extra/trunk/clang-tidy/readability/IdentifierNamingCheck.cpp
clang-tools-extra/trunk/docs/clang-tidy/checks/readability-identifier-naming.rst
clang-tools-extra/trunk/test/clang-tidy/readability-identifier-naming.cpp
Modified: clang-tools-extra/trunk/clang-tidy/readability/IdentifierNamingCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/IdentifierNamingCheck.cpp?rev=370193&r1=370192&r2=370193&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/readability/IdentifierNamingCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/readability/IdentifierNamingCheck.cpp Wed Aug 28 05:08:57 2019
@@ -10,6 +10,7 @@
#include "../utils/ASTUtils.h"
#include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/AST/CXXInheritance.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Lex/PPCallbacks.h"
#include "clang/Lex/Preprocessor.h"
@@ -579,6 +580,15 @@ static StyleKind findStyleKind(
Decl->size_overridden_methods() > 0)
return SK_Invalid;
+ // If this method has the same name as any base method, this is likely
+ // necessary even if it's not an override. e.g. CRTP.
+ auto FindHidden = [&](const CXXBaseSpecifier *S, clang::CXXBasePath &P) {
+ return CXXRecordDecl::FindOrdinaryMember(S, P, Decl->getDeclName());
+ };
+ CXXBasePaths UnusedPaths;
+ if (Decl->getParent()->lookupInBases(FindHidden, UnusedPaths))
+ return SK_Invalid;
+
if (Decl->isConstexpr() && NamingStyles[SK_ConstexprMethod])
return SK_ConstexprMethod;
Modified: clang-tools-extra/trunk/docs/clang-tidy/checks/readability-identifier-naming.rst
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-tidy/checks/readability-identifier-naming.rst?rev=370193&r1=370192&r2=370193&view=diff
==============================================================================
--- clang-tools-extra/trunk/docs/clang-tidy/checks/readability-identifier-naming.rst (original)
+++ clang-tools-extra/trunk/docs/clang-tidy/checks/readability-identifier-naming.rst Wed Aug 28 05:08:57 2019
@@ -26,6 +26,10 @@ Many configuration options are available
different rules for different kinds of identifiers. In general, the rules are
falling back to a more generic rule if the specific case is not configured.
+The naming of virtual methods is reported where they occur in the base class,
+but not where they are overridden, as it can't be fixed locally there.
+This also applies for pseudo-override patterns like CRTP.
+
Options
-------
Modified: clang-tools-extra/trunk/test/clang-tidy/readability-identifier-naming.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-identifier-naming.cpp?rev=370193&r1=370192&r2=370193&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/readability-identifier-naming.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/readability-identifier-naming.cpp Wed Aug 28 05:08:57 2019
@@ -262,6 +262,32 @@ void InstantiateClassMethods() {
CMyWellNamedClass2<int> x5(42, nullptr);
}
+class AOverridden {
+public:
+ virtual ~AOverridden() = default;
+ virtual void BadBaseMethod() = 0;
+ // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethod'
+};
+
+class COverriding : public AOverridden {
+public:
+ // Overriding a badly-named base isn't a new violation.
+ void BadBaseMethod() override {}
+};
+
+template <typename derived_t>
+class CRTPBase {
+public:
+ void BadBaseMethod(int) {}
+ // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for method 'BadBaseMethod'
+};
+
+class CRTPDerived : CRTPBase<CRTPDerived> {
+public:
+ // Hiding a badly-named base isn't a new violation.
+ double BadBaseMethod(double) { return 0; }
+};
+
template<typename T>
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: invalid case style for type template parameter 'T'
// CHECK-FIXES: {{^}}template<typename t_t>{{$}}
More information about the cfe-commits
mailing list