> For the complete documentation index, see [llms.txt](https://docs.chamilo.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.chamilo.org/2.x/ar/dlyl-almtwr/developer-guide/contributing/coding-conventions.md).

# Coding Conventions

## PHP

* **المعيار**: نمط ترميز PSR-12
* **إعلانات الأنواع**: استخدم إعلانات الأنواع في PHP 8.2 (أنواع المعاملات، أنواع الإرجاع، أنواع الخصائص)
* **الأنواع الصارمة**: يجب أن تعلن جميع ملفات PHP `strict_types=1`
* **المساحات الاسمية**: اتبع التحميل التلقائي PSR-4 (مثال: `Chamilo\CoreBundle\Entity\User`)
* **معايير Symfony**: اتبع معايير الترميز وأفضل الممارسات في Symfony

## JavaScript/Vue

* **ESLint + Prettier**: يتم فحص الشفرة باستخدام ESLint وتنسيقها باستخدام Prettier؛ الإعدادات موجودة في `eslint.config.mjs` في جذر المشروع. كما يتم تمكين `prettier-plugin-tailwindcss` لترتيب فئات Tailwind تلقائيًا.
* **واجهة البرمجة التكوينية**: استخدم بنية `<script setup>` في Vue 3 للمكونات الجديدة
* **TypeScript**: يتم دعم TypeScript؛ استخدمه للشفرة الآمنة من حيث الأنواع

## CSS

* **Tailwind CSS**: فضّل فئات المرافق على CSS المخصص
* **تسمية BEM**: عند الحاجة إلى CSS مخصص، استخدم اتفاقية تسمية BEM
* **SCSS**: استخدم SCSS لأوراق الأنماط المعقدة

## أدوات التحليل الثابت وإعادة الهيكلة لـ PHP

يأتي المشروع مع إعدادات لثلاث أدوات إضافية:

| Tool        | Config file    | Purpose                                                  |
| ----------- | -------------- | -------------------------------------------------------- |
| **PHPStan** | `phpstan.neon` | التحليل الثابت (المستوى 5، يفحص `src/` ومجلدات الاختبار) |
| **Psalm**   | `psalm.xml`    | جولة ثانية من التحليل الثابت؛ تعمل في CI عند كل دفع      |
| **Rector**  | `rector.php`   | تحويلات الشفرة التلقائية والترقيات                       |

شغّلها عبر اختصارات composer: `composer phpstan`، `composer psalm`. انظر [Testing](/2.x/ar/dlyl-almtwr/developer-guide/contributing/testing.md) للحصول على الأوامر الكاملة.

## عام

* **الإنجليزية**: يجب أن تكون جميع تعليقات الشفرة، وأسماء المتغيرات، والوثائق باللغة الإنجليزية
* **الترجمات**: يجب أن تستخدم جميع النصوص المواجهة للمستخدم نظام الترجمة (Vue I18n للواجهة الأمامية، Symfony Translator للواجهة الخلفية)
* **لا قيم سحرية**: استخدم الثوابت أو التعدادات بدلاً من القيم المبرمجة مسبقًا
