= Проверка именования в 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;
}
----
