Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menyediakan Alat untuk Kualiti Kod

Menyediakan Alat untuk Kualiti Kod

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 05:47:02359semak imbas

Setting Up Tools for Code Quality

Apabila membangunkan ReadmeGenie, saya menyasarkan untuk memastikan kualiti kod yang konsisten dengan persediaan automatik untuk linting dan pemformatan. Selepas mempertimbangkan beberapa alat, saya memilih Ruff sebagai linter dan Hitam sebagai pemformat kod. Walaupun Ruff juga boleh mengendalikan linting dan pemformatan, saya memutuskan untuk menyediakan Hitam sebagai pemformat berasingan untuk mendapatkan pengalaman dengan konfigurasi kedua-dua alatan. Di bawah, saya akan berkongsi sebab saya memilih alatan ini, cara saya mengkonfigurasinya untuk projek saya, cabaran yang saya hadapi dan pelajaran yang saya pelajari sepanjang perjalanan.


1. Pemilihan Alat

Kenapa Ruff?

Ruff ialah linter pantas untuk Python yang menyokong pelbagai peraturan linting daripada linter lain (seperti Flake8 dan Pyflakes) dan menawarkan peningkatan prestasi yang ketara. Ia sangat boleh disesuaikan, yang membolehkan saya menentukan gabungan peraturan sambil memastikan keserasian dengan Hitam untuk pemformatan. Reka bentuk Ruff untuk kelajuan dan kebolehlanjutan adalah sesuai untuk projek yang mengutamakan kecekapan tanpa mengorbankan kualiti.

  • Dokumentasi Ruff: https://github.com/charliermarsh/ruff

Kenapa Hitam?

Hitam ialah pemformat Python yang menguatkuasakan satu gaya pemformatan dengan ketat, membantu mengurangkan perbincangan dan ketidakkonsistenan mengenai penggayaan kod. Walaupun Ruff menawarkan keupayaan pemformatan asas, pendekatan khusus Black memberikan beberapa kelebihan:

  • Ketekalan: Hitam menguatkuasakan gaya standard yang ketat yang meminimumkan perdebatan mengenai pemformatan kod.
  • Penggunaan Luas: Hitam digunakan secara meluas, menjadikannya lebih mudah untuk disepadukan ke dalam kebanyakan aliran kerja pembangunan, terutamanya dalam projek kerjasama.

  • Dokumentasi Hitam: https://github.com/psf/black

2. Persediaan Projek

Untuk memastikan Ruff dan Black berfungsi dengan lancar dalam ReadmeGenie, saya mengkonfigurasinya dalam kedua-dua pyproject.toml dan
.pre-commit-config.yaml, membenarkan pembangun memformat dan memasukkan kod secara automatik apabila membuat komitmen.

Konfigurasi untuk Ruff dan Black dalam pyproject.toml

Persediaan ini memastikan Ruff digunakan semata-mata untuk linting dan Hitam untuk pemformatan:

# pyproject.toml
# Set up black as formatter
[tool.black]
line-length = 88
target-version = ["py311"]

# Set up ruff as linter only
[tool.ruff]
# Exclude directories that don’t need linting (e.g., virtual environments)
exclude = [
    "venv/",
    "__pycache__/"
]
fix = true


# Enable specific linting rules
select = ["F", "E", "W", "B", "I", "S"]  # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety
# Exclude Black-compatible rules to avoid conflicts with Black's formatting.
ignore = ["E501", "E203", "E231"]  # Exclude Black-incompatible style issues
  • abaikan: Hitam mengendalikan penggayaan tertentu, jadi kami mengecualikan peraturan ini dalam Ruff.
  • betulkan: Membolehkan Ruff menyelesaikan isu jika boleh, meninggalkan pemformatan kepada Hitam.

Menambah Cangkuk Pra-komit untuk Ruff dan Hitam

Menggunakan cangkuk prakomit, saya mengkonfigurasi .pre-commit-config.yaml untuk menguatkuasakan linting dan pemformatan pada setiap komit:

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
      - id: black
  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.7.1
    hooks:
      - id: ruff

3. Menjalankan Ruff dan Black dari Barisan Perintah

Dengan persediaan di atas, anda boleh menggunakan arahan berikut:

  • Larikan Ruff:
# pyproject.toml
# Set up black as formatter
[tool.black]
line-length = 88
target-version = ["py311"]

# Set up ruff as linter only
[tool.ruff]
# Exclude directories that don’t need linting (e.g., virtual environments)
exclude = [
    "venv/",
    "__pycache__/"
]
fix = true


# Enable specific linting rules
select = ["F", "E", "W", "B", "I", "S"]  # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety
# Exclude Black-compatible rules to avoid conflicts with Black's formatting.
ignore = ["E501", "E203", "E231"]  # Exclude Black-incompatible style issues
  • Lari Hitam:
# .pre-commit-config.yaml
repos:
  - repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
      - id: black
  - repo: https://github.com/charliermarsh/ruff-pre-commit
    rev: v0.7.1
    hooks:
      - id: ruff

Arahan ini menggunakan pembetulan pada semua fail Python, memastikan penggayaan yang konsisten dan pemeriksaan kualiti.

4. Penyepaduan Kod VS

Untuk mengautomasikan Ruff dan Black semasa menyimpan, saya menambah konfigurasi berikut dalam .vscode/settings.json:

  ruff check . --fix

Persediaan ini menjadikan Black sebagai pemformat lalai dan Ruff satu-satunya linter aktif dalam Kod VS, membolehkan kedua-duanya dijalankan
secara automatik apabila disimpan.

5. Penemuan dan Pembaikan

Setelah dikonfigurasikan, Ruff dan Black mengenal pasti beberapa isu:

  • Panjang Baris (E501): Ruff pada mulanya membenderakan baris panjang, yang Hitam diformat secara automatik.
  • Import dan Pembolehubah Tidak Digunakan: Ruff menangkap beberapa import dan pembolehubah yang tidak digunakan.
  • Ketekalan Lekukan dan Penggayaan: Hitam digunakan jarak dan lekukan yang konsisten, meningkatkan kebolehbacaan.

6. Cabaran

Satu cabaran yang ketara ialah memahami bahawa sesetengah gaya tidak serasi antara Ruff dan Black. Contohnya:

  • Panjang Baris (E501): Ruff pada mulanya membenderakan baris panjang melebihi 88 aksara, yang dikendalikan oleh Hitam dengan membalut garisan. Untuk mengelakkan konflik, saya menambah E501 pada senarai abaikan Ruff. Walaupun begitu, kadangkala Ruff membenderakan ralat E501 jika Hitam tidak menggunakan titik putus yang dijangkakan. Percanggahan ini menekankan kepentingan melaraskan setiap alat konfigurasi dan pemahaman di mana ia mungkin bertindih.

7. Pengajaran

Menggunakan Ruff dan Black bersama-sama telah menjadi cara terbaik untuk meningkatkan kualiti kod. Inilah yang saya pelajari:

  • Ketekalan: Gaya pendapat Black mengurangkan kesamaran dalam penggayaan kod.
  • Automasi: Cangkuk prakomit menjimatkan masa dan memastikan pemformatan yang konsisten.
  • Penyepaduan Editor: Mengkonfigurasi Ruff dan Black untuk dijalankan pada simpan dalam pembangunan diperkemas Kod VS.
  • Keserasian: Mempelajari cara menyelesaikan konflik seperti E501 mengajar saya tentang konfigurasi alat dan membantu memperhalusi aliran kerja projek.

Atas ialah kandungan terperinci Menyediakan Alat untuk Kualiti Kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn