آموزش Ruff: لینتر و فرمت‌کننده فوق‌سریع پایتون با زبان Rust

معرفی Ruff، ابزار متن‌باز و فوق‌سریع برای لینت و فرمت کد پایتون که جایگزین ابزارهایی مثل Flake8 و Black شده و سرعت توسعه را متحول می‌کند.

🎧 خلاصه صوتی مقاله (پادکست ۲ دقیقه‌ای):

فرصت مطالعه ندارید؟ چکیده این مطلب را همین‌جا گوش دهید:

ابزار Ruff یک لینتر (Linter) و فرمت‌کننده (Formatter) بسیار سریع برای زبان برنامه‌نویسی پایتون است که به‌طور کامل با زبان Rust نوشته شده و هدف آن جایگزینی ابزارهای سنتی و کند با یک راه‌حل یکپارچه است. توسعه‌دهندگان پایتون اغلب با ابزارهای مختلفی مانند Flake8 برای بررسی خطاها، isort برای مرتب‌سازی ایمپورت‌ها و Black برای قالب‌بندی کدها کار می‌کنند؛ اما اجرای تک‌تک این ابزارها روی پروژه‌های بزرگ می‌تواند زمان‌بر باشد. Ruff با سرعت شگفت‌انگیز خود (که بین ۱۰ تا ۱۰۰ برابر سریع‌تر از ابزارهای موجود است) این مشکل را حل کرده و تمام قابلیت‌ها را در قالب یک ابزار واحد با پشتیبانی از بیش از ۹۰۰ قانون داخلی ارائه می‌دهد.

ویژگی‌های کلیدی و مزایای استفاده از Ruff

رَف توانسته است جایگزین مستقیم و سازگاری با ابزارهای محبوب اکوسیستم پایتون ایجاد کند. این پروژه توسط شرکت Astral توسعه یافته و در پروژه‌های بزرگ متن‌باز مانند FastAPI و Pandas استفاده می‌شود. برخی از ویژگی‌های برجسته آن شامل موارد زیر است:

  • سرعت فوق‌العاده: پیاده‌سازی کامل به زبان Rust باعث شده تا بررسی کدهای بزرگ تنها در کسری از ثانیه انجام شود.
  • سیستم کش داخلی: برای جلوگیری از تحلیل مجدد فایل‌هایی که تغییر نکرده‌اند، کش داخلی قدرتمندی دارد.
  • اصلاح خودکار (Fix Support): ارورهایی مانند ایمپورت‌های استفاده‌نشده را می‌توانید به‌صورت خودکار با یک دستور برطرف کنید.
  • سازگاری گسترده: پشتیبانی کامل از نسخه‌های پایتون و هماهنگی با فایل‌های پیکربندی رایج مانند pyproject.toml.
  • پشتیبانی از ۹۰۰+ قانون: بازنویسی بومی پلاگین‌های محبوب Flake8 در دل خود ابزار.
مشخصاتجزئیات
نام ابزارRuff
زبان برنامه‌نویسیRust
مجوز (License)MIT
نوع محصولمتن‌باز و رایگان
وضعیت دسترسیقابل دسترس (بدون محدودیت)

راهنمای نصب Ruff

برای نصب رَف روش‌های متنوعی وجود دارد. اگر از مدیریت پکیج مدرن پایتون استفاده می‌کنید، دستورات زیر را در ترمینال اجرا کنید:

# نصب سراسری با ابزار uv
uv tool install ruff@latest

# یا افزودن به عنوان وابستگی توسعه در پروژه
uv add --dev ruff

# نصب با pip
pip install ruff

همچنین می‌توانید از نصب‌کننده‌های مستقیم برای لینوکس، مک یا ویندوز استفاده کنید:

# در لینوکس و مک‌اوس
curl -LsSf https://astral.sh/ruff/install.sh | sh

# در ویندوز (PowerShell)
powershell -c "irm https://astral.sh/ruff/install.ps1 | iex"

نحوه استفاده از دستورات Ruff

پس از نصب، می‌توانید از دستورات زیر برای بررسی خطاها (Lint) و فرمت کردن کدها استفاده کنید. این دستورات به جای ابزارهای قدیمی، چرخه توسعه شما را بسیار سریع‌تر می‌کنند؛ مشابه آنچه در ابزارهای متن‌باز برنامه‌نویسی تجربه می‌کنید:

# بررسی تمام فایل‌ها در دایرکتوری جاری
ruff check .

# اصلاح خودکار خطاها
ruff check --fix .

# فرمت کردن تمام فایل‌ها
ruff format .

پیکربندی پیشرفته با pyproject.toml

برای شخصی‌سازی رفتار Ruff، کافی است در فایل pyproject.toml پروژه خود، تنظیمات زیر را اضافه کنید. این کار به شما کمک می‌کند استاندارد مشخصی برای کل تیم تعریف کنید:

[tool.ruff]
# نادیده گرفتن پوشه‌های غیرضروری
exclude = [".venv", "build", "dist"]
line-length = 88
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "I"]
fixable = ["ALL"]

[tool.ruff.format]
quote-style = "double"

پرسش‌های متداول

آیا Ruff می‌تواند به طور کامل جایگزین Flake8 و Black شود؟

بله، Ruff به گونه‌ای طراحی شده که با تمامی قابلیت‌های این ابزارها سازگاری کامل داشته باشد و همه را در یک پکیج واحد ارائه دهد.

آیا استفاده از این ابزار در پروژه‌های تجاری رایگان است؟

بله، این پروژه تحت مجوز آزاد MIT منتشر شده و استفاده از آن در پروژه‌های شخصی و تجاری کاملاً رایگان است.

چگونه می‌توان از Ruff در CI/CD استفاده کرد؟

با استفاده از نقشه راه بهینه‌سازی وب، می‌توانید از Ruff-action در گیت‌هاب استفاده کنید تا کدها قبل از Merge شدن به‌صورت خودکار بررسی شوند.

جمع‌بندی

Ruff استانداردهای کیفی و سرعت تحلیل کد در پایتون را متحول کرده است. با نوشتن این ابزار به زبان Rust، زمان انتظار برای اجرای لینترها عملاً به صفر رسیده است. اگر به دنبال راهی برای تمیز کردن خودکار کدها و افزایش سرعت توسعه هستید، همین امروز Ruff را به پروژه خود اضافه کنید.

مشاهده‌ی پروژه در GitHub

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *