--- title: Проверка именования в Clang Tidy category: Программирование tags: C++, программирование, clang, clang-tidy summary: CSS: table-100.css toc: yes ... [TOC] Программа Clang Tidy проверяет стилистику регистра идентификаторов. Возможные варианты стилей: lower_case UPPER_CASE camelBack CamelCase camel_Snake_Back Camel_Snake_Case aNy_CasE Также существует возможность проверки префиксов и суффиксов идентификаторов. Для включения проверки именования идентификаторов нужно в файле `.clang-tidy`, находящемся в корне проекта, включить данный тип диагностики (опция `clang-diagnostic-*,readability-identifier-naming`), а затем указать список выполняемых проверок и их параметры в формате YAML, например: ```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: '' ... ``` Перечень возможных параметров конфигурационного файла, их типовые значения и примеры соответствующего кода приведены ниже. ## Синтаксис ### AbstractClass (Абстрактный класс) Параметр | Значение -------------------------------|---------------- AbstractClassCase | `CamelCase` AbstractClassPrefix | `''` AbstractClassSuffix | `''` Пример кода до форматирования: ```cpp class ABSTRACT_CLASS { public: ABSTRACT_CLASS(); }; ``` Пример кода после форматирования: ```cpp class AbstractClass { public: AbstractClass(); }; ``` ### Class (Класс) Параметр | Значение -------------------------------|---------------- ClassCase | `CamelCase` ClassPrefix | `''` ClassSuffix | `''` Пример кода до форматирования: ```cpp class TEST_CLASS { public: TEST_CLASS(); ~TEST_CLASS(); }; ``` Пример кода после форматирования: ```cpp class TestClass { public: TestClass(); ~TestClass(); }; ``` ### Struct (Структура) Параметр | Значение -------------------------------|---------------- StructCase | `CamelCase` StructPrefix | `''` StructSuffix | `''` Пример кода до форматирования: ```cpp struct TEST_struct { int a; }; ``` Пример кода после форматирования: ```cpp struct TestStruct { int a; }; ``` ### Union (Объединение) Параметр | Значение -------------------------------|---------------- UnionCase | `CamelCase` UnionPrefix | `''` UnionSuffix | `''` Пример кода до форматирования: ```cpp union TEST_union { int a; char b; }; ``` Пример кода после форматирования: ```cpp union TestUnion { int a; char b; }; ``` ### Enum (Перечисление) Параметр | Значение -------------------------------|---------------- EnumCase | `CamelCase` EnumPrefix | `''` EnumSuffix | `''` Пример кода до форматирования: ```cpp enum TEST_enum { One, Two }; ``` Пример кода после форматирования: ```cpp enum TestEnum { One, Two }; ``` ### EnumConstant (Значение в перечислении) Параметр | Значение -------------------------------|---------------- EnumConstantCase | `CamelCase` EnumConstantPrefix | `''` EnumConstantSuffix | `''` Пример кода до форматирования: ```cpp enum TestEnum { one, two }; ``` Пример кода после форматирования: ```cpp enum TestEnum { One, Two }; ``` ### Namespace (Пространство имён) Параметр | Значение -------------------------------|---------------- NamespaceCase | `lower_case` NamespacePrefix | `''` NamespaceSuffix | `''` Пример кода до форматирования: ```cpp namespace TEST_ns { ... } ``` Пример кода после форматирования: ```cpp namespace test_ns { ... } ``` ### InlineNamespace (Вложенное пространство имён) Параметр | Значение -------------------------------|---------------- InlineNamespaceCase | `lower_case` InlineNamespacePrefix | `''` InlineNamespaceSuffix | `''` Пример кода до форматирования: ```cpp namespace test_ns { inline namespace InlineNamespace { ... } } // namespace test_ns ``` Пример кода после форматирования: ```cpp namespace test_ns { inline namespace inline_namespace { ... } } // namespace test_ns ``` ### TypeAlias (Псевдоним типа) Параметр | Значение -------------------------------|---------------- TypeAliasCase | `lower_case` TypeAliasPrefix | `''` TypeAliasSuffix | `''` Пример кода до форматирования: ```cpp using MY_STRUCT_TYPE = MyStructure; ``` Пример кода после форматирования: ```cpp using my_struct_type = MyStructure; ``` ### Typedef (Объявление типа) Параметр | Значение -------------------------------|---------------- TypedefCase | `lower_case` TypedefPrefix | `''` TypedefSuffix | `''` Пример кода до форматирования: ```cpp typedef int MY_INT; ``` Пример кода после форматирования: ```cpp typedef int my_int; ``` ## Переменные ### Variable (Переменная) Параметр | Значение -------------------------------|---------------- VariableCase | `lower_case` VariablePrefix | `''` VariableSuffix | `''` Пример кода до форматирования: ```cpp unsigned TestVariable; ``` Пример кода после форматирования: ```cpp unsigned testvariable; ``` ### GlobalVariable (Глобальная переменная) Параметр | Значение -------------------------------|---------------- VariableCase | `lower_case` VariablePrefix | `''` VariableSuffix | `''` Пример кода до форматирования: ```cpp unsigned GlobalVariable; ``` Пример кода после форматирования: ```cpp unsigned globalvariable; ``` ### LocalVariable (Локальная переменная) Параметр | Значение -------------------------------|---------------- LocalVariableCase | `lower_case` LocalVariablePrefix | `''` LocalVariableSuffix | `''` Пример кода до форматирования: ```cpp unsigned Local_Variable; ``` Пример кода после форматирования: ```cpp unsigned local_variable; ``` ### StaticVariable (Статическая переменная) Параметр | Значение -------------------------------|---------------- StaticVariableCase | `lower_case` StatcVariablePrefix | `''` StatucVariableSuffix | `''` Пример кода до форматирования: ```cpp unsigned staticVariable; ``` Пример кода после форматирования: ```cpp unsigned staticvariable; ``` ### ConstexptVariable (Переменная constexpr) ### GlobalPointer (Глобальный указатель) ### LocalPointer(Локальный указатель) ### Member (Член) ### ClassMember (Член класса) ### PrivateMember (Приватная переменная) ### ProtectedMember (Защищённая переменная) ### PublicMember (Публичная переменная) ## Константы ### Constant (Константа) ### GlobalConstant (Глобальная константа) ### LocalConstant (Локальная константа) ### StaticConstant (Статическая контстанта) ### ClassConstant (Константа класса) ### GlobalConstantPointer (Глобальный константный указатель) ### LocalConstantPointer (Локальный константный указатель) ### ConstMember (Константный член) ## Функции ### Function (Функция) ### GlobalFunction (Глобальная функция) ### ConstexptFunction (Функция constexpr) ### Method (Метод) ### ClassMethod (Метод класса) ### ConstexprMethod (Метод constexpr) ### VirtualMethod (Виртуальный метод) ### PrivateMethod (Приватный метод) ### ProtectedMethod (Защищённый метод) ### PublicMethod (Публичный метод) ## Параметры ### Параметр ### Константный параметр ### Константный указатель на параметр ### Список парамтров ### Параметр-укзатель ### Параметр шаблона ### Параметр шаблона шаблона ### Типа параметра шаблона ### Значение параметра шаблона ConstantParameterCase, ConstantParameterPrefix, ConstantParameterSuffix ConstantPointerParameterCase, ConstantPointerParameterPrefix, ConstantPointerParameterSuffix ParameterCase, ParameterPrefix, ParameterSuffix ParameterPackCase, ParameterPackPrefix, ParameterPackSuffix PointerParameterCase, PointerParameterPrefix, PointerParameterSuffix TemplateParameterCase, TemplateParameterPrefix, TemplateParameterSuffix TemplateTemplateParameterCase, TemplateTemplateParameterPrefix, TemplateTemplateParameterSuffix TypeTemplateParameterCase, TypeTemplateParameterPrefix, TypeTemplateParameterSuffix ValueTemplateParameterCase, ValueTemplateParameterPrefix, ValueTemplateParameterSuffix Лексическая единица Регистр имени абстрактного класса Параметр readability-identifier-naming.AbstractClassCase Значение CamelCase Пример `ATestClass` Пример кода: ```cpp class ATestClass { }; ``` Лексическая единица: Префикс имени абстрактного класса Параметр: readability-identifier-naming.AbstractClassPrefix Значение: 'A' Пример: `ATestClass` Пример кода: ```cpp class ATestClass { }; ``` Лексическая единица: Регистр имени класса Параметр: readability-identifier-naming.ClassCase Значение: CamelCase Пример: `EasyTest` Пример кода: ```cpp class EasyTest { }; ``` Лексическая единица: Префикс имени класса Параметр: readability-identifier-naming.ClassPrefix Значение: '' (было 'C') Пример: `EasyTest` Пример кода: ```cpp class EasyTest { }; ``` Лексическая единица: Регистр имена константы класса Параметр: readability-identifier-naming.ClassConstantCase Значение: CamelCase Пример: `FixedValue` Пример кода: ```cpp class EasyTest { const int FixedValue = 1; }; ``` Лексическая единица: Префикс имени константы класса Параметр: readability-identifier-naming.ClassConstantPrefix Значение: '' (было 'k') Пример: `FixedValue` Пример кода: ```cpp class EasyTest { static const int FixedValue = 1; }; ``` ????? Лексическая единица: Регистр имени члена класса Параметр: readability-identifier-naming.ClassMemberCase Значение: CamelCase Пример: Пример кода: ```cpp ????? ``` Лексическая единица: Регистр имени метода класса Параметр: readability-identifier-naming.ClassMethodCase Значение: camelBack Пример: `getValue` Пример кода: ```cpp class EasyTest { public: int getValue(); }; ``` Лексическая единица: Регистр имени константы Параметр: readability-identifier-naming.ConstantCase Значение: UPPER_CASE Пример: `BLACK_COLOR` Пример кода: ```cpp const unsigned BLACK_COLOR = 0; ``` ????? Лексическая единица: Суффикс имени константы Параметр: readability-identifier-naming.ConstantSuffix Значение: '' (было '\_CST') Пример: Пример кода: ```cpp ????? ``` Лексическая единица: Регистр имени функции, возвращающей константное значение Параметр: readability-identifier-naming.ConstexprFunctionCase Значение: lower_case Пример: `get_five` Пример кода: ```cpp constexpr int get_five() { return ( 2 + 3 ); }; ``` Лексическая единица: Регистт имени метода, возвращающего константное значение Параметр: readability-identifier-naming.ConstexprMethodCase Значение: lower_case Пример: `get_five` Пример кода: ```cpp class EasyTest { constexpr int get_five() { return ( 2 + 3 ); }; }; ``` Лексическая единица: Регистр имени константной переменной, получающей значение из функции Параметр: readability-identifier-naming.ConstexprVariableCase Значение: lower_case Пример: `const_five` Пример кода: ```cpp constexpr int get_five() { return ( 2 + 3 ); }; constexpr int const_five = get_five(); ``` Лексическая единица: Регистр имени перечисления Параметр: readability-identifier-naming.EnumCase Значение: CamelCase Пример: `CurrentState` Пример кода: ```cpp enum CurrentState { OK = 0, ERROR = 1 }; ``` Лексическая единица: Префикс имени перечисления Параметр: readability-identifier-naming.EnumPrefix Значение: '' (было 'E') Пример: Пример кода: ```cpp enum CurrentState { OK = 0, ERROR = 1 }; ``` Лексическая единица: Регистр имени константы в перечислении Параметр: readability-identifier-naming.EnumConstantCase Значение: UPPER_CASE Пример: `OK` Пример кода: ```cpp enum CurrentState { OK = 0, ERROR = 1 }; ``` Лексическая единица: Регистр имени статической функции Параметр: readability-identifier-naming.FunctionCase Значение: camelBack Пример: `staticFunction` Пример кода: ```cpp static void staticFunction(); ``` Лексическая единица: Регистр имени глобальной константы Параметр: readability-identifier-naming.GlobalConstantCase Значение: UPPER_CASE Пример: `BLACK_COLOR` Пример кода: ```cpp const int BLACK_COLOR = 0; ``` Лексическая единица: Регистр имени глобальной функции Параметр: readability-identifier-naming.GlobalFunctionCase Значение: CamelCase Пример: `GlobalFunction` Пример кода: ```cpp void GlobalFunction(); ``` Лексическая единица: Регистр имени глобальной переменной Параметр: readability-identifier-naming.GlobalVariableCase Значение: lower_case Пример: `g_useful_variable` Пример кода: ```cpp int g_useful_variable = 0; ``` Лексическая единица: Префикс имени глобальной переменной Параметр: readability-identifier-naming.GlobalVariablePrefix Значение: 'g\_' Пример: `g_useful_variable` Пример кода: ```cpp int g_useful_variable = 0; ``` ???? Лексическая единица: Параметр: readability-identifier-naming.InlineNamespaceCase Значение: lower_case Пример: Пример кода: ```cpp ????? ``` Лексическая единица: Регистр имени локальной константы Параметр: readability-identifier-naming.LocalConstantCase Значение: CamelCase Пример: `BlackColor` Пример кода: ```cpp void GlobalFunc() { const int BlackColor = 0; } ``` Лексическая единица: Префикс имени локальной константы Параметр: readability-identifier-naming.LocalConstantPrefix Значение: '' (было 'k') Пример: `BlackColor` Пример кода: ```cpp void GlobalFunc() { const int BlackColor = 0; } ``` Лексическая единица: Регистр имени локальной переменной Параметр: readability-identifier-naming.LocalVariableCase Значение: lower_case Пример: `black_color` Пример кода: ```cpp void GlobalFunc() { int black_color = 0; } ``` ????? Лексическая единица: Параметр: readability-identifier-naming.MemberCase Значение: CamelCase Пример: Пример кода: ```cpp ???? ``` ????? Лексическая единица: Параметр: readability-identifier-naming.MemberPrefix Значение: 'm\_' Пример: Пример кода: ```cpp ???? ``` Лексическая единица: Регистр имени константного члена класса Параметр: readability-identifier-naming.ConstantMemberCase Значение: lower_case Пример: `black_color` Пример кода: ```cpp class TestClass { public: const int black_color = 0; }; ``` Лексическая единица: Префикс имени приватного члена класса Параметр: readability-identifier-naming.PrivateMemberPrefix Значение: '\_\_' Пример: `__black_color` Пример кода: ```cpp class TestClass { private: int __black_color = 0; }; ``` Лексическая единица: Префикс имени защищённого члена класса Параметр: readability-identifier-naming.ProtectedMemberPrefix Значение: '\_' Пример: `_black_color` Пример кода: ```cpp class TestClass { protected: int _black_color = 0; }; ``` Лексическая единица: Префикс имени публичного члена класса Параметр: readability-identifier-naming.PublicMemberCase Значение: lower_case Пример: `black_color` Пример кода: ```cpp class TestClass { public: int black_color = 0; }; ``` Лексическая единица: Регистр имени публичного метода Параметр: readability-identifier-naming.MethodCase Значение: camelBack Пример: `testMethod` Пример кода: ```cpp class TestClass { public: void testMethod(); }; ``` Лексическая единица: Регистр имени приватного метода Параметр: readability-identifier-naming.PrivateMethodPrefix Значение: '\_\_' Пример: `__testMethod` Пример кода: ```cpp class TestClass { private: void __testMethod(); }; ``` Лексическая единица: Регистр имени защищённого метода Параметр: readability-identifier-naming.ProtectedMethodPrefix Значение: '\_' Пример: `_testMethod` Пример кода: ```cpp class TestClass { protected: void _testMethod(); }; ``` Лексическая единица: Регистр имени пространства имён Параметр: readability-identifier-naming.NamespaceCase Значение: lower_case Пример: `upper_ns` Пример кода: ```cpp namespace upper_ns { } ``` Лексическая единица: Регистр имени параметра Параметр: readability-identifier-naming.ParameterCase Значение: camelBack Пример: `inputValue` Пример кода: ```cpp void GlobalFunction(int inputValue) { } ``` Лексическая единица: Префикс имени параметра Параметр: readability-identifier-naming.ParameterPrefix Значение: '' (было 'a\_') Пример: `inputValue` Пример кода: ```cpp void GlobalFunction(int inputValue) { } ``` Лексическая единица: Регистр имени констатного параметра Параметр: readability-identifier-naming.ConstantParameterCase Значение: camelBack Пример: `inputValue` Пример кода: ```cpp void GlobalFunction(const int inputValue) { } ``` Лексическая единица: Префикс имени константного параметра Параметр: readability-identifier-naming.ConstantParameterPrefix Значение: '' (было 'i\_') Пример: Пример кода: ```cpp void GlobalFunction(const int inputValue) { } ``` ????? Лексическая единица: Параметр: readability-identifier-naming.ParameterPackCase Значение: camelBack Пример: Пример кода: ```cpp ???? ``` ????? Лексическая единица: Параметр: readability-identifier-naming.PureFunctionCase Значение: lower_case Пример: Пример кода: ```cpp ????? ``` ????? Лексическая единица: Параметр: readability-identifier-naming.PureMethodCase Значение: camelBack Пример: Пример кода: ```cpp ????? ``` ????? Лексическая единица: Регистр имени статической константы Параметр: readability-identifier-naming.StaticConstantCase Значение: UPPER_CASE Пример: `BLACK_COLOR` Пример кода: ```cpp void GlobalFunction() { static const int BLACK_COLOR = 0; } ``` Лексическая единица: Регистр имени статической переменной Параметр: readability-identifier-naming.StaticVariableCase Значение: camelBack Пример: `blackColor` Пример кода: ```cpp void GlobalFunction() { static int blackColor = 0; } ``` Лексическая единица: Префикс имени статической переменной Параметр: readability-identifier-naming.StaticVariablePrefix Значение: '' (было 's\_') Пример: `blackColor` Пример кода: ```cpp void GlobalFunction() { static int blackColor = 0; } ``` Лексическая единица: Регист имени структуры Параметр: readability-identifier-naming.StructCase Значение: lower_case Пример: `pair_struct` Пример кода: ```cpp struct pair_struct { int key; char value; }; ``` Лексическая единица: Параметр: readability-identifier-naming.TemplateParameterCase Значение: UPPER_CASE Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.TemplateTemplateParameterCase Значение: CamelCase Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.TemplateUsingCase Значение: lower_case Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.TemplateUsingPrefix Значение: 'u\_' Пример: Пример кода: ```cpp // ``` Лексическая единица: Регистр имени шаблонного типа Параметр: readability-identifier-naming.TypeTemplateParameterCase Значение: СamelCase Пример: Пример кода: ```cpp template class TestClass { T1 __v; }; ``` Лексическая единица: Суффикс имени шаблонного типа Параметр: readability-identifier-naming.TypeTemplateParameterSuffix Значение: '' (было '\_t') Пример: Пример кода: ```cpp template class TestClass { T1 __v; }; ``` Лексическая единица: Регистр имени нового типа Параметр: readability-identifier-naming.TypedefCase Значение: lower_case Пример: `i32_t` Пример кода: ```cpp typedef int32_t i32_t; ``` Лексическая единица: Суффикс имени нового типа Параметр: readability-identifier-naming.TypedefSuffix Значение: '\_t' Пример: `i32_t` Пример кода: ```cpp typedef int32_t i32_t; ``` Лексическая единица: Регистр имени объединения Параметр: readability-identifier-naming.UnionCase Значение: CamelCase Пример: `IntValue` Пример кода: ```cpp union IntValue { int a; unsigned b; }; ``` Лексическая единица: Префикс имени объединения Параметр: readability-identifier-naming.UnionPrefix Значение: '' (было 'U') Пример: `InvValue` Пример кода: ```cpp union IntValue { int a; unsigned b; }; ``` Лексическая единица: Параметр: readability-identifier-naming.UsingCase Значение: lower_case Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.ValueTemplateParameterCase Значение: camelBack Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.VariableCase Значение: lower_case Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.VirtualMethodCase Значение: UPPER_CASE Пример: Пример кода: ```cpp // ``` Лексическая единица: Параметр: readability-identifier-naming.IgnoreFailedSplit Значение: 0 Пример: Пример кода: ```cpp // ``` Лексическая единица: Префикс виртуального метода Параметр: readability-identifier-naming.VirtualMethodPrefix Значение: 'v\_' Пример: `v_Test` Пример кода: ```cpp class TestClass { public: virtual void v_Test() = 0; }; ``` Лексическая единица: Параметр: Значение: Пример: Пример кода: ```cpp // ``` Параметр | Значение -------------------------------|---------------- Case | `` Prefix | `''` Suffix | `''` Пример кода до форматирования: ```cpp // ``` Пример кода после форматирования: ```cpp // ```