在開發 ReadmeGenie 時,我的目標是透過自動檢查和格式化設定來確保一致的程式碼品質。在考慮了幾種工具之後,我選擇 Ruff 作為 linter,選擇 Black 作為程式碼格式化程式。儘管 Ruff 還可以處理 linting 和格式化,但我決定將 Black 設定為單獨的格式化程序,以獲得這兩種工具的配置經驗。下面,我將分享我為什麼選擇這些工具、如何為我的專案配置它們、我面臨的挑戰以及我在過程中學到的經驗教訓。
Ruff 是 Python 的快速 linter,它支援其他 linter(例如 Flake8 和 Pyflakes)的各種 linting 規則,並提供顯著的效能改進。它是高度可自訂的,這使我能夠指定混合規則,同時確保與黑色格式的兼容性。 Ruff 的速度和可擴展性設計非常適合優先考慮效率而不犧牲品質的專案。
Black 是一種 Python 格式化程序,嚴格執行一種格式化樣式,有助於減少程式碼樣式的討論和不一致。雖然 Ruff 提供基本的格式化功能,但 Black 的專用方法提供了一些優勢:
廣泛採用:黑色被廣泛使用,使其更容易整合到大多數開發工作流程中,特別是在協作專案中。
黑色文件:https://github.com/psf/black
為了確保 Ruff 和 Black 在 ReadmeGenie 中無縫工作,我在 pyproject.toml 和
中配置了它們
.pre-commit-config.yaml,允許開發人員在提交時自動格式化和檢查程式碼。
此設定確保 Ruff 僅用於 linting,Black 用於格式化:
# pyproject.toml # Set up black as formatter [tool.black] line-length = 88 target-version = ["py311"] # Set up ruff as linter only [tool.ruff] # Exclude directories that don’t need linting (e.g., virtual environments) exclude = [ "venv/", "__pycache__/" ] fix = true # Enable specific linting rules select = ["F", "E", "W", "B", "I", "S"] # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety # Exclude Black-compatible rules to avoid conflicts with Black's formatting. ignore = ["E501", "E203", "E231"] # Exclude Black-incompatible style issues
使用預先提交掛鉤,我配置了 .pre-commit-config.yaml 以在每次提交時強制執行 linting 和格式化:
# .pre-commit-config.yaml repos: - repo: https://github.com/psf/black rev: 23.1.0 hooks: - id: black - repo: https://github.com/charliermarsh/ruff-pre-commit rev: v0.7.1 hooks: - id: ruff
透過上述設置,您可以使用以下命令:
# pyproject.toml # Set up black as formatter [tool.black] line-length = 88 target-version = ["py311"] # Set up ruff as linter only [tool.ruff] # Exclude directories that don’t need linting (e.g., virtual environments) exclude = [ "venv/", "__pycache__/" ] fix = true # Enable specific linting rules select = ["F", "E", "W", "B", "I", "S"] # Example codes: F=flake8, E=errors, W=warnings, B=bugbear, I=import, S=safety # Exclude Black-compatible rules to avoid conflicts with Black's formatting. ignore = ["E501", "E203", "E231"] # Exclude Black-incompatible style issues
# .pre-commit-config.yaml repos: - repo: https://github.com/psf/black rev: 23.1.0 hooks: - id: black - repo: https://github.com/charliermarsh/ruff-pre-commit rev: v0.7.1 hooks: - id: ruff
這些命令將修復應用於所有 Python 文件,確保一致的樣式和品質檢查。
為了在儲存時自動執行 Ruff 和 Black,我在 .vscode/settings.json 中新增了以下設定:
ruff check . --fix
此設定使 Black 成為預設格式化程序,而 Ruff 成為 VS Code 中唯一活動的 linter,允許兩者運行
儲存後自動。
設定完成後,Ruff 和 Black 發現了幾個問題:
一個值得注意的挑戰是了解某些風格在 Ruff 和 Black 之間不相容。例如:
同時使用 Ruff 和 Black 是提高程式碼品質的好方法。這是我學到的:
以上是設定代碼品質工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!