// RUN: %check_clang_tidy %s readability-identifier-naming %t -- \ // RUN: -config='{CheckOptions: [ \ // RUN: {key: readability-identifier-naming.MemberCase, value: CamelCase}, \ // RUN: {key: readability-identifier-naming.ParameterCase, value: CamelCase}, \ // RUN: {key: readability-identifier-naming.MethodCase, value: camelBack}, \ // RUN: {key: readability-identifier-naming.AggressiveDependentMemberLookup, value: 1} \ // RUN: ]}' -- -fno-delayed-template-parsing int set_up(int); int clear(int); class Foo { public: const int bar_baz; // comment-0 // CHECK-MESSAGES: :[[@LINE-1]]:13: warning: invalid case style for member 'bar_baz' // CHECK-FIXES: {{^}} const int BarBaz; // comment-0 Foo(int Val) : bar_baz(Val) { // comment-1 // CHECK-FIXES: {{^}} Foo(int Val) : BarBaz(Val) { // comment-1 set_up(bar_baz); // comment-2 // CHECK-FIXES: {{^}} set_up(BarBaz); // comment-2 } Foo() : Foo(0) {} ~Foo() { clear(bar_baz); // comment-3 // CHECK-FIXES: {{^}} clear(BarBaz); // comment-3 } int getBar() const { return bar_baz; } // comment-4 // CHECK-FIXES: {{^}} int getBar() const { return BarBaz; } // comment-4 }; class FooBar : public Foo { public: int getFancyBar() const { return this->bar_baz; // comment-5 // CHECK-FIXES: {{^}} return this->BarBaz; // comment-5 } }; int getBar(const Foo &Foo) { return Foo.bar_baz; // comment-6 // CHECK-FIXES: {{^}} return Foo.BarBaz; // comment-6 } int getBar(const FooBar &Foobar) { return Foobar.bar_baz; // comment-7 // CHECK-FIXES: {{^}} return Foobar.BarBaz; // comment-7 } int getFancyBar(const FooBar &Foobar) { return Foobar.getFancyBar(); } template class TempTest : public Foo { public: TempTest() = default; TempTest(int Val) : Foo(Val) {} int getBar() const { return Foo::bar_baz; } // comment-8 // CHECK-FIXES: {{^}} int getBar() const { return Foo::BarBaz; } // comment-8 int getBar2() const { return this->bar_baz; } // comment-9 // CHECK-FIXES: {{^}} int getBar2() const { return this->BarBaz; } // comment-9 }; namespace Bug41122 { namespace std { // for this example we aren't bothered about how std::vector is treated template // NOLINT struct vector { // NOLINT void push_back(bool); // NOLINT void pop_back(); // NOLINT }; // NOLINT }; // namespace std class Foo { std::vector &stack; // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: invalid case style for member 'stack' [readability-identifier-naming] public: Foo(std::vector &stack) // CHECK-MESSAGES: :[[@LINE-1]]:26: warning: invalid case style for parameter 'stack' [readability-identifier-naming] // CHECK-FIXES: {{^}} Foo(std::vector &Stack) : stack(stack) { // CHECK-FIXES: {{^}} : Stack(Stack) { stack.push_back(true); // CHECK-FIXES: {{^}} Stack.push_back(true); } ~Foo() { stack.pop_back(); // CHECK-FIXES: {{^}} Stack.pop_back(); } }; }; // namespace Bug41122 namespace Bug29005 { class Foo { public: int a_member_of_foo = 0; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'a_member_of_foo' // CHECK-FIXES: {{^}} int AMemberOfFoo = 0; }; int main() { Foo foo; return foo.a_member_of_foo; // CHECK-FIXES: {{^}} return foo.AMemberOfFoo; } }; // namespace Bug29005 namespace CtorInits { template class Container { T storage[N]; // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: invalid case style for member 'storage' // CHECK-FIXES: {{^}} T Storage[N]; T *pointer = &storage[0]; // CHECK-MESSAGES: :[[@LINE-1]]:6: warning: invalid case style for member 'pointer' // CHECK-FIXES: {{^}} T *Pointer = &Storage[0]; public: Container() : pointer(&storage[0]) {} // CHECK-FIXES: {{^}} Container() : Pointer(&Storage[0]) {} }; void foo() { Container container; } } // namespace CtorInits namespace resolved_dependance { template struct A0 { int value; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'value' A0 &operator=(const A0 &Other) { value = Other.value; // A0 this->value = Other.value; // A0 // CHECK-FIXES: {{^}} Value = Other.Value; // A0 // CHECK-FIXES-NEXT: {{^}} this->Value = Other.Value; // A0 return *this; } void outOfLineReset(); }; template void A0::outOfLineReset() { this->value -= value; // A0 // CHECK-FIXES: {{^}} this->Value -= Value; // A0 } template struct A1 { int value; // A1 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'value' // CHECK-FIXES: {{^}} int Value; // A1 int GetValue() const { return value; } // A1 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for method 'GetValue' // CHECK-FIXES {{^}} int getValue() const { return Value; } // A1 void SetValue(int Value) { this->value = Value; } // A1 // CHECK-MESSAGES: :[[@LINE-1]]:8: warning: invalid case style for method 'SetValue' // CHECK-FIXES {{^}} void setValue(int Value) { this->Value = Value; } // A1 A1 &operator=(const A1 &Other) { this->SetValue(Other.GetValue()); // A1 this->value = Other.value; // A1 // CHECK-FIXES: {{^}} this->setValue(Other.getValue()); // A1 // CHECK-FIXES-NEXT: {{^}} this->Value = Other.Value; // A1 return *this; } void outOfLineReset(); }; template void A1::outOfLineReset() { this->value -= value; // A1 // CHECK-FIXES: {{^}} this->Value -= Value; // A1 } template struct A2 { int value; // A2 // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'value' // CHECK-FIXES: {{^}} int Value; // A2 A2 &operator=(const A2 &Other) { value = Other.value; // A2 this->value = Other.value; // A2 // CHECK-FIXES: {{^}} Value = Other.Value; // A2 // CHECK-FIXES-NEXT: {{^}} this->Value = Other.Value; // A2 return *this; } }; // create some instances to check it works when instantiated. A1 AInt{}; A1 BInt = (AInt.outOfLineReset(), AInt); A1 AUnsigned{}; A1 BUnsigned = AUnsigned; } // namespace resolved_dependance namespace unresolved_dependance { template struct DependentBase { int depValue; // CHECK-MESSAGES: :[[@LINE-1]]:7: warning: invalid case style for member 'depValue' // CHECK-FIXES: {{^}} int DepValue; }; template struct Derived : DependentBase { Derived &operator=(const Derived &Other) { this->depValue = Other.depValue; // CHECK-FIXES: {{^}} this->DepValue = Other.DepValue; return *this; } }; } // namespace unresolved_dependance