Ruff va Pre-commit: Python Kod Tekshirishni Avtomatlashtirish

Muallif: Javohir Abdullayev · · Python

Ruff va Pre-commit: Python Kod Tekshirishni Avtomatlashtirish

Dasturchi Vaqtini Tejash: Kod Sifatini Avtomatlashtirish

Har bir Python dasturchisi kod yozish jarayonida formatlash xatolari, tartibsiz importlar yoki e'tibordan chetda qolgan sintaktik kamchiliklarga duch keladi. Ilgari bu muammolarni hal qilish uchun loyihaga bir nechta alohida vositalar o'rnatilar edi: formatlash uchun Black, importlarni saralash uchun isort va xatolarni topish uchun Flake8. Biroq, bu vositalarni alohida ishga tushirish vaqt oladi va yirik loyihalarda tekshiruv jarayoni sezilarli darajada sekinlashadi.

Ushbu maqolada Rust tilida yozilgan, an'anaviy vositalardan 10 dan 100 baravargacha tez ishlaydigan Ruff linteri hamda uni Git bilan bog'lovchi Pre-commit tizimini ko'rib chiqamiz. Bu kombinatsiya loyihangiz sifatini oshiradi va vaqtingizni sezilarli tejaydi.

Ruff Nima va Nega U Shunchalik Mashhur?

Ruff — bu Python ekotizimi uchun yaratilgan yangi avlod linteri va kod formatlagichi hisoblanadi. Uning asosiy ustunligi tezligidadir. Rust tili imkoniyatlaridan foydalangani sababli u soniyaning kichik ulushlarida o'n minglab qator kodni tekshirishga qodir.

Ruff quyidagi vositalarning o'rnini bir o'zi bosadi:

  • Flake8 va uning o'nlab plaginlari
  • Black formatlagichi
  • isort import saralagichi
  • pyupgrade yangi sintaksisga o'tkazish vositasi

Pre-commit: Xatolarni Omborga Kiritmaslik Usuli

Pre-commit — bu Git hook boshqaruv tizimi bo'lib, har gal dasturchi git commit buyrug'ini berganida avtomatik ravishda belgilangan tekshiruvlarni amalga oshiradi. Agar kodda xato bo'lsa yoki format buzilgan bo'lsa, commit qabul qilinmaydi va vosita kodni o'zi to'g'irlab beradi. Bu esa jamoada kod tozaligini saqlashda qo'l mehnati va inson omilini kamaytiradi.

Amaliy Qo'llanma: Loyihaga Ruff va Pre-commit O'rnatish

Keling, yangi yoki mavjud loyihangizda ushbu vositalarni noldan sozlashni ko'rib chiqamiz.

1. Kerakli Paketlarni O'rnatish

Terminal orqali virtual muhitingizga (virtualenv, poetry yoki pipenv) vositalarni o'rnating:

pip install ruff pre-commit

2. .pre-commit-config.yaml Faylini Yaratish

Loyihaning ildiz papkasida .pre-commit-config.yaml nomli fayl yarating va unga quyidagi konfiguratsiyani kiriting:

repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.4.4
    hooks:
      # Xatolarni tekshirish va avtomatik to'g'irlash
      - id: ruff
        args: [--fix]
      # Kodni Black uslubida formatlash
      - id: ruff-format

3. Ruff Sozlamalarini pyproject.toml Fayliga Qo'shish

Ruff sozlamalarini boshqarish uchun pyproject.toml faylidan foydalanish eng to'g'ri amaliyot hisoblanadi. Loyihangiz talabiga ko'ra qator uzunligi va tekshiruv qoidalarini belgilang:

[tool.ruff]
line-length = 88
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I", "UP"]
ignore = ["E501"]

Bu yerda E va F sintaksis hamda mantiqiy xatolar, I importlar tartibi (isort), UP esa zamonaviy Python sintaksisini (pyupgrade) nazorat qiladi.

4. Hooklarni Faollashtirish

Sozlamalar tayyor bo'lgach, Git hooklarini faollashtiring:

pre-commit install

Endi har safar kod o'zgartirilib, commit qilinayotganda Ruff chaqmoqdek tezlikda ishga tushadi, keraksiz bo'shliqlarni olib tashlaydi, importlarni alifbo tartibida to'g'irlaydi va yashirin xatolarni aniqlaydi.

Barcha Fayllarni Bir Yo'la Tozalash

Agar siz ushbu vositani eski loyihaga qo'shgan bo'lsangiz, birinchi marta barcha mavjud fayllarni tozalab olish tavsiya etiladi. Buning uchun quyidagi buyruqni bering:

pre-commit run --all-files

Xulosa va Samaradorlik

Ruff va Pre-commit kombinatsiyasini joriy qilish dasturchiga vaqtni bekorchi formatlash bahslariga emas, balki loyiha biznes mantiqiga qaratish imkonini beradi. Tezkor qayta aloqa xatolarning erta bosqichda aniqlanishini ta'minlaydi, bu esa frilans loyihalarda ham, yirik jamoaviy muhitda ham ish unumdorligini kamida ikki barobarga oshiradi.

Teglar: #python #pre-commit #ruff #kod sifati #avtomatlashtirish