设置代码质量工具
在开发 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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

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

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。
