首頁 >後端開發 >Python教學 >設定代碼品質工具

設定代碼品質工具

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-01 05:47:02452瀏覽

Setting Up Tools for Code Quality

在開發 ReadmeGenie 時,我的目標是透過自動檢查和格式化設定來確保一致的程式碼品質。在考慮了幾種工具之後,我選擇 Ruff 作為 linter,選擇 Black 作為程式碼格式化程式。儘管 Ruff 還可以處理 linting 和格式化,但我決定將 Black 設定為單獨的格式化程序,以獲得這兩種工具的配置經驗。下面,我將分享我為什麼選擇這些工具、如何為我的專案配置它們、我面臨的挑戰以及我在過程中學到的經驗教訓。


1. 工具選擇

為什麼是拉夫?

Ruff 是 Python 的快速 linter,它支援其他 linter(例如 Flake8 和 Pyflakes)的各種 linting 規則,並提供顯著的效能改進。它是高度可自訂的,這使我能夠指定混合規則,同時確保與黑色格式的兼容性。 Ruff 的速度和可擴展性設計非常適合優先考慮效率而不犧牲品質的專案。

  • Ruff 文件:https://github.com/charliermarsh/ruff

為什麼是黑色?

Black 是一種 Python 格式化程序,嚴格執行一種格式化樣式,有助於減少程式碼樣式的討論和不一致。雖然 Ruff 提供基本的格式化功能,但 Black 的專用方法提供了一些優勢:

  • 一致性:黑色強制執行嚴格、標準的風格,最大限度地減少對程式碼格式的爭論。
  • 廣泛採用:黑色被廣泛使用,使其更容易整合到大多數開發工作流程中,特別是在協作專案中。

  • 黑色文件:https://github.com/psf/black

2. 項目設定

為了確保 Ruff 和 Black 在 ReadmeGenie 中無縫工作,我在 pyproject.toml 和
中配置了它們 .pre-commit-config.yaml,允許開發人員在提交時自動格式化和檢查程式碼。

pyproject.toml 中 Ruff 和 Black 的配置

此設定確保 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
  • 忽略:黑色處理特定樣式,因此我們在 Ruff 中排除了這些規則。
  • 修復:使 Ruff 能夠盡可能修復問題,將格式保留為黑色。

添加 Ruff 和 Black 的預提交鉤子

使用預先提交掛鉤,我配置了 .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

3. 從命令列運行 Ruff 和 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
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 文件,確保一致的樣式和品質檢查。

4.VS代碼​​集成

為了在儲存時自動執行 Ruff 和 Black,我在 .vscode/settings.json 中新增了以下設定:

  ruff check . --fix

此設定使 Black 成為預設格式化程序,而 Ruff 成為 VS Code 中唯一活動的 linter,允許兩者運行
儲存後自動。

5. 發現和修復

設定完成後,Ruff 和 Black 發現了幾個問題:

  • 行長度 (E501):Ruff 最初標記了長行,Black 自動格式化。
  • 未使用的導入和變數:Ruff 捕捉了幾個未使用的導入和變數。
  • 縮排和樣式一致性:黑色應用一致的間距和縮進,增強可讀性。

6. 挑戰

一個值得注意的挑戰是了解某些風格在 Ruff 和 Black 之間不相容。例如:

  • 行長度 (E501):Ruff 最初標記了超過 88 個字元的長行,Black 透過換行來處理 線。為了防止衝突,我將 E501 加到 Ruff 的忽略清單中。儘管如此,Ruff 有時會標記 E501 錯誤 如果黑棋沒有應用預期的斷點。這些差異強調了調整每種工具的重要性 配置並理解它們可能重疊的地方。

7. 經驗教訓

同時使用 Ruff 和 Black 是提高程式碼品質的好方法。這是我學到的:

  • 一致性:黑色固執己見的風格減少了程式碼樣式的歧義。
  • 自動化:預先提交掛鉤可以節省時間並確保格式一致。
  • 編輯器整合:配置 Ruff 和 Black 在 VS Code 中保存時運行,簡化了開發。
  • 相容性:學習如何解決像 E501 這樣的衝突,教會了我有關工具配置的知識,並提供了幫助 微調專案工作流程。

以上是設定代碼品質工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn