เอกสาร | สนามเด็กเล่น
Python linter และตัวจัดรูปแบบโค้ดที่รวดเร็วอย่างยิ่งซึ่งเขียนด้วยภาษา Rust
การ Lining ฐานรหัส CPython ตั้งแต่เริ่มต้น
pip
pyproject.toml
Ruff มุ่งหวังที่จะเป็นลำดับความสำคัญเร็วกว่าเครื่องมือทางเลือกในขณะที่รวมฟังก์ชันการทำงานเพิ่มเติมไว้เบื้องหลังอินเทอร์เฟซทั่วไปเดียว
Ruff สามารถใช้แทนที่ Flake8 (พร้อมปลั๊กอินหลายสิบ), Black, isort, pydocstyle, pyupgrade, autoflake และอื่นๆ อีกมากมาย ทั้งหมดนี้ดำเนินการได้เร็วกว่าเครื่องมือใดๆ หลายสิบหรือหลายร้อยเท่า
Ruff ได้รับการพัฒนาและใช้งานอย่างมากในโครงการโอเพ่นซอร์สที่สำคัญเช่น:
... และอีกมากมาย
รัฟได้รับการสนับสนุนจากแอสทรัล อ่านโพสต์เปิดตัวหรือประกาศโครงการเดิม
Sebastián Ramírez ผู้สร้าง FastAPI:
Ruff ทำงานเร็วมากจนบางครั้งฉันก็เพิ่มจุดบกพร่องโดยเจตนาในโค้ดเพียงเพื่อยืนยันว่ามันกำลังทำงานอยู่จริงและตรวจสอบโค้ด
Nick Schrock ผู้ก่อตั้ง Elementl ผู้ร่วมสร้าง GraphQL:
ทำไม Ruff ถึงเป็นผู้เปลี่ยนเกม? สาเหตุหลักมาจากเร็วกว่าเกือบ 1,000 เท่า อย่างแท้จริง. ไม่ใช่ตัวพิมพ์ผิด ในโมดูลที่ใหญ่ที่สุดของเรา (dagster เอง 250k LOC) pylint ใช้เวลาประมาณ 2.5 นาที โดยขนานกับ 4 คอร์บน M1 ของฉัน การรัน ruff กับ codebase ทั้งหมด ของเราใช้เวลา .4 วินาที
Bryan Van de Ven ผู้ร่วมสร้าง Bokeh ผู้เขียนต้นฉบับของ Conda:
Ruff เร็วกว่า flake8 ประมาณ 150-200 เท่าบนเครื่องของฉัน การสแกน repo ทั้งหมดใช้เวลาประมาณ ~0.2 วินาที แทนที่จะเป็น ~20 วินาที นี่เป็นการปรับปรุงคุณภาพชีวิตอย่างมากสำหรับนักพัฒนาท้องถิ่น มันเร็วพอที่ฉันเพิ่มมันเป็น commit hook จริง ๆ ซึ่งยอดเยี่ยมมาก
Timothy Crosley ผู้สร้าง isort:
เพิ่งเปลี่ยนโปรเจ็กต์แรกของฉันเป็น Ruff ข้อเสียประการเดียวจนถึงตอนนี้: มันเร็วมาก ฉันไม่อยากจะเชื่อเลยว่ามันใช้งานได้จนกระทั่งฉันตั้งใจแสดงข้อผิดพลาดบางอย่าง
Tim Abbott หัวหน้าผู้พัฒนา 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 ยังสามารถใช้เป็น hook ล่วงหน้าผ่าน 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 Action ผ่าน 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
(ดู: Configuration หรือ Settings สำหรับรายการตัวเลือกการกำหนดค่าทั้งหมด)
หากปล่อยไว้โดยไม่ระบุ การกำหนดค่าเริ่มต้นของ 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
ตัวเลือกการกำหนดค่าที่เหลือสามารถระบุได้ผ่านอาร์กิวเมนต์ catch-all --config
:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
หากต้องการเลือกใช้กฎ Lint ล่าสุด การเปลี่ยนแปลงรูปแบบฟอร์แมตเตอร์ การอัปเดตอินเทอร์เฟซ และอื่นๆ ให้เปิดใช้งานโหมดแสดงตัวอย่างโดยการตั้งค่า preview = true
ในไฟล์การกำหนดค่าของคุณ หรือส่ง --preview
บนบรรทัดคำสั่ง โหมดดูตัวอย่างช่วยให้สามารถรวบรวมคุณสมบัติที่ไม่เสถียรซึ่งอาจเปลี่ยนแปลงก่อนที่จะมีความเสถียร
ดู ruff help
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งระดับบนสุดของ Ruff หรือ ruff help check
และ ruff help format
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคำสั่ง linting และการจัดรูปแบบ ตามลำดับ
Ruff รองรับกฎ Lint มากกว่า 800 รายการ ซึ่งหลายกฎได้รับแรงบันดาลใจจากเครื่องมือยอดนิยม เช่น Flake8, isort, pyupgrade และอื่นๆ ไม่ว่ากฎจะมีต้นกำเนิดมาจากอะไร Ruff จะนำทุกกฎใน Rust ไปใช้ใหม่เป็นฟีเจอร์ของบุคคลที่หนึ่ง
ตามค่าเริ่มต้น Ruff จะเปิดใช้งานกฎ F
ของ Flake8 พร้อมกับชุดย่อยของกฎ E
โดยละเว้นกฎสไตล์ใดๆ ที่ทับซ้อนกับการใช้ฟอร์แมตเตอร์ เช่น ruff format
หรือสีดำ
หากคุณเพิ่งเริ่มต้นใช้งาน Ruff ชุดกฎเริ่มต้นเป็นจุดเริ่มต้นที่ดี โดยจะตรวจจับข้อผิดพลาดทั่วไปต่างๆ มากมาย (เช่น การนำเข้าที่ไม่ได้ใช้) โดยไม่มีการกำหนดค่า
นอกเหนือจากค่าเริ่มต้นแล้ว Ruff ยังนำปลั๊กอิน Flake8 ที่ได้รับความนิยมสูงสุดบางส่วนกลับมาใช้ใหม่และเครื่องมือคุณภาพโค้ดที่เกี่ยวข้อง รวมถึง:
สำหรับการแจงนับกฎที่รองรับทั้งหมด โปรดดู ที่กฎ
ยินดีรับผลงานและขอชื่นชมอย่างสูง ในการเริ่มต้น โปรดดู หลักเกณฑ์การมีส่วนร่วม
คุณสามารถเข้าร่วมกับเราได้ที่ Discord
มีปัญหาเหรอ? ตรวจสอบปัญหาที่มีอยู่บน GitHub หรืออย่าลังเลที่จะ เปิดปัญหาใหม่
คุณสามารถขอความช่วยเหลือได้ที่ Discord
linter ของ Ruff ใช้ทั้ง API และรายละเอียดการใช้งานของเครื่องมืออื่นๆ มากมายในระบบนิเวศของ Python โดยเฉพาะ Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade และ isort
ในบางกรณี Ruff มีพอร์ต Rust "โดยตรง" ของเครื่องมือที่เกี่ยวข้อง เราขอขอบคุณผู้ดูแลเครื่องมือเหล่านี้สำหรับงานของพวกเขา และสำหรับคุณค่าทั้งหมดที่พวกเขามอบให้กับชุมชน Python
ฟอร์แมตเตอร์ของ Ruff สร้างขึ้นจากทางแยกของ rome_formatter
ของโรม และดึงทั้ง API และรายละเอียดการใช้งานจาก Rome, Prettier และ Black อีกครั้ง
ตัวแก้ไขการนำเข้าของ Ruff ขึ้นอยู่กับอัลกอริธึมการแก้ปัญหาการนำเข้าจาก Pyright
Ruff ยังได้รับอิทธิพลจากเครื่องมือจำนวนหนึ่งที่อยู่นอกระบบนิเวศของ Python เช่น Clippy และ ESLint
Ruff เป็นผู้รับผลประโยชน์จากผู้มีส่วนร่วมจำนวนมาก
Ruff ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT
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