= Проверка именования в 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<typename TType> int tFunction(TType t_value) {
        return 0;
}
----

Пример кода после форматирования:

[source,cpp]
----
template<typename TType> int tFunction(TType tValue) {
        return 0;
}
----

=== ParameterPack (Список параметров шаблона)

[cols=",",options="header",]
|===
| Параметр                        | Значение
| ParameterPackCase               | `camelBack`
| ParameterPackPrefix             | `''`
| ParameterPackSuffix             | `''`
|===

Пример кода до форматирования:

[source,cpp]
----
template<class ... Types> void f(Types ... Parameters_Pack);
----

Пример кода после форматирования:

[source,cpp]
----
template<class ... Types> void f(Types ... parametersPack);
----

=== TemplateTemplateParameter (Параметр шаблона шаблона)

[cols=",",options="header",]
|===
| Параметр                        | Значение
| TemplateTemplateParameterCase   | `camelBack`
| TemplateTemplateParameterPrefix | `''`
| TemplateTemplateParameterSuffix | `''`
|===

Пример кода до форматирования:

[source,cpp]
----
template<template<class T> class TPL_TPL_Parameter>
class AllmightyClass { };
----

Пример кода после форматирования:

[source,cpp]
----
template<template<class T> class tplTplParameter>
class AllmightyClass { };
----

=== TypeTemplateParameter (Типа параметра шаблона)

[cols=",",options="header",]
|===
| Параметр                        | Значение
| TypeTemplateParameterCase       | `CamelCase`
| TypeTemplateParameterPrefix     | `''`
| TypeTemplateParameterSuffix     | `''`
|===

Пример кода до форматирования:

[source,cpp]
----
template<typename t_type>int tFunction(t_type value) {
        return 0;
};
----

Пример кода после форматирования:

[source,cpp]
----
template<typename TType>int tFunction(TType value) {
        return 0;
};
----

=== ValueTemplateParameter (Значение параметра шаблона)

[cols=",",options="header",]
|===
| Параметр                        | Значение
| ValueTemplateParameterCase      | `camelBack`
| ValueTemplateParameterPrefix    | `''`
| ValueTemplateParameterSuffix    | `''`
|===

Пример кода до форматирования:

[source,cpp]
----
template<typename TType, int arg_count> int tFunction(TType tValue) {
        return 0;
}
----

Пример кода после форматирования:

[source,cpp]
----
template<typename TType, int argCount> int tFunction(TType tValue) {
        return 0;
}
----