在开发 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中文网其他相关文章!