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

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

选择Python还是C 取决于项目需求:1)如果需要快速开发、数据处理和原型设计,选择Python;2)如果需要高性能、低延迟和接近硬件的控制,选择C 。

通过每天投入2小时的Python学习,可以有效提升编程技能。1.学习新知识:阅读文档或观看教程。2.实践:编写代码和完成练习。3.复习:巩固所学内容。4.项目实践:应用所学于实际项目中。这样的结构化学习计划能帮助你系统掌握Python并实现职业目标。

在两小时内高效学习Python的方法包括:1.回顾基础知识,确保熟悉Python的安装和基本语法;2.理解Python的核心概念,如变量、列表、函数等;3.通过使用示例掌握基本和高级用法;4.学习常见错误与调试技巧;5.应用性能优化与最佳实践,如使用列表推导式和遵循PEP8风格指南。

Python适合初学者和数据科学,C 适用于系统编程和游戏开发。1.Python简洁易用,适用于数据科学和Web开发。2.C 提供高性能和控制力,适用于游戏开发和系统编程。选择应基于项目需求和个人兴趣。

Python更适合数据科学和快速开发,C 更适合高性能和系统编程。1.Python语法简洁,易于学习,适用于数据处理和科学计算。2.C 语法复杂,但性能优越,常用于游戏开发和系统编程。

每天投入两小时学习Python是可行的。1.学习新知识:用一小时学习新概念,如列表和字典。2.实践和练习:用一小时进行编程练习,如编写小程序。通过合理规划和坚持不懈,你可以在短时间内掌握Python的核心概念。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Linux新版
SublimeText3 Linux最新版