Jedi:Python 自动补全与静态分析的实用工具

文章目录

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 插件试一下。它的自动补全和代码导航能力在日常编码中能实实在在节省时间,而且免费开源,没有使用限制。

补全和代码导航能力在日常编码中能实实在在节省时间,而且免费开源,没有使用限制。

相关推荐
高级程序源7 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe8 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic8 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna8 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
必须得开心呀9 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan9 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂9 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师10 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan10 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
WeiXin_DZbishe10 小时前
基于springboot城市公交实时运营与调度系统-计算机毕设 附源码【课程设计】66173
java·vue.js·spring boot·后端·python·php·课程设计