Menulis patch yang bagus

Tulis perubahan terpisah

Sungguh menyebalkan ketika Anda mendapatkan patch besar yang katanya memperbaiki 11 masalah aneh, tetapi diskusi dan opini tidak setuju dengan 10 di antaranya atau 9 di antaranya sudah diperbaiki dengan cara berbeda. Lalu, orang yang menggabungkan perubahan ini perlu mengekstrak satu patch yang menarik dari suatu tempat di antara tumpukan sumber yang sangat banyak, dan itu menciptakan banyak pekerjaan tambahan.

Sebaiknya, setiap perbaikan yang mengatasi masalah harus ada dalam patch/komitnya sendiri dengan deskripsi/pesan komitnya sendiri yang menyatakan dengan tepat apa yang diperbaiki sehingga semua perubahan dapat diterapkan secara selektif oleh pemelihara atau pihak berkepentingan lainnya.

Lebih jauh lagi, perubahan yang terpisah mengaktifkan pembagian menjadi dua bagian dengan lebih baik untuk melacak isu dan regresi di masa mendatang.

Dokumentasi

Dokumentasi dapat menjadi tugas yang membosankan; namun, dibutuhkan seseorang untuk menyelesaikannya. Akan jauh lebih mudah jika Anda mengirimkan dokumentasi beserta perubahan kode. Harap ingat untuk mendokumentasikan metode, blok kode yang kompleks, atau fitur yang terlihat oleh pengguna.

Kasus uji

Pengujian ini memungkinkan kami untuk dengan cepat memverifikasi bahwa fitur berfungsi sebagaimana mestinya. Untuk mempertahankan dan meningkatkan kondisi ini, semua fitur dan fungsi baru yang ditambahkan perlu diuji dalam rangkaian pengujian. Setiap fitur yang ditambahkan harus mendapatkan setidaknya satu kasus uji valid yang memverifikasikan bahwa fitur tersebut berfungsi sebagaimana mestinya.

Pesan komit

Komit Git harus mengikuti spesifikasi Komit Konvensional.

Pemeriksaan jenis

Any new code should utilize PEP 484 type hints. We are using mypy to check them because it has a Django plugin that makes type checking of Django apps practical.

New and changed code should not introduce new mypy failures where current Django typing support makes that practical. The code base is not yet completely covered by type annotations, and some Django constructs are difficult to annotate precisely. CI therefore enforces mypy only for selected modules and reports other findings separately.

Standar pengkodean dan linting kode

Kode harus mengikuti pedoman pengkodean PEP 8 dan harus diformat menggunakan pemformat kode ruff.

Untuk memeriksa kualitas kode, Anda dapat menggunakan ruff, konfigurasinya disimpan di pyproject.toml.

The easiest approach to enforce all this is to install prek. This is a third-party reimplementation of the pre-commit tool used by Weblate. It is included in the development dependencies declared in pyproject.toml, so installing those dependencies makes prek available.

To check all files manually, run:

uv run prek run --all-files

If you prefer the original pre-commit client, it uses the same configuration from .pre-commit-config.yaml.

Pengkodean yang aman

Kode apa pun untuk Weblate harus ditulis dengan mempertimbangkan Prinsip Desain Keamanan.

Pedoman AI

Dengan berkontribusi pada proyek ini, Anda memberi kami izin untuk menggunakannya sebagaimana adanya, dan Anda harus memastikan bahwa Anda diizinkan untuk mendistribusikannya kepada kami. Dengan mengirimkan perubahan kepada kami, Anda setuju bahwa perubahan tersebut dapat dan harus diadopsi oleh proyek dan didistribusikan ulang di bawah lisensi proyek. Penulis harus secara tegas menyadari bahwa mereka bertanggung jawab untuk memastikan tidak ada kode tanpa lisensi yang dikirimkan ke proyek.

Hal ini terlepas dari apakah AI digunakan atau tidak.

Saat berkontribusi pada permintaan penarikan, tentu saja Anda harus selalu memastikan proposal tersebut berkualitas baik dan telah diupayakan sebaik mungkin sesuai dengan pedoman kami. Aturan praktisnya adalah jika seseorang dapat mengetahui bahwa kontribusi tersebut dibuat dengan bantuan AI, Anda masih perlu melakukan lebih banyak hal.

Kami dapat menerima kode yang ditulis dengan bantuan AI ke dalam proyek, tetapi kode tersebut tetap harus mengikuti standar pengkodean, ditulis dengan jelas, didokumentasikan, menampilkan kasus uji, dan mematuhi semua persyaratan normal yang kita miliki.