xref: /llvm-project/clang-tools-extra/test/clang-tidy/checkers/readability/identifier-naming.cpp (revision c79e5acfe8d4bb01d5ae7297dcb900ad8c39c580)
189a1d03eSRichard // Remove UNSUPPORTED for powerpc64le when the problem introduced by
289a1d03eSRichard // r288563 is resolved.
340cc041dSPaul Robinson // UNSUPPORTED: target=powerpc64le{{.*}}
43fac87b6SChuanqi Xu // RUN: %check_clang_tidy -std=c++20 %s readability-identifier-naming %t -- \
5e8a3ddafSNathan James // RUN:   -config='{CheckOptions: { \
6e8a3ddafSNathan James // RUN:     readability-identifier-naming.AbstractClassCase: CamelCase, \
7e8a3ddafSNathan James // RUN:     readability-identifier-naming.AbstractClassPrefix: 'A', \
8e8a3ddafSNathan James // RUN:     readability-identifier-naming.ClassCase: CamelCase, \
9e8a3ddafSNathan James // RUN:     readability-identifier-naming.ClassPrefix: 'C', \
10e8a3ddafSNathan James // RUN:     readability-identifier-naming.ClassConstantCase: CamelCase, \
11e8a3ddafSNathan James // RUN:     readability-identifier-naming.ClassConstantPrefix: 'k', \
12e8a3ddafSNathan James // RUN:     readability-identifier-naming.ClassMemberCase: CamelCase, \
13e8a3ddafSNathan James // RUN:     readability-identifier-naming.ClassMethodCase: camelBack, \
146fdb1bfbSnvartolomei // RUN:     readability-identifier-naming.ConceptCase: CamelCase, \
15e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantCase: UPPER_CASE, \
16e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantSuffix: '_CST', \
17e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstexprFunctionCase: lower_case, \
18e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstexprMethodCase: lower_case, \
19e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstexprVariableCase: lower_case, \
20e8a3ddafSNathan James // RUN:     readability-identifier-naming.EnumCase: CamelCase, \
21e8a3ddafSNathan James // RUN:     readability-identifier-naming.EnumPrefix: 'E', \
22e8a3ddafSNathan James // RUN:     readability-identifier-naming.ScopedEnumConstantCase: CamelCase, \
23e8a3ddafSNathan James // RUN:     readability-identifier-naming.EnumConstantCase: UPPER_CASE, \
24e8a3ddafSNathan James // RUN:     readability-identifier-naming.FunctionCase: camelBack, \
25e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalConstantCase: UPPER_CASE, \
26e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalFunctionCase: CamelCase, \
27e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalVariableCase: lower_case, \
28e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalVariablePrefix: 'g_', \
29e8a3ddafSNathan James // RUN:     readability-identifier-naming.InlineNamespaceCase: lower_case, \
30e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalConstantCase: CamelCase, \
31e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalConstantPrefix: 'k', \
32e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalVariableCase: lower_case, \
33e8a3ddafSNathan James // RUN:     readability-identifier-naming.MemberCase: CamelCase, \
34e8a3ddafSNathan James // RUN:     readability-identifier-naming.MemberPrefix: 'm_', \
35e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantMemberCase: lower_case, \
36e8a3ddafSNathan James // RUN:     readability-identifier-naming.PrivateMemberPrefix: '__', \
37e8a3ddafSNathan James // RUN:     readability-identifier-naming.ProtectedMemberPrefix: '_', \
38e8a3ddafSNathan James // RUN:     readability-identifier-naming.PublicMemberCase: lower_case, \
39e8a3ddafSNathan James // RUN:     readability-identifier-naming.MethodCase: camelBack, \
40e8a3ddafSNathan James // RUN:     readability-identifier-naming.PrivateMethodPrefix: '__', \
41e8a3ddafSNathan James // RUN:     readability-identifier-naming.ProtectedMethodPrefix: '_', \
42e8a3ddafSNathan James // RUN:     readability-identifier-naming.NamespaceCase: lower_case, \
43e8a3ddafSNathan James // RUN:     readability-identifier-naming.ParameterCase: camelBack, \
44e8a3ddafSNathan James // RUN:     readability-identifier-naming.ParameterPrefix: 'a_', \
45e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantParameterCase: camelBack, \
46e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantParameterPrefix: 'i_', \
47e8a3ddafSNathan James // RUN:     readability-identifier-naming.ParameterPackCase: camelBack, \
48e8a3ddafSNathan James // RUN:     readability-identifier-naming.PureFunctionCase: lower_case, \
49e8a3ddafSNathan James // RUN:     readability-identifier-naming.PureMethodCase: camelBack, \
50e8a3ddafSNathan James // RUN:     readability-identifier-naming.StaticConstantCase: UPPER_CASE, \
51e8a3ddafSNathan James // RUN:     readability-identifier-naming.StaticVariableCase: camelBack, \
52e8a3ddafSNathan James // RUN:     readability-identifier-naming.StaticVariablePrefix: 's_', \
53f0e2a5e2SMasterCopy8GB // RUN:     readability-identifier-naming.StructCase: Leading_upper_snake_case, \
54e8a3ddafSNathan James // RUN:     readability-identifier-naming.TemplateParameterCase: UPPER_CASE, \
55e8a3ddafSNathan James // RUN:     readability-identifier-naming.TemplateTemplateParameterCase: CamelCase, \
56e8a3ddafSNathan James // RUN:     readability-identifier-naming.TemplateUsingCase: lower_case, \
57e8a3ddafSNathan James // RUN:     readability-identifier-naming.TemplateUsingPrefix: 'u_', \
58e8a3ddafSNathan James // RUN:     readability-identifier-naming.TypeTemplateParameterCase: camelBack, \
59e8a3ddafSNathan James // RUN:     readability-identifier-naming.TypeTemplateParameterSuffix: '_t', \
60e8a3ddafSNathan James // RUN:     readability-identifier-naming.TypedefCase: lower_case, \
61e8a3ddafSNathan James // RUN:     readability-identifier-naming.TypedefSuffix: '_t', \
62e8a3ddafSNathan James // RUN:     readability-identifier-naming.UnionCase: CamelCase, \
63e8a3ddafSNathan James // RUN:     readability-identifier-naming.UnionPrefix: 'U', \
64e8a3ddafSNathan James // RUN:     readability-identifier-naming.UsingCase: lower_case, \
65e8a3ddafSNathan James // RUN:     readability-identifier-naming.ValueTemplateParameterCase: camelBack, \
66e8a3ddafSNathan James // RUN:     readability-identifier-naming.VariableCase: lower_case, \
67e8a3ddafSNathan James // RUN:     readability-identifier-naming.VirtualMethodCase: Camel_Snake_Case, \
68e8a3ddafSNathan James // RUN:     readability-identifier-naming.VirtualMethodPrefix: 'v_', \
69e8a3ddafSNathan James // RUN:     readability-identifier-naming.MacroDefinitionCase: UPPER_CASE, \
70e8a3ddafSNathan James // RUN:     readability-identifier-naming.TypeAliasCase: camel_Snake_Back, \
71e8a3ddafSNathan James // RUN:     readability-identifier-naming.TypeAliasSuffix: '_t', \
72e8a3ddafSNathan James // RUN:     readability-identifier-naming.IgnoreFailedSplit: false, \
73e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalPointerCase: CamelCase, \
74e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalPointerSuffix: '_Ptr', \
75e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalConstantPointerCase: UPPER_CASE, \
76e8a3ddafSNathan James // RUN:     readability-identifier-naming.GlobalConstantPointerSuffix: '_Ptr', \
77e8a3ddafSNathan James // RUN:     readability-identifier-naming.PointerParameterCase: lower_case, \
78e8a3ddafSNathan James // RUN:     readability-identifier-naming.PointerParameterPrefix: 'p_', \
79e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantPointerParameterCase: CamelCase, \
80e8a3ddafSNathan James // RUN:     readability-identifier-naming.ConstantPointerParameterPrefix: 'cp_', \
81e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalPointerCase: CamelCase, \
82e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalPointerPrefix: 'l_', \
83e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalConstantPointerCase: CamelCase, \
84e8a3ddafSNathan James // RUN:     readability-identifier-naming.LocalConstantPointerPrefix: 'lc_', \
85e8a3ddafSNathan James // RUN:   }}' -- -fno-delayed-template-parsing -Dbad_macro \
8689a1d03eSRichard // RUN:   -I%S/Inputs/identifier-naming \
8789a1d03eSRichard // RUN:   -isystem %S/Inputs/identifier-naming/system
8889a1d03eSRichard 
8989a1d03eSRichard // clang-format off
9089a1d03eSRichard 
9189a1d03eSRichard #include <system-header.h>
9289a1d03eSRichard #include <coroutines.h>
9389a1d03eSRichard #include "user-header.h"
9489a1d03eSRichard // NO warnings or fixes expected from declarations within header files without
9589a1d03eSRichard // the -header-filter= option
9689a1d03eSRichard 
9789a1d03eSRichard namespace FOO_NS {
9889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: invalid case style for namespace 'FOO_NS' [readability-identifier-naming]
9989a1d03eSRichard // CHECK-FIXES: {{^}}namespace foo_ns {{{$}}
10089a1d03eSRichard inline namespace InlineNamespace {
10189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for inline namespace 'InlineNamespace'
10289a1d03eSRichard // CHECK-FIXES: {{^}}inline namespace inline_namespace {{{$}}
10389a1d03eSRichard 
104*c79e5acfSKeith Smiley namespace FOO_ALIAS = FOO_NS;
105*c79e5acfSKeith Smiley // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: invalid case style for namespace 'FOO_ALIAS' [readability-identifier-naming]
106*c79e5acfSKeith Smiley // CHECK-FIXES: {{^}}namespace foo_alias = FOO_NS;{{$}}
107*c79e5acfSKeith Smiley 
10889a1d03eSRichard SYSTEM_NS::structure g_s1;
10989a1d03eSRichard // NO warnings or fixes expected as SYSTEM_NS and structure are declared in a header file
11089a1d03eSRichard 
11189a1d03eSRichard USER_NS::object g_s2;
11289a1d03eSRichard // NO warnings or fixes expected as USER_NS and object are declared in a header file
11389a1d03eSRichard 
11489a1d03eSRichard SYSTEM_MACRO(var1);
1158d206f51SEdwin Vane // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: invalid case style for global variable 'var1' [readability-identifier-naming]
1168d206f51SEdwin Vane // CHECK-FIXES: {{^}}SYSTEM_MACRO(g_var1);
11789a1d03eSRichard 
11889a1d03eSRichard USER_MACRO(var2);
1198d206f51SEdwin Vane // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: invalid case style for global variable 'var2' [readability-identifier-naming]
1208d206f51SEdwin Vane // CHECK-FIXES: {{^}}USER_MACRO(g_var2);
12189a1d03eSRichard 
12289a1d03eSRichard #define BLA int FOO_bar
12389a1d03eSRichard BLA;
12489a1d03eSRichard // NO warnings or fixes expected as FOO_bar is from macro expansion
12589a1d03eSRichard 
12689a1d03eSRichard int global0;
12789a1d03eSRichard #define USE_NUMBERED_GLOBAL(number) auto use_global##number = global##number
12889a1d03eSRichard USE_NUMBERED_GLOBAL(0);
12989a1d03eSRichard // NO warnings or fixes expected as global0 is pieced together in a macro
13089a1d03eSRichard // expansion.
13189a1d03eSRichard 
13289a1d03eSRichard int global1;
13389a1d03eSRichard #define USE_NUMBERED_BAL(prefix, number) \
13489a1d03eSRichard   auto use_##prefix##bal##number = prefix##bal##number
13589a1d03eSRichard USE_NUMBERED_BAL(glo, 1);
13689a1d03eSRichard // NO warnings or fixes expected as global1 is pieced together in a macro
13789a1d03eSRichard // expansion.
13889a1d03eSRichard 
13989a1d03eSRichard int global2;
14089a1d03eSRichard #define USE_RECONSTRUCTED(glo, bal) auto use_##glo##bal = glo##bal
14189a1d03eSRichard USE_RECONSTRUCTED(glo, bal2);
14289a1d03eSRichard // NO warnings or fixes expected as global2 is pieced together in a macro
14389a1d03eSRichard // expansion.
14489a1d03eSRichard 
14589a1d03eSRichard int global;
14689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for global variable 'global'
14789a1d03eSRichard // CHECK-FIXES: {{^}}int g_global;{{$}}
14889a1d03eSRichard #define USE_IN_MACRO(m) auto use_##m = m
14989a1d03eSRichard USE_IN_MACRO(global);
15089a1d03eSRichard 
15189a1d03eSRichard int global3;
15289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for global variable 'global3'
15389a1d03eSRichard // CHECK-FIXES: {{^}}int g_global3;{{$}}
15489a1d03eSRichard #define ADD_TO_SELF(m) (m) + (m)
15589a1d03eSRichard int g_twice_global3 = ADD_TO_SELF(global3);
15689a1d03eSRichard // CHECK-FIXES: {{^}}int g_twice_global3 = ADD_TO_SELF(g_global3);{{$}}
15789a1d03eSRichard 
15889a1d03eSRichard int g_Global4;
15989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for global variable 'g_Global4'
16089a1d03eSRichard // CHECK-FIXES: {{^}}int g_global4;{{$}}
16189a1d03eSRichard 
16289a1d03eSRichard enum my_enumeration {
16389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: invalid case style for enum 'my_enumeration'
16489a1d03eSRichard // CHECK-FIXES: {{^}}enum EMyEnumeration {{{$}}
16589a1d03eSRichard     MyConstant = 1,
16689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for enum constant 'MyConstant'
16789a1d03eSRichard // CHECK-FIXES: {{^}}    MY_CONSTANT = 1,{{$}}
16889a1d03eSRichard     your_CONST = 1,
16989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for enum constant 'your_CONST'
17089a1d03eSRichard // CHECK-FIXES: {{^}}    YOUR_CONST = 1,{{$}}
17189a1d03eSRichard     THIS_ConstValue = 1,
17289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for enum constant 'THIS_ConstValue'
17389a1d03eSRichard // CHECK-FIXES: {{^}}    THIS_CONST_VALUE = 1,{{$}}
17489a1d03eSRichard };
17589a1d03eSRichard 
17689a1d03eSRichard enum class EMyEnumeration {
17789a1d03eSRichard     myConstant = 1,
17889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for scoped enum constant 'myConstant'
17989a1d03eSRichard // CHECK-FIXES: {{^}}    MyConstant = 1,{{$}}
18089a1d03eSRichard     your_CONST = 1,
18189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for scoped enum constant 'your_CONST'
18289a1d03eSRichard // CHECK-FIXES: {{^}}    YourConst = 1,{{$}}
18389a1d03eSRichard     THIS_ConstValue = 1,
18489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for scoped enum constant 'THIS_ConstValue'
18589a1d03eSRichard // CHECK-FIXES: {{^}}    ThisConstValue = 1,{{$}}
18689a1d03eSRichard };
18789a1d03eSRichard 
18889a1d03eSRichard constexpr int ConstExpr_variable = MyConstant;
18989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: invalid case style for constexpr variable 'ConstExpr_variable'
19089a1d03eSRichard // CHECK-FIXES: {{^}}constexpr int const_expr_variable = MY_CONSTANT;{{$}}
19189a1d03eSRichard 
19289a1d03eSRichard class my_class {
19389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_class'
19489a1d03eSRichard // CHECK-FIXES: {{^}}class CMyClass {{{$}}
19589a1d03eSRichard public:
19689a1d03eSRichard     my_class();
19789a1d03eSRichard // CHECK-FIXES: {{^}}    CMyClass();{{$}}
19889a1d03eSRichard 
19989a1d03eSRichard     my_class(void*) : my_class() {}
20089a1d03eSRichard // CHECK-FIXES: {{^}}    CMyClass(void*) : CMyClass() {}{{$}}
20189a1d03eSRichard 
20289a1d03eSRichard     ~
20389a1d03eSRichard       my_class();
20489a1d03eSRichard // (space in destructor token test, we could check trigraph but they will be deprecated)
20589a1d03eSRichard // CHECK-FIXES: {{^}}    ~{{$}}
20689a1d03eSRichard // CHECK-FIXES: {{^}}      CMyClass();{{$}}
20789a1d03eSRichard 
20889a1d03eSRichard private:
20989a1d03eSRichard   const int MEMBER_one_1 = ConstExpr_variable;
21089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: invalid case style for constant member 'MEMBER_one_1'
21189a1d03eSRichard // CHECK-FIXES: {{^}}  const int member_one_1 = const_expr_variable;{{$}}
21289a1d03eSRichard   int member2 = 2;
21389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for private member 'member2'
21489a1d03eSRichard // CHECK-FIXES: {{^}}  int __member2 = 2;{{$}}
21589a1d03eSRichard   int _memberWithExtraUnderscores_ = 42;
21689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for private member '_memberWithExtraUnderscores_'
21789a1d03eSRichard // CHECK-FIXES: {{^}}  int __memberWithExtraUnderscores = 42;{{$}}
21889a1d03eSRichard 
21989a1d03eSRichard private:
22089a1d03eSRichard     int private_member = 3;
22189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for private member 'private_member'
22289a1d03eSRichard // CHECK-FIXES: {{^}}    int __private_member = 3;{{$}}
22389a1d03eSRichard 
22489a1d03eSRichard protected:
22589a1d03eSRichard     int ProtMember;
22689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for protected member 'ProtMember'
22789a1d03eSRichard // CHECK-FIXES: {{^}}    int _ProtMember;{{$}}
22889a1d03eSRichard 
22989a1d03eSRichard public:
23089a1d03eSRichard     int PubMem;
23189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for public member 'PubMem'
23289a1d03eSRichard // CHECK-FIXES: {{^}}    int pub_mem;{{$}}
23389a1d03eSRichard 
23489a1d03eSRichard     static const int classConstant;
23589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: invalid case style for class constant 'classConstant'
23689a1d03eSRichard // CHECK-FIXES: {{^}}    static const int kClassConstant;{{$}}
23789a1d03eSRichard     static int ClassMember_2;
23889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for class member 'ClassMember_2'
23989a1d03eSRichard // CHECK-FIXES: {{^}}    static int ClassMember2;{{$}}
24089a1d03eSRichard };
24189a1d03eSRichard class my_class;
24289a1d03eSRichard // No warning needed here as this is tied to the previous declaration.
24389a1d03eSRichard // Just make sure the fix is applied.
24489a1d03eSRichard // CHECK-FIXES: {{^}}class CMyClass;{{$}}
24589a1d03eSRichard 
24689a1d03eSRichard class my_forward_declared_class; // No warning should be triggered.
24789a1d03eSRichard 
24889a1d03eSRichard const int my_class::classConstant = 4;
24989a1d03eSRichard // CHECK-FIXES: {{^}}const int CMyClass::kClassConstant = 4;{{$}}
25089a1d03eSRichard 
25189a1d03eSRichard int my_class::ClassMember_2 = 5;
25289a1d03eSRichard // CHECK-FIXES: {{^}}int CMyClass::ClassMember2 = 5;{{$}}
25389a1d03eSRichard 
25489a1d03eSRichard class my_derived_class : public virtual my_class {};
25589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_derived_class'
25689a1d03eSRichard // CHECK-FIXES: {{^}}class CMyDerivedClass : public virtual CMyClass {};{{$}}
25789a1d03eSRichard 
25889a1d03eSRichard class CMyWellNamedClass {};
25989a1d03eSRichard // No warning expected as this class is well named.
26089a1d03eSRichard 
26189a1d03eSRichard template<typename t_t>
2626fdb1bfbSnvartolomei concept MyConcept = requires (t_t a_t) { {a_t++}; };
2636fdb1bfbSnvartolomei // No warning expected as this concept is well named.
2646fdb1bfbSnvartolomei 
2656fdb1bfbSnvartolomei template<typename t_t>
2666fdb1bfbSnvartolomei concept my_concept_2 = requires (t_t a_t) { {a_t++}; };
2676fdb1bfbSnvartolomei // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for concept 'my_concept_2'
2686fdb1bfbSnvartolomei // CHECK-FIXES: {{^}}concept MyConcept2 = requires (t_t a_t) { {a_t++}; };{{$}}
2696fdb1bfbSnvartolomei 
2706fdb1bfbSnvartolomei template <typename t_t>
27189a1d03eSRichard class CMyWellNamedClass2 : public my_class {
27289a1d03eSRichard   // CHECK-FIXES: {{^}}class CMyWellNamedClass2 : public CMyClass {{{$}}
27389a1d03eSRichard   t_t my_Bad_Member;
27489a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for private member 'my_Bad_Member'
27589a1d03eSRichard   // CHECK-FIXES: {{^}}  t_t __my_Bad_Member;{{$}}
27689a1d03eSRichard   int my_Other_Bad_Member = 42;
27789a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for private member 'my_Other_Bad_Member'
27889a1d03eSRichard   // CHECK-FIXES: {{^}}  int __my_Other_Bad_Member = 42;{{$}}
27989a1d03eSRichard public:
28089a1d03eSRichard   CMyWellNamedClass2() = default;
28189a1d03eSRichard   CMyWellNamedClass2(CMyWellNamedClass2 const&) = default;
28289a1d03eSRichard   CMyWellNamedClass2(CMyWellNamedClass2 &&) = default;
28389a1d03eSRichard   CMyWellNamedClass2(t_t a_v, void *p_p) : my_class(p_p), my_Bad_Member(a_v) {}
28489a1d03eSRichard   // CHECK-FIXES: {{^}}  CMyWellNamedClass2(t_t a_v, void *p_p) : CMyClass(p_p), __my_Bad_Member(a_v) {}{{$}}
28589a1d03eSRichard 
28689a1d03eSRichard   CMyWellNamedClass2(t_t a_v) : my_class(), my_Bad_Member(a_v), my_Other_Bad_Member(11) {}
28789a1d03eSRichard   // CHECK-FIXES: {{^}}  CMyWellNamedClass2(t_t a_v) : CMyClass(), __my_Bad_Member(a_v), __my_Other_Bad_Member(11) {}{{$}}
28889a1d03eSRichard };
28989a1d03eSRichard void InstantiateClassMethods() {
29089a1d03eSRichard   // Ensure we trigger the instantiation of each constructor
29189a1d03eSRichard   CMyWellNamedClass2<int> x;
29289a1d03eSRichard   CMyWellNamedClass2<int> x2 = x;
29389a1d03eSRichard   CMyWellNamedClass2<int> x3 = static_cast<CMyWellNamedClass2<int>&&>(x2);
29489a1d03eSRichard   CMyWellNamedClass2<int> x4(42);
29589a1d03eSRichard   CMyWellNamedClass2<int> x5(42, nullptr);
29689a1d03eSRichard }
29789a1d03eSRichard 
29889a1d03eSRichard class AOverridden {
29989a1d03eSRichard public:
30089a1d03eSRichard   virtual ~AOverridden() = default;
30189a1d03eSRichard   virtual void BadBaseMethod() = 0;
30289a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethod'
30389a1d03eSRichard   // CHECK-FIXES: {{^}}  virtual void v_Bad_Base_Method() = 0;
30489a1d03eSRichard 
30589a1d03eSRichard   virtual void BadBaseMethodNoAttr() = 0;
30689a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethodNoAttr'
30789a1d03eSRichard   // CHECK-FIXES: {{^}}  virtual void v_Bad_Base_Method_No_Attr() = 0;
30889a1d03eSRichard };
30989a1d03eSRichard 
31089a1d03eSRichard class COverriding : public AOverridden {
31189a1d03eSRichard public:
31289a1d03eSRichard   // Overriding a badly-named base isn't a new violation.
31389a1d03eSRichard   void BadBaseMethod() override {}
31489a1d03eSRichard   // CHECK-FIXES: {{^}}  void v_Bad_Base_Method() override {}
31589a1d03eSRichard 
31689a1d03eSRichard   void BadBaseMethodNoAttr() /* override */ {}
31789a1d03eSRichard   // CHECK-FIXES: {{^}}  void v_Bad_Base_Method_No_Attr() /* override */ {}
31889a1d03eSRichard 
31989a1d03eSRichard   void foo() {
32089a1d03eSRichard     BadBaseMethod();
32189a1d03eSRichard     // CHECK-FIXES: {{^}}    v_Bad_Base_Method();
32289a1d03eSRichard     this->BadBaseMethod();
32389a1d03eSRichard     // CHECK-FIXES: {{^}}    this->v_Bad_Base_Method();
32489a1d03eSRichard     AOverridden::BadBaseMethod();
32589a1d03eSRichard     // CHECK-FIXES: {{^}}    AOverridden::v_Bad_Base_Method();
32689a1d03eSRichard     COverriding::BadBaseMethod();
32789a1d03eSRichard     // CHECK-FIXES: {{^}}    COverriding::v_Bad_Base_Method();
32889a1d03eSRichard 
32989a1d03eSRichard     BadBaseMethodNoAttr();
33089a1d03eSRichard     // CHECK-FIXES: {{^}}    v_Bad_Base_Method_No_Attr();
33189a1d03eSRichard     this->BadBaseMethodNoAttr();
33289a1d03eSRichard     // CHECK-FIXES: {{^}}    this->v_Bad_Base_Method_No_Attr();
33389a1d03eSRichard     AOverridden::BadBaseMethodNoAttr();
33489a1d03eSRichard     // CHECK-FIXES: {{^}}    AOverridden::v_Bad_Base_Method_No_Attr();
33589a1d03eSRichard     COverriding::BadBaseMethodNoAttr();
33689a1d03eSRichard     // CHECK-FIXES: {{^}}    COverriding::v_Bad_Base_Method_No_Attr();
33789a1d03eSRichard   }
33889a1d03eSRichard };
33989a1d03eSRichard 
34089a1d03eSRichard // Same test as above, now with a dependent base class.
34189a1d03eSRichard template<typename some_t>
34289a1d03eSRichard class ATOverridden {
34389a1d03eSRichard public:
34489a1d03eSRichard   virtual void BadBaseMethod() = 0;
34589a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethod'
34689a1d03eSRichard   // CHECK-FIXES: {{^}}  virtual void v_Bad_Base_Method() = 0;
34789a1d03eSRichard 
34889a1d03eSRichard   virtual void BadBaseMethodNoAttr() = 0;
34989a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethodNoAttr'
35089a1d03eSRichard   // CHECK-FIXES: {{^}}  virtual void v_Bad_Base_Method_No_Attr() = 0;
35189a1d03eSRichard };
35289a1d03eSRichard 
35389a1d03eSRichard template<typename some_t>
35489a1d03eSRichard class CTOverriding : public ATOverridden<some_t> {
35589a1d03eSRichard   // Overriding a badly-named base isn't a new violation.
35689a1d03eSRichard   // FIXME: The fixes from the base class should be propagated to the derived class here
35789a1d03eSRichard   //        (note that there could be specializations of the template base class, though)
35889a1d03eSRichard   void BadBaseMethod() override {}
35989a1d03eSRichard 
36089a1d03eSRichard   // Without the "override" attribute, and due to the dependent base class, it is not
36189a1d03eSRichard   // known whether this method overrides anything, so we get the warning here.
36289a1d03eSRichard   virtual void BadBaseMethodNoAttr() {};
36389a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethodNoAttr'
36489a1d03eSRichard   // CHECK-FIXES: {{^}}  virtual void v_Bad_Base_Method_No_Attr() {};
36589a1d03eSRichard };
36689a1d03eSRichard 
36789a1d03eSRichard template<typename some_t>
36889a1d03eSRichard void VirtualCall(AOverridden &a_vItem, ATOverridden<some_t> &a_vTitem) {
36989a1d03eSRichard   a_vItem.BadBaseMethod();
37089a1d03eSRichard   // CHECK-FIXES: {{^}}  a_vItem.v_Bad_Base_Method();
37189a1d03eSRichard 
37289a1d03eSRichard   // FIXME: The fixes from ATOverridden should be propagated to the following call
37389a1d03eSRichard   a_vTitem.BadBaseMethod();
37489a1d03eSRichard }
37589a1d03eSRichard 
37689a1d03eSRichard // Same test as above, now with a dependent base class that is instantiated below.
37789a1d03eSRichard template<typename some_t>
37889a1d03eSRichard class ATIOverridden {
37989a1d03eSRichard public:
38089a1d03eSRichard   virtual void BadBaseMethod() = 0;
38189a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for virtual method 'BadBaseMethod'
38289a1d03eSRichard   // CHECK-FIXES: {{^}}  virtual void v_Bad_Base_Method() = 0;
38389a1d03eSRichard };
38489a1d03eSRichard 
38589a1d03eSRichard template<typename some_t>
38689a1d03eSRichard class CTIOverriding : public ATIOverridden<some_t> {
38789a1d03eSRichard public:
38889a1d03eSRichard   // Overriding a badly-named base isn't a new violation.
38989a1d03eSRichard   void BadBaseMethod() override {}
39089a1d03eSRichard   // CHECK-FIXES: {{^}}  void v_Bad_Base_Method() override {}
39189a1d03eSRichard };
39289a1d03eSRichard 
39389a1d03eSRichard template class CTIOverriding<int>;
39489a1d03eSRichard 
39589a1d03eSRichard void VirtualCallI(ATIOverridden<int>& a_vItem, CTIOverriding<int>& a_vCitem) {
39689a1d03eSRichard   a_vItem.BadBaseMethod();
39789a1d03eSRichard   // CHECK-FIXES: {{^}}  a_vItem.v_Bad_Base_Method();
39889a1d03eSRichard 
39989a1d03eSRichard   a_vCitem.BadBaseMethod();
40089a1d03eSRichard   // CHECK-FIXES: {{^}}  a_vCitem.v_Bad_Base_Method();
40189a1d03eSRichard }
40289a1d03eSRichard 
40389a1d03eSRichard template <typename derived_t>
40489a1d03eSRichard class CRTPBase {
40589a1d03eSRichard public:
40689a1d03eSRichard   void BadBaseMethod(int) {}
40789a1d03eSRichard   // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for method 'BadBaseMethod'
40889a1d03eSRichard };
40989a1d03eSRichard 
41089a1d03eSRichard class CRTPDerived : CRTPBase<CRTPDerived> {
41189a1d03eSRichard public:
41289a1d03eSRichard   // Hiding a badly-named base isn't a new violation.
41389a1d03eSRichard   double BadBaseMethod(double) { return 0; }
41489a1d03eSRichard };
41589a1d03eSRichard 
41689a1d03eSRichard template<typename T>
41789a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: invalid case style for type template parameter 'T'
41889a1d03eSRichard // CHECK-FIXES: {{^}}template<typename t_t>{{$}}
41989a1d03eSRichard class my_templated_class : CMyWellNamedClass {};
42089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_templated_class'
42189a1d03eSRichard // CHECK-FIXES: {{^}}class CMyTemplatedClass : CMyWellNamedClass {};{{$}}
42289a1d03eSRichard 
42389a1d03eSRichard template<typename T>
42489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: invalid case style for type template parameter 'T'
42589a1d03eSRichard // CHECK-FIXES: {{^}}template<typename t_t>{{$}}
42689a1d03eSRichard class my_other_templated_class : my_templated_class<  my_class>, private my_derived_class {};
42789a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'my_other_templated_class'
42889a1d03eSRichard // CHECK-FIXES: {{^}}class CMyOtherTemplatedClass : CMyTemplatedClass<  CMyClass>, private CMyDerivedClass {};{{$}}
42989a1d03eSRichard 
43089a1d03eSRichard template<typename t_t>
43189a1d03eSRichard using mysuper_tpl_t = my_other_templated_class  <:: FOO_NS  ::my_class>;
432f9974f7fSJ.C. Moyer // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for type alias 'mysuper_tpl_t'
433f9974f7fSJ.C. Moyer // CHECK-FIXES: {{^}}using mysuper_Tpl_t = CMyOtherTemplatedClass  <:: foo_ns  ::CMyClass>;{{$}}
43489a1d03eSRichard 
43589a1d03eSRichard const int global_Constant = 6;
43689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:11: warning: invalid case style for global constant 'global_Constant'
43789a1d03eSRichard // CHECK-FIXES: {{^}}const int GLOBAL_CONSTANT = 6;{{$}}
43889a1d03eSRichard int Global_variable = 7;
43989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for global variable 'Global_variable'
44089a1d03eSRichard // CHECK-FIXES: {{^}}int g_global_variable = 7;{{$}}
44189a1d03eSRichard 
44289a1d03eSRichard void global_function(int PARAMETER_1, int const CONST_parameter) {
44389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: invalid case style for global function 'global_function'
44489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-2]]:26: warning: invalid case style for parameter 'PARAMETER_1'
44589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-3]]:49: warning: invalid case style for constant parameter 'CONST_parameter'
44689a1d03eSRichard // CHECK-FIXES: {{^}}void GlobalFunction(int a_parameter1, int const i_constParameter) {{{$}}
44789a1d03eSRichard     static const int THIS_static_ConsTant = 4;
44889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: invalid case style for static constant 'THIS_static_ConsTant'
44989a1d03eSRichard // CHECK-FIXES: {{^}}    static const int THIS_STATIC_CONS_TANT = 4;{{$}}
45089a1d03eSRichard     static int THIS_static_variable;
45189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for static variable 'THIS_static_variable'
45289a1d03eSRichard // CHECK-FIXES: {{^}}    static int s_thisStaticVariable;{{$}}
45389a1d03eSRichard     int const local_Constant = 3;
45489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: invalid case style for local constant 'local_Constant'
45589a1d03eSRichard // CHECK-FIXES: {{^}}    int const kLocalConstant = 3;{{$}}
45689a1d03eSRichard     int LOCAL_VARIABLE;
45789a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for local variable 'LOCAL_VARIABLE'
45889a1d03eSRichard // CHECK-FIXES: {{^}}    int local_variable;{{$}}
45989a1d03eSRichard 
46089a1d03eSRichard     int LOCAL_Array__[] = {0, 1, 2};
46189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for local variable 'LOCAL_Array__'
46289a1d03eSRichard // CHECK-FIXES: {{^}}    int local_array[] = {0, 1, 2};{{$}}
46389a1d03eSRichard 
46489a1d03eSRichard     for (auto _ : LOCAL_Array__) {
46589a1d03eSRichard     }
46689a1d03eSRichard }
46789a1d03eSRichard 
46889a1d03eSRichard template<typename ... TYPE_parameters>
46989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:23: warning: invalid case style for type template parameter 'TYPE_parameters'
47089a1d03eSRichard // CHECK-FIXES: {{^}}template<typename ... typeParameters_t>{{$}}
47189a1d03eSRichard void Global_Fun(TYPE_parameters... PARAMETER_PACK) {
47289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: invalid case style for global function 'Global_Fun'
47389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-2]]:36: warning: invalid case style for parameter pack 'PARAMETER_PACK'
47489a1d03eSRichard // CHECK-FIXES: {{^}}void GlobalFun(typeParameters_t... parameterPack) {{{$}}
47589a1d03eSRichard     global_function(1, 2);
47689a1d03eSRichard // CHECK-FIXES: {{^}}    GlobalFunction(1, 2);{{$}}
47789a1d03eSRichard     FOO_bar = Global_variable;
47889a1d03eSRichard // CHECK-FIXES: {{^}}    FOO_bar = g_global_variable;{{$}}
47989a1d03eSRichard // NO fix expected for FOO_bar declared in macro expansion
48089a1d03eSRichard }
48189a1d03eSRichard 
48289a1d03eSRichard template<template<typename> class TPL_parameter, int COUNT_params, typename ... TYPE_parameters>
48389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:35: warning: invalid case style for template template parameter 'TPL_parameter'
48489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-2]]:54: warning: invalid case style for value template parameter 'COUNT_params'
48589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-3]]:81: warning: invalid case style for type template parameter 'TYPE_parameters'
48689a1d03eSRichard // CHECK-FIXES: {{^}}template<template<typename> class TplParameter, int countParams, typename ... typeParameters_t>{{$}}
48789a1d03eSRichard class test_CLASS {
48889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for class 'test_CLASS'
48989a1d03eSRichard // CHECK-FIXES: {{^}}class CTestClass {{{$}}
49089a1d03eSRichard };
49189a1d03eSRichard 
49289a1d03eSRichard class abstract_class {
49389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for abstract class 'abstract_class'
49489a1d03eSRichard // CHECK-FIXES: {{^}}class AAbstractClass {{{$}}
49589a1d03eSRichard     virtual ~abstract_class() = 0;
49689a1d03eSRichard // CHECK-FIXES: {{^}}    virtual ~AAbstractClass() = 0;{{$}}
49789a1d03eSRichard     virtual void VIRTUAL_METHOD();
49889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for virtual method 'VIRTUAL_METHOD'
49989a1d03eSRichard // CHECK-FIXES: {{^}}    virtual void v_Virtual_Method();{{$}}
50089a1d03eSRichard     void non_Virtual_METHOD() {}
50189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for private method 'non_Virtual_METHOD'
50289a1d03eSRichard // CHECK-FIXES: {{^}}    void __non_Virtual_METHOD() {}{{$}}
50389a1d03eSRichard 
50489a1d03eSRichard public:
50589a1d03eSRichard     static void CLASS_METHOD() {}
50689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for class method 'CLASS_METHOD'
50789a1d03eSRichard // CHECK-FIXES: {{^}}    static void classMethod() {}{{$}}
50889a1d03eSRichard 
50989a1d03eSRichard     constexpr int CST_expr_Method() { return 2; }
51089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: invalid case style for constexpr method 'CST_expr_Method'
51189a1d03eSRichard // CHECK-FIXES: {{^}}    constexpr int cst_expr_method() { return 2; }{{$}}
51289a1d03eSRichard 
51389a1d03eSRichard private:
51489a1d03eSRichard     void PRIVate_Method();
51589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for private method 'PRIVate_Method'
51689a1d03eSRichard // CHECK-FIXES: {{^}}    void __PRIVate_Method();{{$}}
51789a1d03eSRichard protected:
51889a1d03eSRichard     void protected_Method();
51989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for protected method 'protected_Method'
52089a1d03eSRichard // CHECK-FIXES: {{^}}    void _protected_Method();{{$}}
52189a1d03eSRichard public:
52289a1d03eSRichard     void public_Method();
52389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for method 'public_Method'
52489a1d03eSRichard // CHECK-FIXES: {{^}}    void publicMethod();{{$}}
52589a1d03eSRichard };
52689a1d03eSRichard 
52789a1d03eSRichard constexpr int CE_function() { return 3; }
52889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: invalid case style for constexpr function 'CE_function'
52989a1d03eSRichard // CHECK-FIXES: {{^}}constexpr int ce_function() { return 3; }{{$}}
53089a1d03eSRichard 
53189a1d03eSRichard struct THIS___Structure {
53289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'THIS___Structure'
533f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}struct This_structure {{{$}}
53489a1d03eSRichard     THIS___Structure();
535f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}    This_structure();{{$}}
53689a1d03eSRichard 
53789a1d03eSRichard   union __MyUnion_is_wonderful__ {};
53889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for union '__MyUnion_is_wonderful__'
53989a1d03eSRichard // CHECK-FIXES: {{^}}  union UMyUnionIsWonderful {};{{$}}
54089a1d03eSRichard };
54189a1d03eSRichard 
54289a1d03eSRichard typedef THIS___Structure struct_type;
54389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: invalid case style for typedef 'struct_type'
544f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}typedef This_structure struct_type_t;{{$}}
54589a1d03eSRichard 
54689a1d03eSRichard struct_type GlobalTypedefTestFunction(struct_type a_argument1) {
54789a1d03eSRichard // CHECK-FIXES: {{^}}struct_type_t GlobalTypedefTestFunction(struct_type_t a_argument1) {
54889a1d03eSRichard     struct_type typedef_test_1;
54989a1d03eSRichard // CHECK-FIXES: {{^}}    struct_type_t typedef_test_1;
55089a1d03eSRichard }
55189a1d03eSRichard 
55289a1d03eSRichard using my_struct_type = THIS___Structure;
55389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for type alias 'my_struct_type'
554f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}using my_Struct_Type_t = This_structure;{{$}}
55589a1d03eSRichard 
55689a1d03eSRichard template<typename t_t>
55789a1d03eSRichard using SomeOtherTemplate = my_other_templated_class  <:: FOO_NS  ::my_class>;
55889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for type alias 'SomeOtherTemplate'
55989a1d03eSRichard // CHECK-FIXES: {{^}}using some_Other_Template_t = CMyOtherTemplatedClass  <:: foo_ns  ::CMyClass>;{{$}}
56089a1d03eSRichard 
56189a1d03eSRichard static void static_Function() {
56289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: invalid case style for function 'static_Function'
56389a1d03eSRichard // CHECK-FIXES: {{^}}static void staticFunction() {{{$}}
56489a1d03eSRichard 
56589a1d03eSRichard   ::FOO_NS::InlineNamespace::abstract_class::CLASS_METHOD();
56689a1d03eSRichard // CHECK-FIXES: {{^}}  ::foo_ns::inline_namespace::AAbstractClass::classMethod();{{$}}
56789a1d03eSRichard   ::FOO_NS::InlineNamespace::static_Function();
56889a1d03eSRichard // CHECK-FIXES: {{^}}  ::foo_ns::inline_namespace::staticFunction();{{$}}
56989a1d03eSRichard 
57089a1d03eSRichard   using ::FOO_NS::InlineNamespace::CE_function;
57189a1d03eSRichard // CHECK-FIXES: {{^}}  using ::foo_ns::inline_namespace::ce_function;{{$}}
57289a1d03eSRichard 
57389a1d03eSRichard   unsigned MY_LOCAL_array[] = {1,2,3};
57489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: invalid case style for local variable 'MY_LOCAL_array'
57589a1d03eSRichard // CHECK-FIXES: {{^}}  unsigned my_local_array[] = {1,2,3};{{$}}
57689a1d03eSRichard 
57789a1d03eSRichard   unsigned const MyConstLocal_array[] = {1,2,3};
57889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: invalid case style for local constant 'MyConstLocal_array'
57989a1d03eSRichard // CHECK-FIXES: {{^}}  unsigned const kMyConstLocalArray[] = {1,2,3};{{$}}
58089a1d03eSRichard 
58189a1d03eSRichard   static unsigned MY_STATIC_array[] = {1,2,3};
58289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:19: warning: invalid case style for static variable 'MY_STATIC_array'
58389a1d03eSRichard // CHECK-FIXES: {{^}}  static unsigned s_myStaticArray[] = {1,2,3};{{$}}
58489a1d03eSRichard 
58589a1d03eSRichard   static unsigned const MyConstStatic_array[] = {1,2,3};
58689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:25: warning: invalid case style for static constant 'MyConstStatic_array'
58789a1d03eSRichard // CHECK-FIXES: {{^}}  static unsigned const MY_CONST_STATIC_ARRAY[] = {1,2,3};{{$}}
58889a1d03eSRichard 
58989a1d03eSRichard   char MY_LOCAL_string[] = "123";
59089a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for local variable 'MY_LOCAL_string'
59189a1d03eSRichard // CHECK-FIXES: {{^}}  char my_local_string[] = "123";{{$}}
59289a1d03eSRichard 
59389a1d03eSRichard   char const MyConstLocal_string[] = "123";
59489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: invalid case style for local constant 'MyConstLocal_string'
59589a1d03eSRichard // CHECK-FIXES: {{^}}  char const kMyConstLocalString[] = "123";{{$}}
59689a1d03eSRichard 
59789a1d03eSRichard   static char MY_STATIC_string[] = "123";
59889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:15: warning: invalid case style for static variable 'MY_STATIC_string'
59989a1d03eSRichard // CHECK-FIXES: {{^}}  static char s_myStaticString[] = "123";{{$}}
60089a1d03eSRichard 
60189a1d03eSRichard   static char const MyConstStatic_string[] = "123";
60289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for static constant 'MyConstStatic_string'
60389a1d03eSRichard // CHECK-FIXES: {{^}}  static char const MY_CONST_STATIC_STRING[] = "123";{{$}}
60489a1d03eSRichard }
60589a1d03eSRichard 
60689a1d03eSRichard #define MY_TEST_Macro(X) X()
60789a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:9: warning: invalid case style for macro definition 'MY_TEST_Macro'
60889a1d03eSRichard // CHECK-FIXES: {{^}}#define MY_TEST_MACRO(X) X()
60989a1d03eSRichard 
61089a1d03eSRichard void MY_TEST_Macro(function) {}
6118d206f51SEdwin Vane // CHECK-MESSAGES: :[[@LINE-1]]:20: warning: invalid case style for global function 'function' [readability-identifier-naming]
6128d206f51SEdwin Vane // CHECK-FIXES: {{^}}void MY_TEST_MACRO(Function) {}
6138d206f51SEdwin Vane 
6148d206f51SEdwin Vane #define MY_CAT_IMPL(l, r) l ## r
6158d206f51SEdwin Vane #define MY_CAT(l, r) MY_CAT_IMPL(l, r)
6168d206f51SEdwin Vane #define MY_MACRO2(foo) int MY_CAT(awesome_, MY_CAT(foo, __COUNTER__)) = 0
6178d206f51SEdwin Vane #define MY_MACRO3(foo) int MY_CAT(awesome_, foo) = 0
6188d206f51SEdwin Vane MY_MACRO2(myglob);
6198d206f51SEdwin Vane MY_MACRO3(myglob);
6208d206f51SEdwin Vane // No suggestions should occur even though the resulting decl of awesome_myglob#
6218d206f51SEdwin Vane // or awesome_myglob are not entirely within a macro argument.
6228d206f51SEdwin Vane 
6238d206f51SEdwin Vane } // namespace InlineNamespace
6248d206f51SEdwin Vane } // namespace FOO_NS
62589a1d03eSRichard 
62689a1d03eSRichard template <typename t_t> struct a {
627f0e2a5e2SMasterCopy8GB // CHECK-MESSAGES: :[[@LINE-1]]:32: warning: invalid case style for struct 'a'
628f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}template <typename t_t> struct A {{{$}}
62989a1d03eSRichard   typename t_t::template b<> c;
63089a1d03eSRichard 
63189a1d03eSRichard   char const MY_ConstMember_string[4] = "123";
63289a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:14: warning: invalid case style for constant member 'MY_ConstMember_string'
63389a1d03eSRichard // CHECK-FIXES: {{^}}  char const my_const_member_string[4] = "123";{{$}}
63489a1d03eSRichard 
63589a1d03eSRichard   static char const MyConstClass_string[];
63689a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for class constant 'MyConstClass_string'
63789a1d03eSRichard // CHECK-FIXES: {{^}}  static char const kMyConstClassString[];{{$}}
63889a1d03eSRichard };
63989a1d03eSRichard 
64089a1d03eSRichard template<typename t_t>
64189a1d03eSRichard char const a<t_t>::MyConstClass_string[] = "123";
642f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}char const A<t_t>::kMyConstClassString[] = "123";{{$}}
64389a1d03eSRichard 
64489a1d03eSRichard template <template <typename> class A> struct b { A<int> c; };
645f0e2a5e2SMasterCopy8GB // CHECK-MESSAGES: :[[@LINE-1]]:47: warning: invalid case style for struct 'b'
646f0e2a5e2SMasterCopy8GB // CHECK-FIXES:template <template <typename> class A> struct B { A<int> c; };{{$}}
64789a1d03eSRichard 
64889a1d03eSRichard unsigned MY_GLOBAL_array[] = {1,2,3};
64989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:10: warning: invalid case style for global variable 'MY_GLOBAL_array'
65089a1d03eSRichard // CHECK-FIXES: {{^}}unsigned g_my_global_array[] = {1,2,3};{{$}}
65189a1d03eSRichard 
65289a1d03eSRichard unsigned const MyConstGlobal_array[] = {1,2,3};
65389a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: invalid case style for global constant 'MyConstGlobal_array'
65489a1d03eSRichard // CHECK-FIXES: {{^}}unsigned const MY_CONST_GLOBAL_ARRAY[] = {1,2,3};{{$}}
65589a1d03eSRichard 
65689a1d03eSRichard int * MyGlobal_Ptr;// -> ok
65789a1d03eSRichard int * my_second_global_Ptr;
65889a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for global pointer 'my_second_global_Ptr'
65989a1d03eSRichard // CHECK-FIXES: {{^}}int * MySecondGlobal_Ptr;{{$}}
66089a1d03eSRichard int * const MyConstantGlobalPointer = nullptr;
66189a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: invalid case style for global constant pointer 'MyConstantGlobalPointer'
66289a1d03eSRichard // CHECK-FIXES: {{^}}int * const MY_CONSTANT_GLOBAL_POINTER_Ptr = nullptr;{{$}}
66389a1d03eSRichard 
66489a1d03eSRichard void MyPoiterFunction(int * p_normal_pointer, int * const constant_ptr){
66589a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:59: warning: invalid case style for constant pointer parameter 'constant_ptr'
66689a1d03eSRichard // CHECK-FIXES: {{^}}void MyPoiterFunction(int * p_normal_pointer, int * const cp_ConstantPtr){{{$}}
66789a1d03eSRichard     int * l_PointerA;
66889a1d03eSRichard     int * const pointer_b = nullptr;
66989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:17: warning: invalid case style for local constant pointer 'pointer_b'
67089a1d03eSRichard // CHECK-FIXES: {{^}}    int * const lc_PointerB = nullptr;{{$}}
67189a1d03eSRichard }
67289a1d03eSRichard 
67389a1d03eSRichard using namespace FOO_NS;
67489a1d03eSRichard // CHECK-FIXES: {{^}}using namespace foo_ns;
67589a1d03eSRichard 
67689a1d03eSRichard using namespace FOO_NS::InlineNamespace;
67789a1d03eSRichard // CHECK-FIXES: {{^}}using namespace foo_ns::inline_namespace;
67889a1d03eSRichard 
67989a1d03eSRichard void QualifiedTypeLocTest(THIS___Structure);
680f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}void QualifiedTypeLocTest(This_structure);{{$}}
68189a1d03eSRichard void QualifiedTypeLocTest(THIS___Structure &);
682f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}void QualifiedTypeLocTest(This_structure &);{{$}}
68389a1d03eSRichard void QualifiedTypeLocTest(THIS___Structure &&);
684f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}void QualifiedTypeLocTest(This_structure &&);{{$}}
68589a1d03eSRichard void QualifiedTypeLocTest(const THIS___Structure);
686f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}void QualifiedTypeLocTest(const This_structure);{{$}}
68789a1d03eSRichard void QualifiedTypeLocTest(const THIS___Structure &);
688f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}void QualifiedTypeLocTest(const This_structure &);{{$}}
68989a1d03eSRichard void QualifiedTypeLocTest(volatile THIS___Structure &);
690f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}void QualifiedTypeLocTest(volatile This_structure &);{{$}}
69189a1d03eSRichard 
69289a1d03eSRichard namespace redecls {
69389a1d03eSRichard // We only want the warning to show up once here for the first decl.
69489a1d03eSRichard // CHECK-MESSAGES: :[[@LINE+1]]:6: warning: invalid case style for global function 'badNamedFunction'
69589a1d03eSRichard void badNamedFunction();
69689a1d03eSRichard void badNamedFunction();
69789a1d03eSRichard void badNamedFunction(){}
69889a1d03eSRichard //      CHECK-FIXES: {{^}}void BadNamedFunction();
69989a1d03eSRichard // CHECK-FIXES-NEXT: {{^}}void BadNamedFunction();
70089a1d03eSRichard // CHECK-FIXES-NEXT: {{^}}void BadNamedFunction(){}
70189a1d03eSRichard void ReferenceBadNamedFunction() {
70289a1d03eSRichard   auto l_Ptr = badNamedFunction;
70389a1d03eSRichard   // CHECK-FIXES: {{^}}  auto l_Ptr = BadNamedFunction;
70489a1d03eSRichard   l_Ptr();
70589a1d03eSRichard   badNamedFunction();
70689a1d03eSRichard   // CHECK-FIXES: {{^}}  BadNamedFunction();
70789a1d03eSRichard }
70889a1d03eSRichard 
70989a1d03eSRichard } // namespace redecls
71089a1d03eSRichard 
71189a1d03eSRichard namespace scratchspace {
71289a1d03eSRichard #define DUP(Tok) Tok
71389a1d03eSRichard #define M1(Tok) DUP(badName##Tok())
71489a1d03eSRichard 
71589a1d03eSRichard // We don't want a warning here as the call to this in Foo is in a scratch
71689a1d03eSRichard // buffer so its fix-it wouldn't be applied, resulting in invalid code.
71789a1d03eSRichard void badNameWarn();
71889a1d03eSRichard 
71989a1d03eSRichard void Foo() {
72089a1d03eSRichard   M1(Warn);
72189a1d03eSRichard }
72289a1d03eSRichard 
72389a1d03eSRichard #undef M1
72489a1d03eSRichard #undef DUP
72589a1d03eSRichard } // namespace scratchspace
72689a1d03eSRichard 
72789a1d03eSRichard template<typename type_t>
72889a1d03eSRichard auto GetRes(type_t& Param) -> decltype(Param.res());
72989a1d03eSRichard // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for parameter 'Param'
73089a1d03eSRichard // CHECK-FIXES: auto GetRes(type_t& a_param) -> decltype(a_param.res());
73189a1d03eSRichard 
73289a1d03eSRichard // Check implicit declarations in coroutines
73389a1d03eSRichard 
73489a1d03eSRichard struct async_obj {
735f0e2a5e2SMasterCopy8GB // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'async_obj'
736f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}struct Async_obj {{{$}}
73789a1d03eSRichard public:
73889a1d03eSRichard   never_suspend operator co_await() const noexcept;
73989a1d03eSRichard };
74089a1d03eSRichard 
74189a1d03eSRichard task ImplicitDeclTest(async_obj &a_object) {
74289a1d03eSRichard   co_await a_object;  // CHECK-MESSAGES-NOT: warning: invalid case style for local variable
74389a1d03eSRichard }
7442111577dSPiotr Zegar 
7452111577dSPiotr Zegar // Test scenario when canonical declaration will be a forward declaration
7462111577dSPiotr Zegar struct ForwardDeclStruct;
7472111577dSPiotr Zegar // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for struct 'ForwardDeclStruct' [readability-identifier-naming]
748f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}struct Forward_decl_struct;
749f0e2a5e2SMasterCopy8GB // CHECK-FIXES: {{^}}struct Forward_decl_struct {
7502111577dSPiotr Zegar struct ForwardDeclStruct {
7512111577dSPiotr Zegar };
7522111577dSPiotr Zegar 
7532111577dSPiotr Zegar struct forward_declared_as_struct;
7542111577dSPiotr Zegar // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for class 'forward_declared_as_struct' [readability-identifier-naming]
7552111577dSPiotr Zegar // CHECK-FIXES: {{^}}struct CForwardDeclaredAsStruct;
7562111577dSPiotr Zegar // CHECK-FIXES: {{^}}class CForwardDeclaredAsStruct {
7572111577dSPiotr Zegar class forward_declared_as_struct {
7582111577dSPiotr Zegar };
7592111577dSPiotr Zegar 
7605d95d27eSPiotr Zegar namespace pr55156 {
7615d95d27eSPiotr Zegar 
7625d95d27eSPiotr Zegar template<typename> struct Wrap;
7635d95d27eSPiotr Zegar 
7645d95d27eSPiotr Zegar typedef enum {
7655d95d27eSPiotr Zegar   VALUE0,
7665d95d27eSPiotr Zegar   VALUE1,
7675d95d27eSPiotr Zegar } ValueType;
7685d95d27eSPiotr Zegar // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: invalid case style for typedef 'ValueType' [readability-identifier-naming]
7695d95d27eSPiotr Zegar // CHECK-FIXES: {{^}}} value_type_t;
7705d95d27eSPiotr Zegar 
7715d95d27eSPiotr Zegar typedef ValueType (*MyFunPtr)(const ValueType&, Wrap<ValueType>*);
7725d95d27eSPiotr Zegar // CHECK-MESSAGES: :[[@LINE-1]]:21: warning: invalid case style for typedef 'MyFunPtr' [readability-identifier-naming]
7735d95d27eSPiotr Zegar // CHECK-FIXES: {{^}}typedef value_type_t (*my_fun_ptr_t)(const value_type_t&, Wrap<value_type_t>*);
7745d95d27eSPiotr Zegar 
7755d95d27eSPiotr Zegar #define STATIC_MACRO static
7765d95d27eSPiotr Zegar STATIC_MACRO void someFunc(ValueType a_v1, const ValueType& a_v2) {}
7775d95d27eSPiotr Zegar // CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(value_type_t a_v1, const value_type_t& a_v2) {}
7785d95d27eSPiotr Zegar STATIC_MACRO void someFunc(const ValueType** p_a_v1, ValueType (*p_a_v2)()) {}
7795d95d27eSPiotr Zegar // CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(const value_type_t** p_a_v1, value_type_t (*p_a_v2)()) {}
7805d95d27eSPiotr Zegar STATIC_MACRO ValueType someFunc() {}
7815d95d27eSPiotr Zegar // CHECK-FIXES: {{^}}STATIC_MACRO value_type_t someFunc() {}
7825d95d27eSPiotr Zegar STATIC_MACRO void someFunc(MyFunPtr, const MyFunPtr****) {}
7835d95d27eSPiotr Zegar // CHECK-FIXES: {{^}}STATIC_MACRO void someFunc(my_fun_ptr_t, const my_fun_ptr_t****) {}
7845d95d27eSPiotr Zegar #undef STATIC_MACRO
7855d95d27eSPiotr Zegar }
7861107b47dSEdwin Vane 
7871107b47dSEdwin Vane struct Some_struct {
7881107b47dSEdwin Vane   int SomeMember;
7891107b47dSEdwin Vane // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for public member 'SomeMember' [readability-identifier-naming]
7901107b47dSEdwin Vane // CHECK-FIXES: {{^}}  int some_member;
7911107b47dSEdwin Vane };
7921107b47dSEdwin Vane Some_struct g_s1{ .SomeMember = 1 };
7931107b47dSEdwin Vane // CHECK-FIXES: {{^}}Some_struct g_s1{ .some_member = 1 };
7941107b47dSEdwin Vane Some_struct g_s2{.SomeMember=1};
7951107b47dSEdwin Vane // CHECK-FIXES: {{^}}Some_struct g_s2{.some_member=1};
796