Документация
Docs/ru/reference/prototype-format/validation.md
Валидация формата прототипов
Сгенерированный справочник. Не редактируйте напрямую. Обновите
BuildTools/PrototypeFormatInterface.jsonили владеющие метаданные движка, затем запуститеpython BuildTools/docs_prototype_format.py --write.
| Индекс | Синтаксис | Свойства | Валидация | Каноническая JSON-модель | Руководство |
Эти правила обеспечиваются parser, registrators метаданных, serializer свойств или side-specific bake прототипов. Стабильные ID позволяют CI отслеживать изменения контракта.
| Стабильный ID | Правило | Требование | Примечания | Авторитетный источник |
|---|---|---|---|---|
prototype-format.rule.config-syntax |
Синтаксис конфигурации | Используйте повторяемые INI-подобные секции, присваивания key = value, комментарии #, продолжение конечным обратным слешем после whitespace и добавление key += value, где оно уместно. | Файлы прототипов используют общий parser ConfigFile; символы комментария в кавычках или после экранирования остаются частью значения. | Source/Common/ConfigFile.cpp |
prototype-format.rule.file-filter |
Фильтр расширений | В ProtoBaker попадают только файлы, чьё расширение входит в Baking.ProtoFileExtensions. | Каталоги и условные имена расширений не выбирают тип прототипа; его выбирает секция. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.identity-per-type |
Идентичность и дубликаты | ID прототипа после миграции должен быть уникален внутри разрешённого типа во всём входе pack. | Один текстовый ID может существовать в разных типах прототипов; дубликаты в одном типе приводят к ошибке bake. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.identifier-characters |
Зарезервированные символы ID | ID прототипов не могут содержать / или $, поскольку оба символа зарезервированы для адресации вложенных секций. | Baker отклоняет оба символа после применения fallback к имени файла и до хеширования или проверки дубликатов. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.inheritance-scope |
Область наследования | Каждый родитель должен разрешаться внутри того же типа прототипа и текущего входа pack. | Родители могут быть объявлены в другом файле, но родитель другого типа или отсутствующий родитель приводят к ошибке bake. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.inheritance-precedence |
Приоритет наследования | Объединяйте предков в глубину, затем родителей слева направо и дочерний прототип последним; поздние значения свойств заменяют ранние. | Управляющие директивы с префиксом $ не копируются в объединённую карту свойств. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.acyclic-inheritance |
Ациклическое наследование | Граф родителей прототипов должен быть ациклическим. | ProtoBaker и ProtoTextBaker отслеживают active parent path и отклоняют self-cycle, парный и более длинные циклы при любой repeated-parent policy. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.repeated-ancestors |
Повторяющиеся ancestors | Parent, достигнутый по нескольким inheritance paths, добавляет поля только при первом достижении; Baking.AllowRepeatedProtoParents определяет, пропустить или отклонить поздний повтор. | Default permissive; задайте option false, если проект должен отклонять каждый inheritance diamond. ProtoBaker и ProtoTextBaker применяют одно правило. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.property-resolution |
Разрешение свойств | Каждый неуправляющий ключ должен разрешаться в свойство, доступное текущей стороне bake. | Неизвестные, отключённые для стороны, virtual и temporary свойства отклоняются; свойства только противоположной стороны пропускаются для этой стороны. | Source/Common/Properties.cpp |
prototype-format.rule.strict-values |
Строгие текстовые значения | Значения свойств должны разбираться согласно типу метаданных без переполнения, неизвестных enum или ссылок на прототипы, неконечных чисел и неверной структуры коллекций. | Авторитетным источником для текстовых значений scalar, enum, struct, array, dictionary, RefType, FixedType и Proto служит serializer свойств. | Source/Common/PropertiesSerializer.cpp |
prototype-format.rule.init-script-signature |
Сигнатуры callbacks InitScript | Непустое встроенное свойство InitScript у Item, Critter, Map или Location должно разрешаться в глобальный void callback, принимающий тип этой сущности и bool firstTime. | Server baking проверяет метаданные ScriptFuncType каждого заданного callback и до runtime отклоняет отсутствующие функции или несовпадающие сигнатуры. | Source/Tools/Baker.cpp |
prototype-format.rule.proto-reference |
Ссылки на прототипы | Ссылки свойств на сущности FixedType и Proto должны разрешаться после миграции, кроме nullable-свойства с пустым авторским значением. | Для удалённого или переименованного ID нужна явная миграция Proto на допустимую цель или Remove согласно владеющей политике persistence. | Source/Common/PropertiesSerializer.cpp |
prototype-format.rule.proto-migration |
Миграция прототипов | Правила миграции Proto применяются к объявленным ID, ID родителей, lookup и сохраняемым ссылкам до окончательного разрешения. | Задавайте миграции в нативных или проектных метаданных через ///@ MigrationRule Proto <Type> <Old> <NewOrRemove>. | Source/Tools/ProtoBaker.cpp |
prototype-format.rule.side-specific-output |
Выходы отдельных сторон | Один набор исходников отдельно разбирается и сериализуется для метаданных сервера, клиента и Mapper. | Исходное свойство может иметь смысл на одной стороне и пропускаться на другой; server output также проверяет свойства script callbacks. | Source/Tools/ProtoBaker.cpp |
Текущее ограничение диагностики
Граф родителей должен быть ациклическим. Текущий baker рекурсивно раскрывает родителей без отдельной диагностики цикла, поэтому встраивающим проектам следует проверять циклы до baking и держать цепочки наследования короткими. Это документированное ограничение реализации, а не поддержка циклического поведения.