首页  >  文章  >  后端开发  >  设置代码质量工具

设置代码质量工具

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-01 05:47:02359浏览

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