文章目录
- [Jedi:Python 自动补全与静态分析的实用工具](#Jedi:Python 自动补全与静态分析的实用工具)
-
- 编辑器支持覆盖主流平台
- [功能实用,API 简洁](#功能实用,API 简洁)
- 语言服务器生态
- 使用场景
Jedi:Python 自动补全与静态分析的实用工具
davidhalter/jedi 在 GitHub 上有 6150 颗星。这个 Python 静态分析工具主要服务于 IDE 和编辑器插件,核心功能是自动补全和跳转定义,也涵盖重构、代码搜索和引用查找。
写 Python 代码时,自动补全的体验直接影响效率。Jedi 在这方面专注做好一件事:理解 Python 代码,给编辑器提供准确的补全建议和定义跳转。它的设计理念很务实,不追求大而全的功能集,而是把最常用的场景做扎实。

编辑器支持覆盖主流平台
Vim 有 jedi-vim 和 YouCompleteMe,VS Code 的 Python 扩展底层也在用 Jedi,Emacs 和 Sublime Text 同样有对应的集成方案。IPython 6.0 起把 Jedi 作为内置依赖,安装后直接获得自动补全能力。
编辑器覆盖这么广,核心原因是 Jedi 的 API 设计。编辑器作者调用 Script.complete 就能实现自动补全,调用 Script.goto 做定义跳转,每项功能拆成独立方法,集成成本很低。Kate、GNOME Builder、xonsh shell 这些相对小众的平台也都有对应的 Jedi 集成。
功能实用,API 简洁
Jedi 的核心命令数量不多,每个解决一个具体问题。complete 做自动补全,infer 做类型推断,goto 跳转到定义,get_references 查找全部引用,get_signatures 获取函数签名。这些覆盖了日常编码中最高频的操作。
重构方面,rename 变量重命名、inline 内联、extract_function 提取函数、extract_variable 提取变量,补齐了 IDE 级别的重构能力。对于日常重构场景,这些方法不需要依赖外部工具,直接在编辑器内完成。
Jedi 还能通过 get_syntax_errors 在编辑器中标出语法错误,通过 search 和 project search 做模块级和项目级的代码搜索。写类和函数名时输入点号,补全列表就弹出来了,响应速度很快,没有明显的延迟感。
Jedi 对跨版本兼容也处理得不错,支持 Python 3.10 以上版本。它可以分析不同 Python 版本的代码,也能配合 virtualenv 使用,在多环境开发时仍然能提供正确的补全。

语言服务器生态
LSP 协议普及后,Jedi 衍生出多个语言服务器。jedi-language-server 专门基于 Jedi 为 LSP 构建,python-lsp-server 也以 Jedi 为底层分析引擎。这意味着任何支持 LSP 协议的编辑器,都能通过语言服务器接入 Jedi 的能力,不需要逐个编辑器单独开发插件。
使用场景
安装只需一行 pip install jedi。如果使用 IPython,连这一步都省了,Jedi 直接可用。
对于普通开发者,Jedi 在输入时提供补全,在阅读代码时支持跳转和类型推断,减少上下文切换的时间。对于插件开发者,Jedi 的 API 结构清晰,接入成本低。对于大型项目,project search 可以在整个代码库中搜索函数、类和变量定义,不限于单个文件。
在静态分析领域,Jedi 选择了务实的路线:不做全面的类型检查,专注给编辑器提供实时准确的代码信息。6150 星的社区认可度说明这个方向是对的。项目作者还推出了 Rust 实现的后继者 Zuban,性能进一步提升。
如果你用 Python 做开发,可以给编辑器装上 Jedi 插件试一下。它的自动补全和代码导航能力在日常编码中能实实在在节省时间,而且免费开源,没有使用限制。
补全和代码导航能力在日常编码中能实实在在节省时间,而且免费开源,没有使用限制。