コンテンツにスキップ

レッドラインと命名規則

1. 骨組みのみを生成し、実装は生成しない

Section titled “1. 骨組みのみを生成し、実装は生成しない”

codegen はトークンのバインディング、props の列挙と型、デフォルト値の定数のみを生成します。いかなる UI 実装の生成も禁止——Composable の本体、SwiftUI View の本体、ArkUI コンポーネントの本体、C コンポーネント関数の本体は一切生成しません。UI 実装はすべて各ネイティブリポジトリで手書きします。

このレッドラインは codegen/src/index.ts のファイルヘッダーコメントに書かれており、ツールチェーンの自己宣言です。

2. トークンの唯一真源は tokens/*.json

Section titled “2. トークンの唯一真源は tokens/*.json”

いかなるプラットフォームも、いかなるコンポーネントも、このリポジトリを迂回して別のトークン値を定めてはなりません。各ネイティブリポジトリは dist/ 生成物か対応プラットフォームの公開済みパッケージのみを消費でき、色値 / 間隔 / フォントサイズの手書きは禁止されます。

このリポジトリの TS コードはビルド時のツールチェーンにしか存在せず、生成物の中に JavaScript が一つでもあってはなりません。

4. lh-ui-share に依存してはならない

Section titled “4. lh-ui-share に依存してはならない”

二つの血脈は互いに独立しており、相手のいかなる内容も import してはなりません。トークンの初期値は一回限りで手運搬されたシードであり、自動依存関係は一切構築しません。

5. JSON にプラットフォーム固有の構文を含めてはならない

Section titled “5. JSON にプラットフォーム固有の構文を含めてはならない”

トークン値が許されるのは中性な表現のみです:16 進数の色値 / rgba() / number 型の下での単なる数値 / dimension / duration / shadow の単位付き文字列("12px" / "50%" / "200ms"、assertTypedValue が強制、詳しくは トークンフォーマット)。var()、rem、sp、dp などのいかなるプラットフォーム固有の単位や参照も禁止します。プラットフォームの単位換算は各 target のテンプレートが責任を負います(Android の dp/sp 判定、iOS の秒への換算など)。

一切の変更は tokens/ / specs/ cases/ またはテンプレートに対して行い、それから pnpm codegen を再実行してください。dist/ は .gitignore 対象で、codegen は毎回削除してから再構築します。

命名規則(マスタープラン D20)

Section titled “命名規則(マスタープラン D20)”

プラットフォームのパッケージ名 / 識別子

Section titled “プラットフォームのパッケージ名 / 識別子”

プラットフォームのパッケージ名は一律にリバースドメイン 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/

自前の定数 / クラス / 列挙のプレフィックス

Section titled “自前の定数 / クラス / 列挙のプレフィックス”

一律に 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_*(すべて大文字のスネークケース) LH_COLOR_PRIMARY_DEFAULT、LH_Z_INDEX_MODAL

npm / ohpm の @lh-ui/* scope はこの制約の対象外です(npm はリバースドメインを使いません)。

zIndex.modal → LH_Z_INDEX_MODAL:まず . をアンダースコアに変え、次に各大文字の前にアンダースコアを補い、最後にすべて大文字にします。詳しくは C 生成物 を参照してください。

各層の schema が正規表現で命名を厳格に制約します:

層 フィールド ルール
spec name kebab-case:^[a-z][a-z0-9-]*$
spec component Lh プレフィックス付き PascalCase:^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 同名 spec の name と一致しなければならない

コメントとドキュメントの言語

Section titled “コメントとドキュメントの言語”

コメント、ドキュメント、コミットメッセージは一律に中国語(ファミリーのマスタープランの要求による)。

Copyright © 2024-2026 FengMo WenXue