0.4.0 版本更新说明:
全新的手写解析器
Ruff的新解析器运行速度提高了两倍以上,这意味着所有的linting(代码静态检查)和格式化调用都将获得20%-40%的性能提升。关于这一令人激动的变化,有很多细节可以讨论,因此请查阅博客文章以获取更多信息!
Rust编写的新语言服务器
随着此次发布,我们还想重点介绍我们的新语言服务器。ruff server是一个内置于Ruff的、由Rust驱动的语言服务器。它可以与任何支持语言服务器协议(LSP)的编辑器一起使用。它采用了受rust-analyzer启发的多线程、无锁架构,并将为许多令人兴奋的功能敞开大门。它还比我们之前基于Python的语言服务器更快——不过,你可能已经猜到了这一点。
虽然ruff server目前还处于alpha阶段,但它已经具备了许多今天就可以尝试的功能:
- 自动对Python文件进行lint检查,并在可用时显示快速修复建议
- 支持范围格式化的Python文件格式化功能
- 带有用于快速执行操作的命令:ruff.applyAutofix、ruff.applyFormat和ruff.applyOrganizeImports
- 支持source.fixAll和source.organizeImports源代码操作
- 当您更改项目配置时,会自动重新加载项目配置
预览功能
[pycodestyle] 在具有虚拟主体的函数/方法之后的defs上不触发E3规则
[pylint] 实现invalid-bytes-returned(E0308)规则
[pylint] 实现invalid-length-returned(E0303)规则
[pylint] 实现self-cls-assignment(W0642)规则
[pylint] 忽略invalid-bool和invalid-str-return-type规则中的存根
[ruff] 新增unused-async(RUF029)规则,用于检测函数上不必要的async关键字
规则变更
[flake8-bandit] 允许urllib.request.urlopen调用具有静态Request参数(S310)
[flake8-bugbear] 将仅包含raise NotImplemented的函数体视为存根函数(B006)
[flake8-slots] 尊重相同文件中的Enum子类(SLOT000)
[pylint] 支持反向比较(PLR1730)
Linter(代码静态检查)
改进linter规则中内置符号的处理
改进--show-settings中规则的显示
改进BuiltinTypeChecker的推断能力
根据脚本名称解析类和函数
提高RuleTable::any_enabled的性能
服务器
本节专门介绍我们新编写的、基于Rust的语言服务器的更新。
启用针对ruff的特定源代码操作
当文件配置发生变化时,刷新打开文件的诊断信息
现在将重要错误显示为弹出窗口
引入用于直接配置linter和格式化的设置
单独为每个文档解析配置
为Neovim编写设置指南
配置
添加RUFF_OUTPUT_FILE环境变量支持
Bug修复
避免对非增强型赋值使用反向、非交换运算符(PLR6104)
将交换非增强型赋值限制为原始数据类型(PLR6104)
尊重RUF100对blanket # noqa的每文件忽略
考虑带项目的括号解析中的if表达式
考虑带项目的括号解析中的二元表达式
为所有类型的括号重置FOR_TARGET上下文