# 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 للواجهة الخلفية)
* **لا قيم سحرية**: استخدم الثوابت أو التعدادات بدلاً من القيم المبرمجة مسبقًا


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.chamilo.org/2.x-ar/dlyl-almtwr/developer-guide/contributing/coding-conventions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
