تخطَّ إلى المحتوى

الخطوط الحمراء واصطلاحات التسمية

1. توليد الهيكل فقط، دون التنفيذ

Section titled “1. توليد الهيكل فقط، دون التنفيذ”

ينتج codegen ارتباطات الرموز، وprops المُعدَّدة والأنواع، وثوابت القيم الافتراضية فقط. يُمنع توليد أي تنفيذ للواجهة —— لا توليد لأجسام Composable، ولا أجسام SwiftUI View، ولا أجسام مكوّنات ArkUI، ولا أجسام دوال المكوّنات في C. يبقى تنفيذ الواجهة بالكامل مكتوبًا يدويًا في كل مستودع أصلي.

هذا الخط الأحمر مكتوب في تعليق رأس ملف 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”

السلالتان مستقلتان، ويُمنع استيراد أي محتوى من الأخرى. القيم الأولية للرموز كانت بذرةً نُقلت يدويًا مرة واحدة، دون إنشاء أي تبعية تلقائية.

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.

تفرض كل طبقة قيودًا صارمة عبر التعابير القياسية:

الطبقة الحقل القاعدة
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