الخطوط الحمراء واصطلاحات التسمية
ستة خطوط حمراء
Section titled “ستة خطوط حمراء”1. توليد الهيكل فقط، دون التنفيذ
Section titled “1. توليد الهيكل فقط، دون التنفيذ”ينتج codegen ارتباطات الرموز، وprops المُعدَّدة والأنواع، وثوابت القيم الافتراضية فقط. يُمنع توليد أي تنفيذ للواجهة —— لا توليد لأجسام Composable، ولا أجسام SwiftUI View، ولا أجسام مكوّنات ArkUI، ولا أجسام دوال المكوّنات في C. يبقى تنفيذ الواجهة بالكامل مكتوبًا يدويًا في كل مستودع أصلي.
هذا الخط الأحمر مكتوب في تعليق رأس ملف codegen/src/index.ts، وهو تصريح ذاتي من سلسلة الأدوات.
2. المصدر الأصلي الوحيد للرموز هو tokens/*.json
Section titled “2. المصدر الأصلي الوحيد للرموز هو tokens/*.json”لا تتجاوز أي منصة أو أي مكوّن هذا المستودع لتعيين قيم رموز خاصة بها. لا يجوز للمستودعات الأصلية سوى استهلاك منتجات dist/ أو الحزم المنشورة للمنصة المقابلة، ويُمنع كتابة قيم الألوان / المسافات / أحجام الخطوط يدويًا.
3. صفر JS في وقت التشغيل
Section titled “3. صفر JS في وقت التشغيل”كود TS في هذا المستودع يتواجد فقط ضمن سلسلة أدوات وقت البناء، ولا يجوز أن يظهر أي JavaScript في المنتجات.
4. يُمنع الاعتماد على lh-ui-share
Section titled “4. يُمنع الاعتماد على lh-ui-share”السلالتان مستقلتان، ويُمنع استيراد أي محتوى من الأخرى. القيم الأولية للرموز كانت بذرةً نُقلت يدويًا مرة واحدة، دون إنشاء أي تبعية تلقائية.
5. لا يجوز أن يحتوي JSON على صياغة خاصة بالمنصات
Section titled “5. لا يجوز أن يحتوي JSON على صياغة خاصة بالمنصات”لا يُسمح لقيم الرموز سوى بالتعبيرات المحايدة: الألوان السداسية عشرية / rgba() / القيم العددية الصافية تحت نوع number / سلاسل نصية بوحدات لأنواع dimension / duration / shadow ("12px" / "50%" / "200ms"، ويُفرض ذلك عبر assertTypedValue، راجع تنسيق الرموز). تُمنع var() وrem وsp وdp وأي وحدات أو مراجع خاصة بأي منصة. تحويل الوحدات بين المنصات من مسؤولية قوالب كل هدف (مثل الحكم على dp/sp في Android، والتحويل إلى ثوانٍ في iOS).
6. يُمنع التعديل اليدوي على dist/
Section titled “6. يُمنع التعديل اليدوي على dist/”أي تغيير يكون في 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 |
لا يخضع نطاق @lh-ui/* الخاص بـ npm / ohpm لهذا القيد (لأن npm لا يستخدم النطاق العكسي).
قواعد تسمية وحدات C الماكرو (macros)
Section titled “قواعد تسمية وحدات C الماكرو (macros)”zIndex.modal ← LH_Z_INDEX_MODAL: يُحوَّل . أولًا إلى شرطة سفلية، ثم تُضاف شرطة سفلية قبل كل حرف كبير، وأخيرًا تُحوَّل كل الأحرف إلى كبيرة. راجع منتجات C.
قيود تسمية JSON
Section titled “قيود تسمية JSON”تفرض كل طبقة قيودًا صارمة عبر التعابير القياسية:
| الطبقة | الحقل | القاعدة |
|---|---|---|
| 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 في المواصفات التي تحمل الاسم نفسه |
لغة التعليقات والتوثيق
Section titled “لغة التعليقات والتوثيق”تكون التعليقات والتوثيق ورسائل الالتزام (commit) بالصينية دائمًا (وفق متطلبات الخطة الرئيسية للعائلة).
Copyright © 2024-2026 FengMo WenXue