Dokumen | Tempat bermain
Linter dan pemformat kode Python yang sangat cepat, ditulis dalam Rust.
Linting basis kode CPython dari awal.
pip
pyproject.toml
Ruff bertujuan untuk menjadi lebih cepat dibandingkan alat alternatif sambil mengintegrasikan lebih banyak fungsi di balik satu antarmuka umum.
Ruff dapat digunakan untuk menggantikan Flake8 (ditambah lusinan plugin), Black, isort, pydocstyle, pyupgrade, autoflake, dan banyak lagi, sambil mengeksekusi puluhan atau ratusan kali lebih cepat daripada alat apa pun.
Ruff sangat aktif dikembangkan dan digunakan dalam proyek sumber terbuka besar seperti:
...dan masih banyak lagi.
Ruff didukung oleh Astral. Baca postingan peluncuran, atau pengumuman proyek asli.
Sebastián Ramírez , pencipta FastAPI:
Ruff sangat cepat sehingga terkadang saya menambahkan bug yang disengaja ke dalam kode hanya untuk mengonfirmasi bahwa kode tersebut benar-benar berjalan dan memeriksa kodenya.
Nick Schrock , pendiri Elementl, salah satu pembuat GraphQL:
Mengapa Ruff menjadi pengubah permainan? Terutama karena hampir 1000x lebih cepat. Secara harfiah. Bukan salah ketik. Pada modul terbesar kami (dagster itu sendiri, 250k LOC) pylint membutuhkan waktu sekitar 2,5 menit, diparalelkan pada 4 core pada M1 saya. Menjalankan kekacauan di seluruh basis kode kita membutuhkan waktu 0,4 detik.
Bryan Van de Ven , salah satu pencipta Bokeh, penulis asli Conda:
Ruff ~150-200x lebih cepat daripada flake8 di mesin saya, memindai seluruh repo membutuhkan waktu ~0,2 detik, bukan ~20 detik. Ini merupakan peningkatan kualitas hidup yang sangat besar bagi pengembang lokal. Cukup cepat sehingga saya menambahkannya sebagai pengait komit yang sebenarnya, dan itu luar biasa.
Timothy Crosley , pencipta isort:
Baru saja mengalihkan proyek pertama saya ke Ruff. Hanya satu kelemahan sejauh ini: sangat cepat sehingga saya tidak percaya ini berhasil sampai saya dengan sengaja membuat beberapa kesalahan.
Tim Abbott , pengembang utama Zulip:
Ini sangat cepat...
ruff
luar biasa.
Untuk lebih lanjut, lihat dokumentasi.
Untuk lebih lanjut, lihat dokumentasi.
Ruff tersedia sebagai ruff
di 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
Dimulai dengan versi 0.5.0
, Ruff dapat diinstal dengan installer mandiri kami:
# 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 "
Anda juga dapat menginstal Ruff melalui Homebrew, Conda, dan berbagai pengelola paket lainnya.
Untuk menjalankan Ruff sebagai linter, coba salah satu langkah berikut:
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.
Atau, untuk menjalankan Ruff sebagai formatter:
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 juga dapat digunakan sebagai hook pra-komit melalui 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 juga dapat digunakan sebagai ekstensi VS Code atau dengan berbagai editor lainnya.
Ruff juga dapat digunakan sebagai GitHub Action melalui 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 dapat dikonfigurasi melalui file pyproject.toml
, ruff.toml
, atau .ruff.toml
(lihat: Konfigurasi , atau Pengaturan untuk daftar lengkap semua opsi konfigurasi).
Jika tidak ditentukan, konfigurasi default Ruff setara dengan file ruff.toml
berikut:
# 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 "
Perhatikan bahwa, dalam pyproject.toml
, setiap header bagian harus diawali dengan tool.ruff
. Misalnya, [lint]
harus diganti dengan [tool.ruff.lint]
.
Beberapa opsi konfigurasi dapat diberikan melalui argumen baris perintah khusus, seperti argumen yang terkait dengan pengaktifan dan penonaktifan aturan, penemuan file, dan tingkat pencatatan:
ruff check --select F401 --select F403 --quiet
Opsi konfigurasi lainnya dapat diberikan melalui argumen catch-all --config
:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
Untuk ikut serta dalam aturan lint terbaru, perubahan gaya formatter, pembaruan antarmuka, dan lainnya, aktifkan mode pratinjau dengan menyetel preview = true
di file konfigurasi Anda atau meneruskan --preview
di baris perintah. Mode pratinjau mengaktifkan kumpulan fitur tidak stabil yang mungkin berubah sebelum stabilisasi.
Lihat ruff help
untuk mengetahui lebih lanjut tentang perintah tingkat atas Ruff, atau ruff help check
dan ruff help format
untuk mengetahui lebih lanjut tentang perintah linting dan formatting.
Ruff mendukung lebih dari 800 aturan lint , banyak di antaranya terinspirasi oleh alat populer seperti Flake8, isort, pyupgrade, dan lainnya. Terlepas dari asal aturan tersebut, Ruff mengimplementasikan kembali setiap aturan di Rust sebagai fitur pihak pertama.
Secara default, Ruff mengaktifkan aturan F
Flake8, bersama dengan subset aturan E
, menghilangkan aturan gaya apa pun yang tumpang tindih dengan penggunaan formatter, seperti ruff format
atau Black.
Jika Anda baru memulai dengan Ruff, rangkaian aturan default adalah tempat yang tepat untuk memulai : ia menangkap berbagai macam kesalahan umum (seperti impor yang tidak digunakan) dengan konfigurasi nol.
Di luar standarnya, Ruff mengimplementasikan kembali beberapa plugin Flake8 terpopuler dan alat kualitas kode terkait, termasuk:
Untuk penghitungan lengkap aturan yang didukung, lihat Aturan .
Kontribusi dipersilakan dan sangat dihargai. Untuk memulai, lihat pedoman berkontribusi .
Anda juga dapat bergabung dengan kami di Discord .
Mengalami masalah? Periksa masalah yang ada di GitHub , atau silakan buka masalah baru .
Anda juga dapat meminta bantuan di Discord .
Linter Ruff mengacu pada API dan detail implementasi dari banyak alat lain di ekosistem Python, terutama Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade, dan isort.
Dalam beberapa kasus, Ruff menyertakan port Rust "langsung" dari alat yang sesuai. Kami berterima kasih kepada pengelola alat ini atas pekerjaan mereka, dan atas semua nilai yang telah mereka berikan kepada komunitas Python.
Formatter Ruff dibangun di atas fork rome_formatter
, dan sekali lagi menggunakan API dan detail implementasi dari Rome, Prettier, dan Black.
Penyelesai impor Ruff didasarkan pada algoritma resolusi impor dari Pyright.
Ruff juga dipengaruhi oleh sejumlah alat di luar ekosistem Python, seperti Clippy dan ESLint.
Ruff adalah penerima manfaat dari sejumlah besar kontributor.
Ruff dirilis di bawah lisensi MIT.
Ruff digunakan oleh sejumlah proyek dan perusahaan sumber terbuka besar, termasuk:
Jika Anda menggunakan Ruff, pertimbangkan untuk menambahkan lencana Ruff ke README.md
proyek Anda :
[ ![ 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 )
...atau 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
...atau, sebagai 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 >
Repositori ini dilisensikan di bawah Lisensi MIT