> 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/id/panduan-pengembang/developer-guide/contributing/coding-conventions.md).

# Konvensi Pengkodean

## PHP

* **Standar**: Gaya pengkodean PSR-12
* **Deklarasi Tipe**: Gunakan deklarasi tipe dari PHP 8.2 (tipe parameter, tipe pengembalian, tipe properti)
* **Tipe Ketat**: Semua file PHP harus mendeklarasikan `strict_types=1`
* **Namespaces**: Ikuti autoloading PSR-4 (misalnya, `Chamilo\CoreBundle\Entity\User`)
* **Standar Symfony**: Ikuti standar pengkodean dan praktik terbaik Symfony

## JavaScript/Vue

* **ESLint + Prettier**: Kode diperiksa dengan ESLint dan diformat dengan Prettier; konfigurasi berada di `eslint.config.mjs` di root proyek. Plugin `prettier-plugin-tailwindcss` juga diaktifkan untuk pengurutan otomatis kelas Tailwind.
* **Composition API**: Gunakan sintaks `<script setup>` dari Vue 3 untuk komponen baru
* **TypeScript**: TypeScript didukung; gunakan untuk kode dengan keamanan tipe

## CSS

* **Tailwind CSS**: Lebih suka kelas utilitas daripada CSS kustom
* **Penamaan BEM**: Ketika CSS kustom diperlukan, gunakan konvensi penamaan BEM
* **SCSS**: Gunakan SCSS untuk lembar gaya yang kompleks

## Alat Analisis Statis dan Refaktorisasi PHP

Proyek ini mencakup konfigurasi untuk tiga alat tambahan:

| Alat        | File Konfigurasi | Tujuan                                                                       |
| ----------- | ---------------- | ---------------------------------------------------------------------------- |
| **PHPStan** | `phpstan.neon`   | Analisis statis (level 5, memindai direktori `src/` dan direktori pengujian) |
| **Psalm**   | `psalm.xml`      | Analisis statis kedua; dijalankan di CI pada setiap push                     |
| **Rector**  | `rector.php`     | Transformasi dan pembaruan kode otomatis                                     |

Jalankan melalui pintasan Composer: `composer phpstan`, `composer psalm`. Lihat [Pengujian](/2.x/id/panduan-pengembang/developer-guide/contributing/testing.md) untuk perintah lengkap.

## Umum

* **Bahasa Inggris**: Semua komentar kode, nama variabel, dan dokumentasi harus dalam bahasa Inggris
* **Terjemahan**: Semua teks yang ditujukan untuk pengguna harus menggunakan sistem terjemahan (Vue I18n untuk frontend, Symfony Translator untuk backend)
* **Tanpa Nilai Ajaib**: Gunakan konstanta atau enum alih-alih nilai yang dikodekan secara langsung
