مستندات | ملعب
أداة سريعة للغاية لتنسيق Python وتنسيق التعليمات البرمجية، مكتوبة بلغة Rust.
فحص قاعدة بيانات CPython من البداية.
pip
pyproject.toml
يهدف Ruff إلى أن يكون أسرع من الأدوات البديلة مع دمج المزيد من الوظائف خلف واجهة واحدة مشتركة.
يمكن استخدام Ruff لاستبدال Flake8 (بالإضافة إلى العشرات من المكونات الإضافية)، وBlack، وisort، وpydocstyle، وpyupgrade، وautoflake، والمزيد، كل ذلك أثناء تنفيذ أسرع بعشرات أو مئات المرات من أي أداة فردية.
تم تطوير Ruff بشكل نشط للغاية واستخدامه في المشاريع الكبرى مفتوحة المصدر مثل:
... وغيرها الكثير.
راف مدعوم من أسترال. اقرأ منشور الإطلاق، أو إعلان المشروع الأصلي.
سيباستيان راميريز ، مبتكر FastAPI:
يعمل Ruff بسرعة كبيرة لدرجة أنني أحيانًا أقوم بإضافة خطأ متعمد في الكود فقط للتأكد من أنه قيد التشغيل فعليًا والتحقق من الكود.
نيك شروك ، مؤسس Elementl، أحد مؤسسي GraphQL:
لماذا يعتبر روف مُغيرًا لقواعد اللعبة؟ في المقام الأول لأنه أسرع بما يقرب من 1000x. حرفياً. ليس خطأ مطبعي. في أكبر وحدة لدينا (dagster نفسها، 250k LOC) تستغرق البيلنت حوالي 2.5 دقيقة، بالتوازي عبر 4 مراكز على جهاز M1 الخاص بي. يستغرق تشغيل ruff على قاعدة التعليمات البرمجية بأكملها 0.4 ثانية.
بريان فان دي فين ، أحد مؤسسي Bokeh، المؤلف الأصلي لكتاب Conda:
يعد Ruff أسرع بحوالي 150-200 مرة من flake8 على جهازي، ويستغرق مسح الريبو بأكمله حوالي 0.2 ثانية بدلاً من 20 ثانية تقريبًا. يعد هذا تحسينًا هائلاً لنوعية الحياة بالنسبة للمطورين المحليين. إنه سريع بما فيه الكفاية لدرجة أنني أضفته كخطاف التزام فعلي، وهو أمر رائع.
تيموثي كروسلي مبتكر isort:
لقد قمت للتو بتحويل مشروعي الأول إلى Ruff. جانب سلبي واحد فقط حتى الآن: إنه سريع جدًا لدرجة أنني لم أصدق أنه كان يعمل حتى قمت عن عمد بإدخال بعض الأخطاء.
تيم أبوت ، المطور الرئيسي لـ Zulip:
هذا سريع بشكل يبعث على السخرية...
ruff
مذهل.
للمزيد، راجع الوثائق.
للمزيد، راجع الوثائق.
Ruff متاح ruff
على PyPI:
# With uv.
uv add --dev ruff # to add ruff to your project
uv tool install ruff # to install ruff globally
# With pip.
pip install ruff
# With pipx.
pipx install ruff
بدءًا من الإصدار 0.5.0
، يمكن تثبيت Ruff باستخدام أدوات التثبيت المستقلة لدينا:
# On macOS and Linux.
curl -LsSf https://astral.sh/ruff/install.sh | sh
# On Windows.
powershell -c " irm https://astral.sh/ruff/install.ps1 | iex "
# For a specific version.
curl -LsSf https://astral.sh/ruff/0.8.2/install.sh | sh
powershell -c " irm https://astral.sh/ruff/0.8.2/install.ps1 | iex "
يمكنك أيضًا تثبيت Ruff عبر Homebrew وConda ومع مجموعة متنوعة من مديري الحزم الآخرين.
لتشغيل Ruff باعتباره linter، جرب أيًا مما يلي:
ruff check # Lint all files in the current directory (and any subdirectories).
ruff check path/to/code/ # Lint all files in `/path/to/code` (and any subdirectories).
ruff check path/to/code/ * .py # Lint all `.py` files in `/path/to/code`.
ruff check path/to/code/to/file.py # Lint `file.py`.
ruff check @arguments.txt # Lint using an input file, treating its contents as newline-delimited command-line arguments.
أو لتشغيل Ruff كمنسق:
ruff format # Format all files in the current directory (and any subdirectories).
ruff format path/to/code/ # Format all files in `/path/to/code` (and any subdirectories).
ruff format path/to/code/ * .py # Format all `.py` files in `/path/to/code`.
ruff format path/to/code/to/file.py # Format `file.py`.
ruff format @arguments.txt # Format using an input file, treating its contents as newline-delimited command-line arguments.
يمكن أيضًا استخدام Ruff كخطاف ما قبل الالتزام عبر ruff-pre-commit
:
- repo : https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev : v0.8.2
hooks :
# Run the linter.
- id : ruff
args : [ --fix ]
# Run the formatter.
- id : ruff-format
يمكن أيضًا استخدام Ruff كملحق VS Code أو مع العديد من المحررين الآخرين.
يمكن أيضًا استخدام Ruff كإجراء GitHub عبر ruff-action
:
name : Ruff
on : [ push, pull_request ]
jobs :
ruff :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : astral-sh/ruff-action@v1
يمكن تكوين Ruff من خلال ملف pyproject.toml
أو ruff.toml
أو .ruff.toml
(راجع: التكوين أو الإعدادات للحصول على قائمة كاملة بجميع خيارات التكوين).
إذا تركت غير محددة، فإن التكوين الافتراضي لـ Ruff يعادل ملف ruff.toml
التالي:
# Exclude a variety of commonly ignored directories.
exclude = [
" .bzr " ,
" .direnv " ,
" .eggs " ,
" .git " ,
" .git-rewrite " ,
" .hg " ,
" .ipynb_checkpoints " ,
" .mypy_cache " ,
" .nox " ,
" .pants.d " ,
" .pyenv " ,
" .pytest_cache " ,
" .pytype " ,
" .ruff_cache " ,
" .svn " ,
" .tox " ,
" .venv " ,
" .vscode " ,
" __pypackages__ " ,
" _build " ,
" buck-out " ,
" build " ,
" dist " ,
" node_modules " ,
" site-packages " ,
" venv " ,
]
# Same as Black.
line-length = 88
indent-width = 4
# Assume Python 3.9
target-version = " py39 "
[ lint ]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
select = [ " E4 " , " E7 " , " E9 " , " F " ]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = [ " ALL " ]
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = " ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$ "
[ format ]
# Like Black, use double quotes for strings.
quote-style = " double "
# Like Black, indent with spaces, rather than tabs.
indent-style = " space "
# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false
# Like Black, automatically detect the appropriate line ending.
line-ending = " auto "
لاحظ أنه في pyproject.toml
، يجب أن يكون كل رأس قسم مسبوقًا بـ tool.ruff
. على سبيل المثال، يجب استبدال [lint]
بـ [tool.ruff.lint]
.
يمكن توفير بعض خيارات التكوين عبر وسيطات سطر الأوامر المخصصة، مثل تلك المتعلقة بتمكين القاعدة وتعطيلها، واكتشاف الملفات، ومستوى التسجيل:
ruff check --select F401 --select F403 --quiet
يمكن توفير خيارات التكوين المتبقية من خلال وسيطة cat-all --config
:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
للاشتراك في أحدث قواعد الوبر، وتغييرات نمط المنسق، وتحديثات الواجهة، والمزيد، قم بتمكين وضع المعاينة عن طريق تعيين preview = true
في ملف التكوين الخاص بك أو تمرير --preview
في سطر الأوامر. يتيح وضع المعاينة مجموعة من الميزات غير المستقرة التي قد تتغير قبل التثبيت.
راجع ruff help
لمعرفة المزيد عن أوامر Ruff ذات المستوى الأعلى، أو ruff help check
ruff help format
لمعرفة المزيد حول أوامر الفحص والتنسيق، على التوالي.
يدعم Ruff أكثر من 800 قاعدة لينت ، العديد منها مستوحى من الأدوات الشائعة مثل Flake8، وisort، وpyupgrade، وغيرها. بغض النظر عن أصل القاعدة، يقوم Ruff بإعادة تنفيذ كل قاعدة في Rust كميزة للطرف الأول.
افتراضيًا، يقوم Ruff بتمكين قواعد F
الخاصة بـ Flake8، إلى جانب مجموعة فرعية من القواعد E
، مع حذف أي قواعد أسلوبية تتداخل مع استخدام المنسق، مثل ruff format
أو Black.
إذا كنت قد بدأت للتو في استخدام Ruff، فإن مجموعة القواعد الافتراضية هي مكان رائع للبدء : فهي تكتشف مجموعة واسعة من الأخطاء الشائعة (مثل عمليات الاستيراد غير المستخدمة) بدون تكوين.
بالإضافة إلى الإعدادات الافتراضية، يقوم Ruff بإعادة تنفيذ بعض المكونات الإضافية Flake8 الأكثر شيوعًا وأدوات جودة التعليمات البرمجية ذات الصلة، بما في ذلك:
للحصول على تعداد كامل للقواعد المدعومة، راجع القواعد .
المساهمات هي موضع ترحيب وتقدير كبير. للبدء، راجع إرشادات المساهمة .
يمكنك أيضًا الانضمام إلينا على Discord .
تواجه مشكلة؟ تحقق من المشكلات الموجودة على GitHub ، أو لا تتردد في فتح مشكلة جديدة .
يمكنك أيضًا طلب المساعدة على Discord .
يعتمد Ruff's linter على كل من واجهات برمجة التطبيقات وتفاصيل التنفيذ للعديد من الأدوات الأخرى في نظام Python البيئي، وخاصة Flake8 وPyflakes وpycodestyle وpydocstyle وpyupgrade وisort.
في بعض الحالات، يشتمل Ruff على منفذ Rust "مباشر" للأداة المقابلة. نحن ممتنون لمشرفي هذه الأدوات على عملهم وعلى كل القيمة التي قدموها لمجتمع بايثون.
تم إنشاء منسق Ruff على شوكة من rome_formatter
الخاص بروما، ويعتمد مرة أخرى على كل من واجهة برمجة التطبيقات وتفاصيل التنفيذ من Rome وPrettier وBlack.
يعتمد محلل استيراد Ruff على خوارزمية دقة الاستيراد من Pyright.
يتأثر Ruff أيضًا بعدد من الأدوات خارج نظام Python البيئي، مثل Clippy وESLint.
استفاد راف من عدد كبير من المساهمين.
تم إطلاق سراح راف بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.
يتم استخدام Ruff من قبل عدد من المشاريع والشركات الكبرى مفتوحة المصدر، بما في ذلك:
إذا كنت تستخدم Ruff، فكر في إضافة شارة Ruff إلى README.md
الخاص بمشروعك:
[ ![ Ruff ] ( https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json )] ( https://github.com/astral-sh/ruff )
...أو README.rst
:
.. image :: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
...أو كـ HTML:
< a href =" https://github.com/astral-sh/ruff " > < img src =" https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json " alt =" Ruff " style =" max-width:100%; " > </ a >
هذا المستودع مرخص بموجب ترخيص MIT