summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKirill Bobyrev <omtcyfz@gmail.com>2016-07-20 12:28:38 +0000
committerKirill Bobyrev <omtcyfz@gmail.com>2016-07-20 12:28:38 +0000
commit5d8f071a0773635df1cc2d9b799198a350a732e2 (patch)
tree8dafab508d57ec02ad1be5257874e539d181c20a
parent124f2593fce8b867d3c8dee17bfd3e009b06b67e (diff)
downloadbcm5719-llvm-5d8f071a0773635df1cc2d9b799198a350a732e2.tar.gz
bcm5719-llvm-5d8f071a0773635df1cc2d9b799198a350a732e2.zip
[clang-tidy] readability-identifier-naming - support for other case types
Added Camel_Snake_Case and camel_Snake_Back class Camel_Snake_Case_Class_Name { void private_Camel_Snake_Back_Method_Name(); } Patch by James Reynolds! Reviewers: alexfh Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D21472 llvm-svn: 276110
-rw-r--r--clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp29
-rw-r--r--clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h2
-rw-r--r--clang-tools-extra/test/clang-tidy/readability-identifier-naming.cpp10
3 files changed, 36 insertions, 5 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
index b8df167f8ce..f7d7817ce55 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.cpp
@@ -163,6 +163,8 @@ IdentifierNamingCheck::IdentifierNamingCheck(StringRef Name,
.Case("UPPER_CASE", CT_UpperCase)
.Case("camelBack", CT_CamelBack)
.Case("CamelCase", CT_CamelCase)
+ .Case("Camel_Snake_Case", CT_CamelSnakeCase)
+ .Case("camel_Snake_Back", CT_CamelSnakeBack)
.Default(CT_AnyCase);
};
@@ -189,6 +191,10 @@ void IdentifierNamingCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
return "UPPER_CASE";
case CT_CamelCase:
return "CamelCase";
+ case CT_CamelSnakeCase:
+ return "Camel_Snake_Case";
+ case CT_CamelSnakeBack:
+ return "camel_Snake_Back";
}
llvm_unreachable("Unknown Case Type");
@@ -230,6 +236,8 @@ static bool matchesStyle(StringRef Name,
llvm::Regex("^[a-z][a-zA-Z0-9]*$"),
llvm::Regex("^[A-Z][A-Z0-9_]*$"),
llvm::Regex("^[A-Z][a-zA-Z0-9]*$"),
+ llvm::Regex("^[A-Z]([a-z0-9]*(_[A-Z])?)*"),
+ llvm::Regex("^[a-z]([a-z0-9]*(_[A-Z])?)*"),
};
bool Matches = true;
@@ -319,6 +327,27 @@ static std::string fixupWithCase(StringRef Name,
}
}
break;
+
+ case IdentifierNamingCheck::CT_CamelSnakeCase:
+ for (auto const &Word : Words) {
+ if (&Word != &Words.front())
+ Fixup += "_";
+ Fixup += Word.substr(0, 1).upper();
+ Fixup += Word.substr(1).lower();
+ }
+ break;
+
+ case IdentifierNamingCheck::CT_CamelSnakeBack:
+ for (auto const &Word : Words) {
+ if (&Word != &Words.front()) {
+ Fixup += "_";
+ Fixup += Word.substr(0, 1).upper();
+ } else {
+ Fixup += Word.substr(0, 1).lower();
+ }
+ Fixup += Word.substr(1).lower();
+ }
+ break;
}
return Fixup;
diff --git a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
index 953803ca8fc..5d25809112c 100644
--- a/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
+++ b/clang-tools-extra/clang-tidy/readability/IdentifierNamingCheck.h
@@ -48,6 +48,8 @@ public:
CT_CamelBack,
CT_UpperCase,
CT_CamelCase,
+ CT_CamelSnakeCase,
+ CT_CamelSnakeBack
};
struct NamingStyle {
diff --git a/clang-tools-extra/test/clang-tidy/readability-identifier-naming.cpp b/clang-tools-extra/test/clang-tidy/readability-identifier-naming.cpp
index 3e7e0b3073f..9c10d61f5f6 100644
--- a/clang-tools-extra/test/clang-tidy/readability-identifier-naming.cpp
+++ b/clang-tools-extra/test/clang-tidy/readability-identifier-naming.cpp
@@ -59,10 +59,10 @@
// RUN: {key: readability-identifier-naming.UsingCase, value: lower_case}, \
// RUN: {key: readability-identifier-naming.ValueTemplateParameterCase, value: camelBack}, \
// RUN: {key: readability-identifier-naming.VariableCase, value: lower_case}, \
-// RUN: {key: readability-identifier-naming.VirtualMethodCase, value: UPPER_CASE}, \
+// RUN: {key: readability-identifier-naming.VirtualMethodCase, value: Camel_Snake_Case}, \
// RUN: {key: readability-identifier-naming.VirtualMethodPrefix, value: 'v_'}, \
// RUN: {key: readability-identifier-naming.MacroDefinitionCase, value: UPPER_CASE}, \
-// RUN: {key: readability-identifier-naming.TypeAliasCase, value: lower_case}, \
+// RUN: {key: readability-identifier-naming.TypeAliasCase, value: camel_Snake_Back}, \
// RUN: {key: readability-identifier-naming.TypeAliasSuffix, value: '_t'}, \
// RUN: {key: readability-identifier-naming.IgnoreFailedSplit, value: 0} \
// RUN: ]}' -- -std=c++11 -fno-delayed-template-parsing \
@@ -261,7 +261,7 @@ class abstract_class {
// CHECK-FIXES: {{^}} virtual ~AAbstractClass() = 0;{{$}}
virtual void VIRTUAL_METHOD();
// CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for virtual method 'VIRTUAL_METHOD'
-// CHECK-FIXES: {{^}} virtual void v_VIRTUAL_METHOD();{{$}}
+// CHECK-FIXES: {{^}} virtual void v_Virtual_Method();{{$}}
void non_Virtual_METHOD() {}
// CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for private method 'non_Virtual_METHOD'
// CHECK-FIXES: {{^}} void __non_Virtual_METHOD() {}{{$}}
@@ -316,12 +316,12 @@ struct_type GlobalTypedefTestFunction(struct_type a_argument1) {
using my_struct_type = THIS___Structure;
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for type alias 'my_struct_type'
-// CHECK-FIXES: {{^}}using my_struct_type_t = this_structure;{{$}}
+// CHECK-FIXES: {{^}}using my_Struct_Type_t = this_structure;{{$}}
template<typename t_t>
using SomeOtherTemplate = my_other_templated_class <:: FOO_NS ::my_class>;
// CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for type alias 'SomeOtherTemplate'
-// CHECK-FIXES: {{^}}using some_other_template_t = CMyOtherTemplatedClass <:: foo_ns ::CMyClass>;{{$}}
+// CHECK-FIXES: {{^}}using some_Other_Template_t = CMyOtherTemplatedClass <:: foo_ns ::CMyClass>;{{$}}
static void static_Function() {
// CHECK-MESSAGES: :[[@LINE-1]]:13: warning: invalid case style for function 'static_Function'
OpenPOWER on IntegriCloud