dsp-site/wiki/Prog/Lang/CPP/Проверка именования в Clang Tidy.md
2019-04-20 23:24:14 +03:00

1182 lines
28 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 <typename T1> class TestClass {
T1 __v;
};
```
Лексическая единица: Суффикс имени шаблонного типа
Параметр: readability-identifier-naming.TypeTemplateParameterSuffix
Значение: '' (было '\_t')
Пример:
Пример кода:
```cpp
template <typename T1> 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
//
```