Ruff 0.11.x 版本演进全解析:Python 版本推断新机制、PGH004 稳定化与 Compile-time Syntax Errors 体系

发布时间:2026/9/6 19:41:13

Ruff 0.11.x 版本演进全解析:Python 版本推断新机制、PGH004 稳定化与 Compile-time Syntax Errors 体系
Ruff 0.11.x 版本演进全解析Python 版本推断新机制、PGH004 稳定化与 Compile-time Syntax Errors 体系【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff本文围绕 Ruff 官方变更记录 changelogs/0.11.x.md 展开完整覆盖 0.11.0 至 0.11.13 共 14 个版本的核心变更。读完本文你将掌握 0.11.0 中requires-python推断这一破坏性变更的确切语义与源码实现、PGH004稳定化后的检测范围以及贯穿整个 0.11.x 系列的 compile-time syntax errors编译期语法错误检测体系是如何逐版本铺开的并了解--exit-non-zero-on-format等 CLI 新选项的实际行为。0.11.0 的由来一次发布流程修正0.11.0 并不是一个常规的迭代版本而是对 0.10.0 的补发follow-up release。变更记录开篇明确说明由于发布流程中的一个失误requires-python推断相关的变更没有包含进 0.10.0因此 Ruff 0.11.0 补上了这一变更同时完成了PGH004preview 行为的稳定化。也就是说升级 0.11.0 时实际引入的“新行为”有两块Python 版本推断机制的变更破坏性变更与blanket-noqa检测范围的扩大。破坏性变更target-version缺失时的版本推断在此之前指定 Python 版本只有两条途径在ruff.toml或pyproject.toml的[tool.ruff]段中显式配置target-version在带有[tool.ruff]段的pyproject.toml中依赖project.requires-python字段。问题出在 Ruff 的配置发现机制上一个不含[tool.ruff]段的pyproject.toml会被整个忽略其中的requires-python也随之被忽略Ruff 会回退到默认 Python 版本记录写作时为 3.9——当你明明声明了目标版本时这个行为出人意料。0.11.0 更新后的配置发现规则如下变更记录原文列出三条当前 docs/configuration.md 中“Inferring the Python version”一节的完整表述为四条如果直接传入了配置文件Ruff 不会尝试推断缺失的target-version如果在文件系统层级中发现配置文件如ruff.toml没有target-versionRuff 会检查同一目录下的pyproject.toml并尊重其requires-python字段——即使该文件不含[tool.ruff]段如果使用用户级配置user-level configuration则取父目录中最近的pyproject.toml的requires-python字段优先如果被检查文件所在目录没有任何配置文件ruff.toml或带[tool.ruff]段的pyproject.tomlRuff 会向上查找最近的pyproject.toml并使用其requires-python。源码实现apply_fallbacks与回退版本推导从源码结构看这套逻辑的落点在ruff_workspacecrateconfiguration.rs 中的apply_fallbacks方法当配置来源为ConfigurationOrigin::Ancestor即从父目录层级发现且target_version为空时调用pyproject::find_fallback_target_version(dir)推导回退版本pyproject.rs 中的find_fallback_target_version沿路径祖先目录逐级查找找到第一个含requires-python的pyproject.toml即返回关键的版本提取逻辑在 pyproject.rs 的get_minimum_supported_version它从VersionSpecifiers中只筛选、、~、、等下界类操作符取各操作数版本截断到 major.minor 后的最小值再映射到PythonVersion枚举。例如requires-python 3.13会推导出py313。需要注意的细节load_optionspyproject.rs在解析pyproject.toml时如果其中已显式给出target_version则显式配置优先不会再去读requires-python。也就是说target-version依旧是“细粒度控制”的第一选择推断只作为兜底。PGH004blanket-noqa稳定化blanket-noqa规则PGH004在 0.11.0 稳定化行为变化是同时检测文件级的 blanket noqa 注释而不仅仅是行级注释。即# noqa整行/整文件地关闭所有规则的行为现在也会被告警。配合 0.11.5 中RUF100对“带具体规则码的未使用文件级noqa指令”的检测修复0.11.x 系列对 noqa 卫生管理的整体覆盖明显增强。贯穿系列的 Preview 主线compile-time syntax errors0.11.x 系列最具系统性的一条线索是[syntax-errors]类别的 preview 功能——把 CPython 在编译期才会报错的语法问题前移到 lint 阶段检测。按版本梳理其演进0.11.1一批针对“低版本 Python 使用高版本语法”的检测先行落地包括 PEP 701 f-string 在 Python 3.12 之前、括号化上下文管理器PEP 634/614 相关在 3.9 之前、星号注解PEP 646在 3.11 之前、for语句迭代子句中的元组解包在 3.9 之前等同时改进了 pre-PEP-614 装饰器语法错误的消息与范围range0.11.2修复 3.11 之前可变参数variadic注解上的误报0.11.3正式宣布Start detecting compile-time syntax errors开始检测编译期语法错误并补充 match 模式相关问题映射模式重复键、类模式重复属性、case模式中多重赋值等、__debug__赋值/删除检测0.11.4补充注解annotations中的非法语法检测、match模式中的重复键/属性同期还实现了RUF102invalid-rule-code0.11.5将注解检查扩展到await表达式与带注解赋值新增同步推导式中出现异步推导式的检测0.11.8新增模块级nonlocal声明、单星号赋值x *y检测并将“未加括号的 except 元组”语法错误限定为 3.14 之前的行为0.11.9两项关键调整——版本相关的语法错误默认按最新受支持 Python 版本判定以及为 Python 3.14 实现 deferred annotations0.11.13其他变更parser 与 formatter 双双支持 Python 3.14 的 t-strings模板字符串。这条线索的意义在于Ruff 的 Rust 解析器在解析成功之后还维护了一套semantic_errors检查层可参见 ruff_python_parser 与 error.rs 的目录结构0.11.x 系列把它逐步暴露为可启用的 preview 诊断让“这份代码在目标 Python 版本下根本编译不过”的问题在 lint 阶段即可被捕获。由于均处于 preview 状态启用方式是在配置或 CLI 中开启preview模式正式稳定化前的行为仍可能调整。值得逐条关注的规则与修复变更Airflow 规则AIR3xx的大规模演进flake8-airflow插件是 0.11.x 中改动最密集的插件核心是 Airflow 3 的模块迁移检测AIR301/AIR302等从 0.11.1 起陆续补充chain、chain_linear、cross_downstream检测0.11.3 引入AIR312拆分、规则编号多次迁移AIR301→AIR002、AIR302→AIR301、AIR303→AIR302等使用这些编码时注意版本差异0.11.10–0.11.13 则持续补全 autofix含针对 Airflow 3 中重命名场景的不安全修复并扩展到单个符号级别的模块路径检查。如果你的项目依赖 Airflow 且使用这些规则升级时应留意规则码映射变化。CLI--exit-non-zero-on-format0.11.1这是一个 CI 场景下很实用的新选项只要格式化实际修改了任何文件即使全部文件都格式化成功ruff format也返回非零退出码。实现位于 args.rs定义为FormatCommand的布尔参数并带有历史别名--exit-non-zero-on-fix。其典型用法是让 CI 以“检查失败”的方式守护格式一致性而不是静默修改工作区。配置与 CLI 的其他新增0.11.3stdin 传入的pyproject.toml现在能被正确解析检查此前作为普通文本处理会导致误判flake8-import-conventions的默认别名新增numpy.typing as npt0.11.8新增禁用typing_extensions相关导入建议的选项对应 configuration.rs 中LintConfiguration的typing_extensions字段0.11.9 还修复了该设置缺少combine调用的 bug配置选项中新增 Python 3.14target-version可用py3140.11.9ruff analyze graph允许传入虚拟环境。规则行为变更与自动修复安全性收紧0.11.x 系列体现了一个清晰的工程取向——把更多自动修复标记为“不安全unsafe”以避免破坏性变更例如0.11.7FURB161refurb修复除整数字面量与布尔量外一律不安全PLR1730在删除注释时不安全0.11.10PIE804在字典含注释时修复标记为不安全0.11.12/0.11.13UP010、UP004、UP050在删除注释时标记为不安全同期也有“放宽”方向0.11.7 中E712冗余布尔比较获得自动修复PERF401允许用推导式替换列表函数调用。若你的 CI 使用--fix而非--unsafe-fixes这些安全性调整直接影响修复覆盖面升级后值得对 diff 做一次抽查。代表性 bug 修复变更记录中篇幅最大的部分是 bug fixes其中几类修复模式值得关注文件描述符fd参数导致的误报0.11.8–0.11.10 集中修复了flake8-use-pathlib一族规则PTH104/PTH116/PTH123/PTH208等在函数参数是文件描述符时仍建议Path方法的误报0.11.10 进一步推广为“对所有带dir_fd参数的os.*函数抑制诊断”自动修复产生非法代码如SIM905的rsplit修复会产生反转的列表字面量0.11.10 修复、UP018修复丢失空格或括号0.11.7/0.11.9 修复、FURB129修复生成非法语法0.11.12 修复稳定性0.11.1 中 Server 端在有版本特定语法错误时允许FixAll操作0.11.3 中“从已删除目录运行 Ruff 时panic!”改为正常报错。升级建议如果从 0.10.x 或更早版本升级到 0.11.x首要关注的是未配置target-version的项目新推断机制可能改变 Ruff 实际使用的目标版本尤其是目录中存在pyproject.toml但无[tool.ruff]段、且声明了requires-python的场景从而改变部分版本相关规则如UP系列 pyupgrade 规则的触发行为。可用ruff check --show-settings查看解析后的target-version验证使用 Airflow 相关规则码的项目需对照 0.11.3 起的规则码迁移记录核对配置依赖ruff format退出码的 CI 脚本可考虑改用--exit-non-zero-on-format获得“有文件被改动即失败”的语义preview 相关的 syntax-errors 检测在整个 0.11.x 系列中持续变动且默认不启用建议在稳定化之前不要在非 preview 流程中依赖其输出。本系列变更记录的完整明细含全部 PR 编号见 changelogs/0.11.x.md版本推断的现行文档表述见 docs/configuration.md。【免费下载链接】ruffAn extremely fast Python linter and code formatter, written in Rust.项目地址: https://gitcode.com/GitHub_Trending/ru/ruff创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

为什么这个进程在运行:用 witr 追踪进程因果链的完整指南

为什么这个进程在运行:用 witr 追踪进程因果链的完整指南

2026/9/6 19:41:13

为什么这个进程在运行:用 witr 追踪进程因果链的完整指南 【免费下载链接】witr Why is this running? Trace any process, port, container, or file back to what started it - CLI TUI. 项目地址: https://gitcode.com/GitHub_Trending/wi/witr 某个端…

B端系统数据迁移全指南:从Oracle 12c到达梦,避开这些坑才能顺利上线

B端系统数据迁移全指南:从Oracle 12c到达梦,避开这些坑才能顺利上线

2026/9/6 19:31:12

简介:这是一份面向B端产品经理、项目经理及系统实施人员的资源,专门总结新老系统切换过程中数据迁移的关键要点与实践经验。内容覆盖数据迁移的典型场景、三种常见系统切换方式,并系统梳理迁移内容:包括基础数据、字典数据、用户数…

Anthropic开源Commerce Agents:购物与商户智能体如何把审批写进工具链

Anthropic开源Commerce Agents:购物与商户智能体如何把审批写进工具链

2026/9/6 19:31:12

商品搜索、加入购物车、人工付款,在很多电商系统里由不同模块负责。搜索归搜索引擎管,购物车归前端状态管,付款跳到收银台后,前面搜过什么、聊过什么常常就丢了。让顾客重新说一遍,顾客可能直接离开。Anthropic在2026年…

铁塔运维监控平台建设实战:从FSU数据采集到告警风暴治理

铁塔运维监控平台建设实战:从FSU数据采集到告警风暴治理

2026/9/6 20:51:16

简介:作为通信铁塔运维领域的系统培训材料,《中国铁塔运维监控系统》以二期建设为背景,面向运维人员、区域管理员和培训讲师,聚焦账号权限配置、站址管理、运维管理优化三大模块。文档详细讲解各省管理员账号体系、新增代维与铁塔…

从哑资源到可视化:运维监控系统搭建实战指南

从哑资源到可视化:运维监控系统搭建实战指南

2026/9/6 20:51:16

简介:中国铁塔运维监控系统(二期)全国培训材料,面向通信行业运维管理人员、各省铁塔管理员及一线代维人员,系统讲解账号权限配置、站址管理、运维管理优化三大板块。文档不仅覆盖各省管理员账号分配、代维/铁塔账号新增…

猫抓Cat-Catch:浏览器资源嗅探扩展指南

猫抓Cat-Catch:浏览器资源嗅探扩展指南

2026/9/6 20:51:16

猫抓Cat-Catch:浏览器资源嗅探扩展指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 视频在播,下载按钮却消失了 你在核…

TrollStore 完整使用指南:iOS 上永久签名安装 IPA 的实操手册

TrollStore 完整使用指南:iOS 上永久签名安装 IPA 的实操手册

2026/9/6 20:51:16

TrollStore 完整使用指南:iOS 上永久签名安装 IPA 的实操手册 【免费下载链接】TrollStore Jailed iOS app that can install IPAs permanently with arbitary entitlements and root helpers because it trolls Apple 项目地址: https://gitcode.com/GitHub_Tren…

Slidev:开发者导向的 Markdown 幻灯片方案——从 npm init slidev 到导出、主题与远程控制的完整实践

Slidev:开发者导向的 Markdown 幻灯片方案——从 npm init slidev 到导出、主题与远程控制的完整实践

2026/9/6 20:51:16

Slidev:开发者导向的 Markdown 幻灯片方案——从 npm init slidev 到导出、主题与远程控制的完整实践 【免费下载链接】slidev Presentation Slides for Developers 项目地址: https://gitcode.com/GitHub_Trending/sl/slidev Slidev 是一个面向开发者的幻灯片制作与演示…

GNSS-R技术复现:基于CYGNSS数据的鄱阳湖水域面积动态监测

GNSS-R技术复现:基于CYGNSS数据的鄱阳湖水域面积动态监测

2026/9/6 20:41:15

简介:一份针对基于星载GNSS-R技术的鄱阳湖水域面积动态监测的论文复现资料,主要面向从事遥感技术研究、水资源管理与灾害防控的专业人员,也适合对GNSS-R方法感兴趣的科研工作者。资料以PDF格式呈现,共1个文件,约871KB&…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

中国人民大学杨琳团队《Nature Communications》 | 全球潮汐湿地土壤有机碳时空格局与环境驱动:一项2009-2020年的全球评估

2026/9/6 1:19:56

本文首发于“生态学者”!从“湿地面积”到“土壤碳密度”:为什么需要重新认识潮汐湿地蓝碳变化?潮汐湿地位于陆地与海洋的交汇地带,包括红树林、盐沼和潮滩,是全球重要的蓝碳生态系统。其土壤能够长期储存大量有机碳&a…

adb抓包

adb抓包

2026/9/6 1:19:56

前言 本文介绍如何通过 tcpdump 在 Android 手机上抓取网络数据包,并在电脑端使用 Wireshark 进行分析。适用于需要排查 App 网络请求、分析接口调用或调试网络问题的开发与测试场景。1. 手机要有 root 权限2. 下载 tcpdump3. adb push C:\Users\zhangkuixun\Downlo…

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战

2026/9/6 1:19:56

大模型推理镜像极简瘦身:从 25GB 巨无霸到 3GB 精简镜像实战 在云原生基础设施中,容器镜像体积直接决定了服务的部署速度与弹性扩容敏捷度。对于传统的 Go / Java 微服务,镜像体积通常被严格控制在 50MB 到 200MB 以内,拉取镜像只…

远程协作的工作台整理

远程协作的工作台整理

2026/9/3 6:56:24

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/4 7:42:10

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/5 23:14:13

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…