#python #静态分析 #检查 #性能 #检查器 #错误 #转换

bin+lib pylyzer

Python 的静态代码分析器和语言服务器

59 个版本

0.1.0-beta.02023 年 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 编程语言

Download history 229/week @ 2024-05-04 43/week @ 2024-05-11 39/week @ 2024-05-18 29/week @ 2024-05-25 33/week @ 2024-06-01 18/week @ 2024-06-08 13/week @ 2024-06-15 9/week @ 2024-06-22 75/week @ 2024-06-29 306/week @ 2024-07-06 27/week @ 2024-07-13 19/week @ 2024-07-20 110/week @ 2024-07-27 156/week @ 2024-08-03 293/week @ 2024-08-10 269/week @ 2024-08-17

每月 832 次下载

MIT/Apache

1.5MB
3K SLoC

pylyzer ⚡

pylyzer_logo_with_letters

vsm-version Build status Build status

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 实现的。

performance

  • 详细分析 🩺

pylyzer 可以做的不仅仅是类型检查。例如,它可以检测列表越界访问和对字典中不存在键的访问。

analysis

  • 报告可读性 📖

虽然 pytype/pyright 的错误报告难以阅读,但 pylyzer 显示了错误发生的位置,并提供了清晰的错误消息。

pylyzer 😃

report

pyright 🙃

pyright_report

  • 丰富的 LSP 支持 📝

作为语言服务器,pylyzer 支持各种功能,例如自动完成和重命名(语言服务器是基于 Erg 语言服务器 (ELS) 的适配。有关已实现的功能的更多信息,请参阅 这里)。

lsp_support

autoimport

VSCode 扩展

Ruff 有什么区别?

Ruff 与 pylyzer 类似,是一个用 Rust 编写的 Python 静态代码分析工具,但 Ruff 是一个代码检查工具,而 pylyzer 是类型检查器和语言服务器。pylyzer 不执行代码检查,而 Ruff 不执行类型检查。

工作原理

pylyzer 使用 Erg 编程语言 的类型检查器。这种语言是一种针对 Python 的转换语言,具有静态类型系统。

pylyzer 将 Python AST 转换为 Erg AST 并将其传递给 Erg 的类型检查器。然后,它将结果以适当的修改显示。

局限性

  • pylyzer 的类型检查器仅假设(可能)静态类型代码,因此您不能检查使用反射的任何代码,例如 execsetattr 等。

  • pylyzer(= Erg 的类型系统)有自己的 Python 标准API类型声明。所有API的类型化并不完整,可能会导致错误,提示该API不存在。

待办事项

  • 类型检查
    • 变量
    • 运算符
    • 函数/方法
  • 类型推断
    • 变量
    • 运算符
    • 函数/方法
  • 内置模块解析(部分)
  • 本地脚本解析
  • 本地包解析
  • 集合类型
    • 列表
    • 字典
    • 元组
  • 类型注解
    • 联合
    • 可选
    • 字面量
    • 可调用
    • 类型别名
    • 类型变量(TypeVarGeneric
    • 协议
    • 最终
    • 注解
    • 类型别名
    • 类型守卫(TypeGuard
    • 其他
  • 集合.abc
    • 可迭代
    • 迭代器
    • 映射
    • 序列
    • 其他
  • 类型断言(typing.cast
  • 类型缩小(isisinstance

1 性能测试是在 2016 年初的 MacBook 上进行的,该 MacBook 配备 1.1 GHz 英特尔 Core m3 处理器和 8 GB 1867 MHz LPDDR3 内存。

依赖关系

~11–19MB
~337K SLoC