= Проверка именования в clang-tidy :category: Программирование :tags: C++, программирование, clang, clang-tidy, форматирование, :toc: Программа https://clang.llvm.org/extra/clang-tidy/[clang-tidy] может проверить стилистику регистра идентификаторов, а также их префиксы и суффиксы. Возможные варианты стилей: .... lower_case UPPER_CASE camelBack CamelCase camel_Snake_Back Camel_Snake_Case aNy_CasE .... Перечень вариантов идентификаторов приведён https://clang.llvm.org/extra/clang-tidy/checks/readability-identifier-naming.html[здесь]. Для включения проверки именования идентификаторов нужно в находящемся в корне проекта файле `.clang-tidy` включить данный тип диагностики (опция `clang-diagnostic-*,readability-identifier-naming`), а затем указать список выполняемых проверок и их параметры в формате YAML, например: [source,yaml] ---- --- Checks: 'clang-diagnostic-*,readability-identifier-naming' CheckOptions: - key: readability-identifier-naming.VariableCase value: lower_case - key: readability-identifier-naming.VariablePrefix value: '' - key: readability-identifier-naming.VariableSuffix value: '' ... ---- https://git.246060.ru/f1x1t/clang-tidy-readability-identifier-naming[Проект] с файлом `.clang-tidy`, в соответствии с которым проводятся проверки именования идентификаторов. Перечень возможных параметров конфигурационного файла, их типовые значения и примеры соответствующего кода приведены ниже. == Синтаксис === AbstractClass (Абстрактный класс) [cols=",",options="header",] |=== |Параметр |Значение |AbstractClassCase |`CamelCase` |AbstractClassPrefix |`''` |AbstractClassSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ABSTRACT_CLASS { public: ABSTRACT_CLASS(); }; ---- Пример кода после форматирования: [source,cpp] ---- class AbstractClass { public: AbstractClass(); }; ---- === Class (Класс) [cols=",",options="header",] |=== |Параметр |Значение |ClassCase |`CamelCase` |ClassPrefix |`''` |ClassSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class TEST_CLASS { public: TEST_CLASS(); ~TEST_CLASS(); }; ---- Пример кода после форматирования: [source,cpp] ---- class TestClass { public: TestClass(); ~TestClass(); }; ---- === Struct (Структура) [cols=",",options="header",] |=== |Параметр |Значение |StructCase |`CamelCase` |StructPrefix |`''` |StructSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- struct TEST_struct { int a; }; ---- Пример кода после форматирования: [source,cpp] ---- struct TestStruct { int a; }; ---- === Union (Объединение) [cols=",",options="header",] |=== |Параметр |Значение |UnionCase |`CamelCase` |UnionPrefix |`''` |UnionSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- union TEST_union { int a; char b; }; ---- Пример кода после форматирования: [source,cpp] ---- union TestUnion { int a; char b; }; ---- === Enum (Перечисление) [cols=",",options="header",] |=== |Параметр |Значение |EnumCase |`CamelCase` |EnumPrefix |`''` |EnumSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- enum TEST_enum { ONE, TWO }; ---- Пример кода после форматирования: [source,cpp] ---- enum TestEnum { ONE, TWO }; ---- === EnumConstant (Значение в перечислении) [cols=",",options="header",] |=== |Параметр |Значение |EnumConstantCase |`UPPER_CASE` |EnumConstantPrefix |`''` |EnumConstantSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- enum TestEnum { one, TWO }; ---- Пример кода после форматирования: [source,cpp] ---- enum TestEnum { ONE, TWO }; ---- === Namespace (Пространство имён) [cols=",",options="header",] |=== |Параметр |Значение |NamespaceCase |`lower_case` |NamespacePrefix |`''` |NamespaceSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- namespace TEST_ns { } ---- Пример кода после форматирования: [source,cpp] ---- namespace test_ns { } ---- === InlineNamespace (Вложенное пространство имён) [cols=",",options="header",] |=== |Параметр |Значение |InlineNamespaceCase |`lower_case` |InlineNamespacePrefix |`''` |InlineNamespaceSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- namespace test_ns { inline namespace InlineNamespace { } } // namespace test_ns ---- Пример кода после форматирования: [source,cpp] ---- namespace test_ns { inline namespace inline_namespace { } } // namespace test_ns ---- === TypeAlias (Псевдоним типа) [cols=",",options="header",] |=== |Параметр |Значение |TypeAliasCase |`lower_case` |TypeAliasPrefix |`''` |TypeAliasSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- struct MyStructure { int a; }; using MY_STRUCT_TYPE = MyStructure; ---- Пример кода после форматирования: [source,cpp] ---- struct MyStructure { int a; }; using MyStructType = MyStructure; ---- === Typedef (Объявление типа) [cols=",",options="header",] |=== |Параметр |Значение |TypedefCase |`lower_case` |TypedefPrefix |`''` |TypedefSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- typedef int MY_INT; ---- Пример кода после форматирования: [source,cpp] ---- typedef int my_int; ---- == Переменные === Variable (Переменная) ??? === GlobalVariable (Глобальная переменная) [cols=",",options="header",] |=== |Параметр |Значение |GlobalVariableCase |`lower_case` |GlobalVariablePrefix |`''` |GlobalVariableSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- unsigned GlobalVariable; ---- Пример кода после форматирования: [source,cpp] ---- unsigned global_variable; ---- === LocalVariable (Локальная переменная) [cols=",",options="header",] |=== |Параметр |Значение |LocalVariableCase |`camelBack` |LocalVariablePrefix |`''` |LocalVariableSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- int function() { int LocalVariable = 0; return LocalVariable; } ---- Пример кода после форматирования: [source,cpp] ---- int function() { int localVariable = 0; return localVariable; } ---- === StaticVariable (Статическая переменная) [cols=",",options="header",] |=== |Параметр |Значение |StaticVariableCase |`camelBack` |StaticVariablePrefix |`''` |StatucVariableSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- int functionWithStaticVariable() { static int StaticVariable = 0; return StaticVariable; } ---- Пример кода после форматирования: [source,cpp] ---- int functionWithStaticVariable() { static int staticVariable = 0; return staticVariable; } ---- === ConstexptVariable (Переменная constexpr) [cols=",",options="header",] |=== |Параметр |Значение |ConstexprVariableCase |`lower_case` |ConstexprVariablePrefix |`''` |ConstexprVariableSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- constexpr int CONST_FIVE = 5; ---- Пример кода после форматирования: [source,cpp] ---- constexpr int const_five = 5; ---- === GlobalPointer (Глобальный указатель) [cols=",",options="header",] |=== |Параметр |Значение |GlobalPointerCase |`lower_case` |GlobalPointerPrefix |`''` |GlobalPointerSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- void* globalPointer; ---- Пример кода после форматирования: [source,cpp] ---- void* global_pointer; ---- === LocalPointer (Локальный указатель) [cols=",",options="header",] |=== |Параметр |Значение |LocalPointerCase |`camelBack` |LocalPointerPrefix |`''` |LocalPointerSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- void* function() { void* LocalPointer = nullptr; return LocalPointer; } ---- Пример кода после форматирования: [source,cpp] ---- void* function() { void* localPointer = nullptr; return localPointer; } ---- === Member (Член) ??? === ClassMember (Член класса) [cols=",",options="header",] |=== |Параметр |Значение |ClassMemberCase |`camelBack` |ClassMemberPrefix |`''` |ClassMemberSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithClassMember { public: static int CLASS_MEMBER; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithClassMember { public: static int classMember; }; ---- === ConstantMember (Константный член) [cols=",",options="header",] |=== |Параметр |Значение |ConstantMemberCase |`lower_case` |ConstantMemberPrefix |`''` |ConstantMemberSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithConstantMember { char const ConstMember[4] = "123"; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithConstantMember { char const const_member[4] = "123"; }; ---- === PrivateMember (Приватный член) [cols=",",options="header",] |=== |Параметр |Значение |PrivateMemberCase |`camelBack` |PrivateMemberPrefix |`'m_'` |PrivateMemberSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithPrivateMember { private: int PrivateMember; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithPrivateMember { private: int m_privateMember; }; ---- === ProtectedMember (Защищённый член) [cols=",",options="header",] |=== |Параметр |Значение |ProtectedMemberCase |`camelBack` |ProtectedMemberPrefix |`''` |ProtectedMemberSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithProtectedMember { protected: int ProtectedMember; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithProtectedMember { protected: int protectedMember; }; ---- === PublicMember (Публичный член) [cols=",",options="header",] |=== |Параметр |Значение |PublicMemberCase |`camelBack` |PublicMemberPrefix |`''` |PublicMemberSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithPublicMember { public: int PublicMember; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithPublicMember { public: int publicMember; }; ---- == Константы === Constant (Константа) ??? [cols=",",options="header",] |=== |Параметр |Значение |ConstantCase |`UPPER_CASE` |ConstantPrefix |`''` |ConstantSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- const int theOne = 1; ---- Пример кода после форматирования: [source,cpp] ---- const int THE_ONE = 1; ---- === GlobalConstant (Глобальная константа) [cols=",",options="header",] |=== |Параметр |Значение |GlobalConstantCase |`UPPER_CASE` |GlobalConstantPrefix |`''` |GlobalConstantSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- const int theOne = 1; ---- Пример кода после форматирования: [source,cpp] ---- const int THE_ONE = 1; ---- === LocalConstant (Локальная константа) [cols=",",options="header",] |=== |Параметр |Значение |LocalConstantCase |`camelBack` |LocalConstantPrefix |`''` |LocalConstantSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- int functionWithLocalConstant() { const int LocalConstant = 0; return LocalConstant; } ---- Пример кода после форматирования: [source,cpp] ---- int functionWithLocalConstant() { const int localConstant = 0; return localConstant; } ---- === StaticConstant (Статическая контстанта) [cols=",",options="header",] |=== |Параметр |Значение |StaticConstantCase |`camelBack` |StaticConstantPrefix |`''` |StaticConstantSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- int functionWithStaticConstant() { const int StaticConstant = 0; return StaticConstant; } ---- Пример кода после форматирования: [source,cpp] ---- int functionWithStaticConstant() { const int staticConstant = 0; return staticConstant; } ---- === ClassConstant (Константа класса) [cols=",",options="header",] |=== |Параметр |Значение |ClassConstantCase |`UPPER_CASE` |ClassConstantPrefix |`''` |ClassConstantSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithClassConstant { public: static int const Class_Constant = 0; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithClassConstant { public: static int const CLASS_CONSTANT = 0; }; ---- === GlobalConstantPointer (Глобальный константный указатель) [cols=",",options="header",] |=== |Параметр |Значение |GlobalConstantPointerCase |`lower_case` |GlobalConstantPointerPrefix |`''` |GlobalConstantPointerSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- void* global_pointer; void* const GlobalConstPointer = global_pointer; ---- Пример кода после форматирования: [source,cpp] ---- void* global_pointer; void* const global_const_pointer = global_pointer; ---- === LocalConstantPointer (Локальный константный указатель) [cols=",",options="header",] |=== |Параметр |Значение |LocalConstantPointerCase |`camelBack` |LocalConstantPointerPrefix |`''` |LocalConstantPointerSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- void* functionWithLocalConstPointer() { void* pointer = nullptr; void* const LocalConstPointer = pointer; return LocalConstPointer; } ---- Пример кода после форматирования: [source,cpp] ---- void* functionWithLocalConstPointer() { void* pointer = nullptr; void* const localConstPointer = pointer; return localConstPointer; } ---- == Функции === Function (Функция) [cols=",",options="header",] |=== |Параметр |Значение |FunctionCase |`camelBack` |FunctionPrefix |`''` |FunctionSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- static int static_function() { return 0; } ---- Пример кода после форматирования: [source,cpp] ---- static int staticFunction() { return 0; } ---- === GlobalFunction (Глобальная функция) [cols=",",options="header",] |=== |Параметр |Значение |GlobalFunctionCase |`camelBack` |GlobalFunctionPrefix |`''` |GlobalFunctionSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- int global_function() { return 0; } ---- Пример кода после форматирования: [source,cpp] ---- int globalFunction() { return 0; } ---- === ConstexprFunction (Функция constexpr) [cols=",",options="header",] |=== |Параметр |Значение |ConstexprFunctionCase |`camelBack` |ConstexprFunctionPrefix |`''` |ConstexprFunctionSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- constexpr int get_five() { return ( 5 ); } ---- Пример кода после форматирования: [source,cpp] ---- constexpr int getFive() { return ( 5 ); } ---- === Method (Метод) ??? === ClassMethod (Метод класса) [cols=",",options="header",] |=== |Параметр |Значение |ClassMethodCase |`camelBack` |ClassMethodPrefix |`''` |ClassMethodSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithMethod { public: static int get_int() { return 0; }; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithMethod { public: static int getInt() { return 0; }; }; ---- === ConstexprMethod (Метод constexpr) [cols=",",options="header",] |=== |Параметр |Значение |ConstexprMethodCase |`camelBack` |ConstexprMethodPrefix |`''` |ConstexprMethodSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithConstexprMethod { private: constexpr int get_int() { return 0; }; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithConstexprMethod { private: constexpr int getInt() { return 0; }; }; ---- === VirtualMethod (Виртуальный метод) [cols=",",options="header",] |=== |Параметр |Значение |VirtualMethodCase |`camelBack` |VirtualMethodPrefix |`''` |VirtualMethodSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithVirtualMethod { private: virtual int get_int() { return 0; }; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithVirtualMethod { private: virtual int getInt() { return 0; }; }; ---- === PrivateMethod (Приватный метод) [cols=",",options="header",] |=== |Параметр |Значение |PrivateMethodCase |`camelBack` |PrivateMethodPrefix |`''` |PrivateMethodSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithPrivateMethod { private: int get_int() { return 0; }; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithPrivateMethod { private: int getInt() { return 0; }; }; ---- === ProtectedMethod (Защищённый метод) [cols=",",options="header",] |=== |Параметр |Значение |ProtectedMethodCase |`camelBack` |ProtectedMethodPrefix |`''` |ProtectedMethodSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithProtectedMethod { protected: int get_int() { return 0; }; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithProtectedMethod { protected: int getInt() { return 0; }; }; ---- === PublicMethod (Публичный метод) [cols=",",options="header",] |=== |Параметр |Значение |PublicMethodCase |`camelBack` |PublicMethodPrefix |`''` |PublicMethodSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- class ClassWithPublicMethod { public: int get_int() { return 0; }; }; ---- Пример кода после форматирования: [source,cpp] ---- class ClassWithPublicMethod { public: int getInt() { return 0; }; }; ---- == Параметры === Parameter (Параметр) [cols=",",options="header",] |=== |Параметр |Значение |ParameterCase |`camelBack` |ParameterPrefix |`''` |ParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- int returnInt(int return_Value) { return return_Value; }; ---- Пример кода после форматирования: [source,cpp] ---- int returnInt(int returnValue) { return returnValue; }; ---- === ConstantParameter (Константный параметр) [cols=",",options="header",] |=== |Параметр |Значение |ConstantParameterCase |`camelBack` |ConstantParameterPrefix |`''` |ConstantParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- char returnChar(const char return_Value) { return return_Value; }; ---- Пример кода после форматирования: [source,cpp] ---- char returnChar(const char returnValue) { return returnValue; }; ---- === ConstantPointerParameter (Константный указатель на параметр) [cols=",",options="header",] |=== |Параметр |Значение |ConstantPointerParameterCase |`camelBack` |ConstantPointerParameterPrefix |`''` |ConstantPointerParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- void* returnVoid(void* const return_Value) { return return_Value; }; ---- Пример кода после форматирования: [source,cpp] ---- void* returnVoid(void* const returnValue) { return returnValue; }; ---- === PointerParameter (Параметр типа указатель) [cols=",",options="header",] |=== |Параметр |Значение |PointerParameterCase |`camelBack` |PointerParameterPrefix |`''` |PointerParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- void* returnPtr(void* return_Value) { return return_Value; }; ---- Пример кода после форматирования: [source,cpp] ---- void* returnPtr(void* returnValue) { return returnValue; }; ---- == Шаблоны === TemplateParameter (Параметр шаблона) [cols=",",options="header",] |=== |Параметр |Значение |TemplateParameterCase |`camelBack` |TemplateParameterPrefix |`''` |TemplateParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- template int tFunction(TType t_value) { return 0; } ---- Пример кода после форматирования: [source,cpp] ---- template int tFunction(TType tValue) { return 0; } ---- === ParameterPack (Список параметров шаблона) [cols=",",options="header",] |=== |Параметр |Значение |ParameterPackCase |`camelBack` |ParameterPackPrefix |`''` |ParameterPackSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- template void f(Types ... Parameters_Pack); ---- Пример кода после форматирования: [source,cpp] ---- template void f(Types ... parametersPack); ---- === TemplateTemplateParameter (Параметр шаблона шаблона) [cols=",",options="header",] |=== |Параметр |Значение |TemplateTemplateParameterCase |`camelBack` |TemplateTemplateParameterPrefix |`''` |TemplateTemplateParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- template class TPL_TPL_Parameter> class AllmightyClass { }; ---- Пример кода после форматирования: [source,cpp] ---- template class tplTplParameter> class AllmightyClass { }; ---- === TypeTemplateParameter (Типа параметра шаблона) [cols=",",options="header",] |=== |Параметр |Значение |TypeTemplateParameterCase |`CamelCase` |TypeTemplateParameterPrefix |`''` |TypeTemplateParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- templateint tFunction(t_type value) { return 0; }; ---- Пример кода после форматирования: [source,cpp] ---- templateint tFunction(TType value) { return 0; }; ---- === ValueTemplateParameter (Значение параметра шаблона) [cols=",",options="header",] |=== |Параметр |Значение |ValueTemplateParameterCase |`camelBack` |ValueTemplateParameterPrefix |`''` |ValueTemplateParameterSuffix |`''` |=== Пример кода до форматирования: [source,cpp] ---- template int tFunction(TType tValue) { return 0; } ---- Пример кода после форматирования: [source,cpp] ---- template int tFunction(TType tValue) { return 0; } ----