59 个版本
0.1.0-beta.0 | 2023 年 5 月 25 日 |
---|---|
0.0.60 | 2024 年 8 月 18 日 |
0.0.56 | 2024 年 7 月 7 日 |
0.0.51 | 2023 年 12 月 12 日 |
0.0.3 | 2022 年 12 月 29 日 |
#192 in 编程语言
每月 832 次下载
1.5MB
3K SLoC
pylyzer ⚡
pylyzer
是一个用 Rust 编写的 Python 静态代码分析器/语言服务器。
安装
cargo (Rust 软件包管理器)
cargo install pylyzer
请确保 cargo/rustc
是最新的,因为 pylyzer 可能使用了最新的语言特性。
pip
pip install pylyzer
如果这样安装,您还需要安装 Erg。
curl -L https://github.com/mtshiba/ergup/raw/main/ergup.py | python3
GitHub 发布
与 pylint、pyright、pytype 等相比的优势是什么?
- 性能 🌟
平均而言,pylyzer 检查 Python 脚本的速度比 pytype 和 pyright 快 100 多倍。这主要归功于 pylyzer 是用 Rust 实现的。
- 详细分析 🩺
pylyzer 可以做的不仅仅是类型检查。例如,它可以检测列表越界访问和对字典中不存在键的访问。
- 报告可读性 📖
虽然 pytype/pyright 的错误报告难以阅读,但 pylyzer 显示了错误发生的位置,并提供了清晰的错误消息。
pylyzer 😃
pyright 🙃
- 丰富的 LSP 支持 📝
作为语言服务器,pylyzer 支持各种功能,例如自动完成和重命名(语言服务器是基于 Erg 语言服务器 (ELS) 的适配。有关已实现的功能的更多信息,请参阅 这里)。
VSCode 扩展
与 Ruff 有什么区别?
Ruff 与 pylyzer 类似,是一个用 Rust 编写的 Python 静态代码分析工具,但 Ruff 是一个代码检查工具,而 pylyzer 是类型检查器和语言服务器。pylyzer 不执行代码检查,而 Ruff 不执行类型检查。
工作原理
pylyzer 使用 Erg 编程语言 的类型检查器。这种语言是一种针对 Python 的转换语言,具有静态类型系统。
pylyzer 将 Python AST 转换为 Erg AST 并将其传递给 Erg 的类型检查器。然后,它将结果以适当的修改显示。
局限性
-
pylyzer 的类型检查器仅假设(可能)静态类型代码,因此您不能检查使用反射的任何代码,例如
exec
、setattr
等。 -
pylyzer(= Erg 的类型系统)有自己的 Python 标准API类型声明。所有API的类型化并不完整,可能会导致错误,提示该API不存在。
待办事项
- 类型检查
- 变量
- 运算符
- 函数/方法
- 类
- 类型推断
- 变量
- 运算符
- 函数/方法
- 类
- 内置模块解析(部分)
- 本地脚本解析
- 本地包解析
- 集合类型
-
列表
-
字典
-
元组
-
-
类型注解
-
联合
-
可选
-
字面量
-
可调用
-
类型别名
- 类型变量(
TypeVar
、Generic
) -
协议
-
最终
-
注解
-
类型别名
- 类型守卫(
TypeGuard
) - 其他
-
集合.abc
-
可迭代
-
迭代器
-
映射
-
序列
- 其他
-
- 类型断言(
typing.cast
) - 类型缩小(
is
、isinstance
)
1 性能测试是在 2016 年初的 MacBook 上进行的,该 MacBook 配备 1.1 GHz 英特尔 Core m3 处理器和 8 GB 1867 MHz LPDDR3 内存。↩
依赖关系
~11–19MB
~337K SLoC