Ruff的900+内置Lint规则全清单:一键替代Flake8、Pylint、Bugbear的终极规则集
【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff
你是否还在同时维护 Flake8、Pylint、pycodestyle、isort、pyupgrade 好几个检查器?Ruff 是用 Rust 编写的极速 Python Linter(代码检查器)与格式化工具,内置900+ 条 Lint 规则,原生复刻了 Flake8 及其数十个流行插件(包括 flake8-bugbear、pylint 等)的规则集,速度快 10~100 倍,一条命令即可替换你现有的整套检查工具链。
为什么是 Ruff:一个工具替代五个
传统 Python 项目的代码质量检查往往要拼装一堆工具,各管一摊:
| 原有工具 | 负责什么 | Ruff 对应规则前缀 |
|---|---|---|
| Pyflakes | 未使用导入、未定义变量 | F |
| pycodestyle | 缩进、空格、行宽等风格 | E/W |
| flake8-bugbear | 隐蔽 Bug、坏味道 | B |
| pyupgrade | 语法现代化升级 | UP |
| isort | import 排序 | I |
| mccabe | 圈复杂度 | C90 |
| pylint | 约定/错误/重构类检查 | PL |
| flake8-simplify | 代码简化建议 | SIM |
| pydocstyle | 文档字符串规范 | D |
而 Ruff 把这些规则全部用 Rust 原生重新实现(而非调用插件),因此才能做到:扫描整个 CPython 级别的代码库只需几秒,甚至快到你"故意写错代码确认它真的在跑"。
Ruff 由 Astral 团队开发维护(该团队同时也是 uv 和 ty 的作者),被 Apache Airflow、FastAPI、Pandas、SciPy 等主流开源项目采用。
900+ 规则全清单:看懂规则代码系统
Ruff 沿用了 Flake8 的规则代码体系:1~3 个字母前缀 + 3 位数字(如F401)。前缀代表规则来源,这也是快速定位"某条规则属于哪个工具"的关键。
打开 crates/ruff_linter/src/rules/mod.rs 可以看到 Ruff 内置的59 个规则模块,以下是常用的前缀速查表:
核心前缀速查(按使用频率排序)
F— Pyflakes:未使用的导入、语法错误类问题(默认开启)E/W— pycodestyle:错误与警告级风格问题(默认开启)B— flake8-bugbear:如B006(可变默认参数)、B904(raise 应带 from)UP— pyupgrade:如UP006(typing.List→list)(默认开启)I— isort:import 排序与分组SIM— flake8-simplify:如SIM105(可改用contextlib.suppress)PL— pylint:按严重度细分C(约定)/R(重构)/W(警告)/E(错误)RUF— Ruff 自有规则,如RUF012(class-var 注解缺失)(默认开启)C90— mccabe 圈复杂度,D— pydocstyle 文档字符串S— flake8-bandit 安全(硬编码密钥、危险函数),N— pep8-naming 命名PERF— perflint 性能,PT— flake8-pytest-style,TRY— tryceratops 异常处理PTH— 建议改用 pathlib,RET— 返回值简化,FLY— f-string 转换ERA— 注释掉的代码,TID— 导入整洁度,LOG— logging 规范
更多小众但实用的模块还包括:AIR(Airflow)、FAST(FastAPI)、PAND(pandas-vet)、NP(numpy)、DTZ(datetime 时区)、TCH(type-checking 导入)等,全部规则可查阅 docs/linter.md。
💡 想弄清某条规则的语义分类(Error/Warning/Convention/Refactor),可参考 crates/ruff_linter/src/upstream_categories.rs,它定义了各前缀与 Pylint 风格的严重度映射。
3 行配置:如何挑选你的规则集
Ruff 通过pyproject.toml中的lint.select/lint.ignore选择规则组,支持全码(F401)或前缀(F)两种粒度:
[tool.ruff.lint] # 启用 E、F 两个前缀的所有规则 select = ["E", "F"] # 单独关闭某条规则 ignore = ["F401"]推荐的入门方案
官方在 docs/linter.md 中给出的建议:
- 零配置直接跑:Ruff 默认已开启
F、E、B、UP、RUF等规则组,足以捕获未使用导入、常见 Bug 等问题; - 渐进式加码:从小集合出发,逐组加入。最流行的"不啰嗦但够严格"组合是
E+F+UP+B+SIM+I; - 谨慎使用
ALL:它会启用全部 900+ 条规则,且每次升级都会隐式启用新规则(开启ALL时 Ruff 会自动禁用如D203与D211这类相互冲突的文档字符串规则)。
一键修复:ruff check --fix
Ruff 的一大杀手锏是自动修复:大量规则(如删除未使用导入、现代化语法升级)不仅报错,还能直接改写代码。
ruff check # 检查当前目录 ruff check --fix # 自动修复可修复的问题 ruff check --watch # 监听文件变化,增量检查配合内置缓存,未变更的文件不会重复分析,大型仓库的日常检查几乎无感。
快速上手:安装与最小配置
pip install ruff ruff check .如果仓库是从 GitCode 获取的:
git clone https://gitcode.com/GitHub_Trending/ru/ruff再写一个最小配置pyproject.toml:
[tool.ruff.lint] select = ["E", "F", "UP", "B", "SIM", "I"]到这里,你的项目已经获得了一个比 Flake8 快百倍、规则覆盖面却广得多的检查器。后续想加文档字符串规范(D)、安全扫描(S)、复杂度控制(C90),只需在select里补一个前缀。
总结:一张清单带走
| 你的需求 | Ruff 方案 |
|---|---|
| 替代 Flake8 + 一堆插件 | 一套前缀覆盖 Pyflakes/pycodestyle/Bugbear 等 59 个规则模块 |
| 替代 Pylint 风格检查 | PL前缀 + 约定/重构/警告/错误四级分类 |
| 替代 isort / pyupgrade | I与UP前缀,且支持自动修复 |
| 大仓库性能瓶颈 | Rust 实现 + 内置缓存,10~100 倍速度提升 |
| 单条规则粒度的开关 | select/ignore精确到F401级别 |
核心要点一句话:先跑默认规则集,再按需追加前缀,最后用--fix让 Ruff 替你改代码。完整规则文档见 docs/linter.md,规则源码索引见 crates/ruff_linter/src/rules/。
【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考