Перейти к содержимому

Красные линии и соглашения об именовании

codegen генерирует только привязки токенов, перечисления и типы props, а также константы значений по умолчанию. Генерация любой реализации UI запрещена — не создаются тела Composable, тела SwiftUI View, тела компонентов ArkUI, тел компонентных функций C. Вся реализация UI остаётся ручной в каждом нативном репозитории.

Эта красная линия записана в комментарии-преамбуле файла codegen/src/index.ts — это самодекларация инструментария.

Ни одна платформа, ни один компонент не могут задавать значения токенов в обход этого репозитория. Нативные репозитории могут только потреблять артефакты dist/ или уже опубликованные пакеты соответствующих платформ; запрещено задавать цвета, отступы и размеры шрифтов вручную.

TS-код репозитория существует только в инструментарии сборки; в артефактах не должно быть ни одного JavaScript.

Два направления полностью независимы и не могут импортировать ничего друг у друга. Начальные значения токенов были перенесены вручную как одноразовое семя, никакой автоматической зависимости не создаётся.

5. В JSON не должно быть платформо-специфичного синтаксиса

Заголовок раздела «5. В JSON не должно быть платформо-специфичного синтаксиса»

Значения токенов допускают только нейтральное представление: шестнадцатеричные цвета / rgba() / чистые числа при типе number / строки с единицами для dimension / duration / shadow ("12px" / "50%" / "200ms", что контролируется assertTypedValue; подробности в Формат токенов). Запрещены var(), rem, sp, dp и любые другие платформо-специфичные единицы или ссылки. Преобразование платформенных единиц лежит на шаблонах target’ов (например, определение dp/sp для Android, преобразование в секунды для iOS).

Любые изменения вносятся в tokens/ / specs/ / cases/ или в шаблоны, после чего pnpm codegen перезапускается. dist/ находится в .gitignore, каждый запуск codegen сначала удаляет, потом создаёт каталог заново.

Соглашения об именовании (генеральный план D20)

Заголовок раздела «Соглашения об именовании (генеральный план D20)»

Имя пакета платформы всегда строится как обратный домен top.lhgb.ui:

Платформа Имя пакета / идентификатор
Android package top.lhgb.ui.tokens, каталог артефактов dist/android/top/lhgb/ui/tokens/
iOS Sources/LhUITokens/ (соглашение о каталогах SwiftPM)
HarmonyOS tokens/ (внутри модуля ohpm)
C include/lh_ui/

Префикс собственных констант / классов / перечислений

Заголовок раздела «Префикс собственных констант / классов / перечислений»

Всегда префикс LH с регистром по соглашениям каждого языка:

Язык Соглашение Пример
Kotlin Lh* (PascalCase) object LhTokens, object LhDarkTokens
Swift Lh* (PascalCase) public enum LhTokens, struct LhShadow
ArkTS Lh* (PascalCase) export class LhTokens, interface LhShadow
C LH_* (ВЕРХНИЙ_РЕГИСТР_SNAKE) LH_COLOR_PRIMARY_DEFAULT, LH_Z_INDEX_MODAL

Scope @lh-ui/* в npm / ohpm этому правилу не подчиняется (npm не использует обратные домены).

zIndex.modal → LH_Z_INDEX_MODAL: сначала каждая . заменяется на подчёркивание, затем перед каждой заглавной буквой добавляется подчёркивание, после чего всё переводится в верхний регистр. Подробности в Артефакты C.

Схема каждого уровня строго ограничивает именование с помощью регулярных выражений:

Уровень Поле Правило
spec name kebab-case: ^[a-z][a-z0-9-]*$
spec component PascalCase с префиксом Lh: ^Lh[A-Z][a-zA-Z0-9]*$
spec имя prop camelCase: ^[a-z][a-zA-Z0-9]*$
spec имя event ^on[A-Z][a-zA-Z0-9]*$
case id kebab-case
case component должен совпадать с name спецификации с тем же именем

Комментарии, документация и сообщения коммитов всегда пишутся на китайском (требование генерального плана семейства).

Copyright © 2024-2026 FengMo WenXue