# V1102. Unreal Engine. Violation of naming conventions may cause Unreal Header Tool to work incorrectly.

Анализатор обнаружил объявление сущности, несоответствующей соглашениям о наименованиях для проектов, основанных на Unreal Engine. Соответствие этому соглашению требуется для корректной работы Unreal Header Tool.

Примечание. Анализатор применяет диагностическое правило только на тех анализируемых файлах, в которых обнаружено включение заголовочных файлов из Unreal Engine. Если вы хотите принудительно применить правило для произвольного файла, воспользуйтесь следующим механизмом.

Далее приведен перечень соглашений, поддерживаемых этим диагностическим правилом.

Имена классов, наследуемых от 'UObject', следует начинать с префикса 'U':

    class USomeClass : public UObject
    {
      ....
    };

Имена классов, наследуемых от 'AActor', следует начинать с префикса 'A':

    class ASomeActor : public AActor
    {
      ....
    };

Имена классов, наследуемых от 'SWidget', следует начинать с префикса 'S':

    class SSomeWidget : public SWidget
    {
      ....
    };

Имена абстрактных классов / интерфейсов следует начинать с префикса 'I':

    class IAbstractClass
    {
    public:
      virtual void DoSmth() = 0;
    };

Перечисления следует начинать с префикса 'E':

    enum class ESomeEnum
    {
      ....
    };

Имена шаблонов классов следует начинать с префикса 'T':

    template <typename T>
    class TClassTemplate
    {
      ....
    };

Остальные классы следует начинать с префикса 'F':

    class FSimpleClass
    {
      ....
    };

Префикс типа и соответствующего ему псевдонима должны совпадать. Псевдоним инстанцированного шаблона следует помечать как конкретную сущность:

    // usings
    using UGameUIPolicy = USomeClass;
    using AAIController = ASomeActor;
    using SActorCanvas  = SSomeWidget;
    using EColorBits    = ESomeEnum;
    using FArrowSlot    = FSimpleClass;

    template <typename T>
    using TMyArray = TClassTemplate<T>;

    using FMyArrayFloat = TClassTemplate<float>;
    using FMyArrayInt   = TMyArray<int>;

    // typedefs
    typedef USomeClass   UGameUIPolicy;
    typedef ASomeActor   AAIController;
    typedef SSomeWidget  SActorCanvas;
    typedef ESomeEnum    EColorBits;
    typedef FSimpleClass FArrowSlot;

    typedef TClassTemplate<int>   FMyArrayInt;
    typedef TClassTemplate<float> FMyArrayFloat;

Анализатор будет выдавать предупреждение на любое нарушение указанных выше соглашений:

    class GameUIPolicy: public UObject { .... };

    class BoxActor : public AActor { .... };

    class WidgetButton : public SWidget { .... };

    class Weapon
    {
    public:
      virtual void Shoot() = 0;
    };

    enum class Texture { .... };

    class Enemy { .... };

    template <typename T>
    class DoubleLinkedList { .... };

    typedef DoubleLinkedList<Enemy> EnemyList;

Исправленные примеры:

    class UGameUIPolicy: public UObject { .... };

    class ABoxActor : public AActor { .... };

    class SWidgetButton : public SWidget { .... };

    class IWeapon
    {
    public:
      virtual void Shoot() = 0;
    };

    enum class ETexture { .... };

    class FEnemy { .... };

    template <typename T>
    class TDoubleLinkedList { .... };

    typedef DoubleLinkedList<Enemy> FEnemyList;