用于文本编辑器的Python自动完成工具。
项目描述
Jedi是一个用于Python的静态分析工具,通常用于IDEs/编辑器插件。Jedi专注于自动完成和goto功能。其他功能包括重构、代码搜索和查找引用。
Jedi有一个简单的API来工作。有一个作为VIM插件的参考实现。在您的REPL中进行自动完成也是可能的,IPython原生支持它,对于CPython REPL,您可以安装它。Jedi经过良好的测试,错误应该很少。
Jedi目前可以与以下编辑器/项目一起使用
Vim (jedi-vim, YouCompleteMe, deoplete-jedi, completor.vim)
Emacs (Jedi.el,company-mode,elpy,anaconda-mode,ycmd)
Sublime Text (SublimeJEDI [ST2 + ST3],anaconda [仅ST3])
TextMate(不确定是否实际可行)
GNOME Builder(支持 GObject Introspection)
Gedit(gedi)
wdb - 网页调试器
还有更多!
有一些语言服务器使用Jedi
python-language-server(目前未维护)
python-lsp-server(python-language-server的分支)
以下是一些来自jedi-vim的截图
几乎所有的补全
文档
从github获取最新版本(master分支应该始终是某种稳定/工作状态)。
文档在https://jedi.readthedocs.org/en/latest/。带有增强和/或修复的pull requests非常棒,也最受欢迎。Jedi使用语义版本控制。
如果您想保持最新状态,请订阅此邮件列表:https://groups.google.com/g/jedi-announce。订阅只需发送一封空邮件到jedi-announce+subscribe@googlegroups.com。
问题和疑问
您可以在python-jedi的Stack Overflow上提问。
安装
查看文档.
功能和限制
Jedi的功能在此处列出:功能。
您可以在Python 3.6+上运行Jedi,但它也应该能够理解比这些版本更旧的代码。此外,您应该能够很好地使用Virtualenvs。
如何高效使用Jedi的技巧可以在这里找到。
API
您可以在这里找到API的全面文档。
自动补全/转到/文档
以下是一些命令
jedi.Script.goto
jedi.Script.infer
jedi.Script.help
jedi.Script.complete
jedi.Script.get_references
jedi.Script.get_signatures
jedi.Script.get_context
返回的对象非常强大,实际上可能需要的一切。
在您的REPL(IPython等)中进行自动补全
Jedi是IPython的依赖项。因此,无需额外配置即可在IPython中使用Jedi进行自动补全。
这里是一个示例视频,展示了REPL补全的样子。对于Python shell,你可以在REPL中启用Tab补全,请参考这里。
静态分析
对于许多静态分析形式,你可以尝试使用jedi.Script(...).get_names。它将返回一个你可以过滤和处理的名称列表。还有一种列出文件中语法错误的方法:jedi.Script.get_syntax_errors。
重构
Jedi支持以下重构
jedi.Script.inline
jedi.Script.rename
jedi.Script.extract_function
jedi.Script.extract_variable
代码搜索
支持使用jedi.Script.search进行模块搜索,以及使用jedi.Project.search进行项目搜索。搜索方式可以是提供名称,例如foo,或者使用点语法,例如foo.bar。此外,你可以提供API类型,如class foo.bar.Bar。还有函数jedi.Script.complete_search和jedi.Project.complete_search。
开发
有一个相当全面且详尽的开发文档。
测试
测试套件使用pytest。
pip install pytest
如果你只想测试特定的Python版本(例如Python 3.8),这很简单,就像
python3.8 -m pytest
更多详细信息请访问测试文档。
致谢
非常感谢所有的贡献者!
变更日志
未发布
0.19.1 (2023-10-02)
Python 3.12支持(感谢Peter!)
0.19.0 (2023-07-29)
Python 3.11支持
对于
(例如IPython)用户,性能有大幅提升。这尤其影响了拥有大量数据集的 用户。 添加jedi.settings.allow_unsafe_interpreter_executions以使IPython用户更容易避免不安全的执行。
0.18.2 (2022-11-21)
添加了与attrs.define等效的数据类
从Pytest入口点查找固定设置;例如,这样安装的pytest插件有pytest-django、pytest-sugar和Faker。
修复了涉及venv的Project.search,因此例如在某些情况下,jedi-vim中的:Pyimport django.db无法正常工作。
以及许多较小的错误修复
0.18.1 (2021-11-17)
隐式命名空间现在在Name().type中是单独的类型
Python 3.10支持
主要是错误修复
0.18.0 (2020-12-25)
弃用了Python 2和Python 3.5
在大多数地方使用pathlib.Path()作为输出而不是str:- Project.path - Script.path - Definition.module_path - Refactoring.get_renames - Refactoring.get_changed_files
现在在Name().type中,具有@property的函数返回property而不是function
开始使用注解
更好地支持walrus运算符
现在可以读取项目属性
移除了所有弃用项
这可能是1.0之前最后一个次要版本。
0.17.2 (2020-07-17)
添加了一个选项,可以将环境变量传递给Environment
Project(...).path现在存在
支持Python 3.9
一些错误修复
这将是不再支持Python 2和Python 3.5的最后一个版本。0.18.0将是Python 3.6+。
0.17.1 (2020-06-20)
Django
元类支持 支持 Django 管理器(在管理器/查询集上完成)
将 Django Stubs 添加到 Jedi,感谢 Django Stubs 项目的所有贡献者
添加了 SyntaxError.get_message
支持 Python 3.9
修复了错误(主要针对泛型)
0.17.0 (2020-04-14)
添加了对 Project 的支持。这允许用户指定 Jedi 应该与之一起工作的文件夹。
添加了对重构的支持。已实现以下重构:Script.rename、Script.inline、Script.extract_variable 和 Script.extract_function。
添加了 Script.get_syntax_errors 以显示当前脚本中的语法错误。
添加了对单个文件和项目的代码搜索功能。新函数是 Project.search、Project.complete_search、Script.search 和 Script.complete_search。
添加了 Script.help 以便于显示帮助窗口。现在返回 Python 关键词/操作符的 pydoc 信息。这意味着在类关键词上现在将返回 Python 内置函数 help('class') 的文档字符串。
API 文档现在更加易读且完整。请查看 https://jedi.readthedocs.io。其中大部分已经重写。
移除了 Python 3.4 支持
许多错误修复
这可能是最后一个支持 Python 2 和 Python 3.5 的小版本。在 0.17.1+ 中将提供错误修复。下一个小版本/大版本可能是 Jedi 1.0.0。
0.16.0 (2020-01-26)
添加了 Script.get_context 以获取当前所在信息。
支持对 Pytest 修复件的补全/类型推断。
在第一次使用后,Tensorflow、Numpy 和 Pandas 的补全应该现在大约快 4-10倍。
字典键补全现在可以工作。例如,d = {1000: 3}; d[10 将展开为 1000。
“代理”的补全现在可以工作。这些是在加载后具有 __getattr__(self, name) 方法的类,该方法执行 return getattr(x, name)。
在类中的函数/属性上的“转到”现在会转到其超类中的定义。
- 重要的 Script API 变更
jedi.Script 的行和列参数现在已弃用
completions 已弃用,请使用 complete 代替
goto_assignments 已弃用,请使用 goto 代替
goto_definitions 已弃用,请使用 infer 代替
call_signatures 已弃用,请使用 get_signatures 代替
usages 已弃用,请使用 get_references 代替
jedi.names 已弃用,请使用 jedi.Script(...).get_names()
BaseName.goto_assignments 已重命名为 BaseName.goto
将 follow_imports 添加到 Name.goto。现在其签名与 Script.goto 相匹配。
Python 2 支持 已弃用。对于此版本,将尽力而为。Python 2 已达到生命的尽头,现在只是关于平稳过渡。Python 2 的错误将不再修复,并且已经有三分之一的测试被跳过。
已移除 settings.no_completion_duplicates。它未经过测试,而且可能没有人使用它。
已删除 settings.use_filesystem_cache 和 settings.additional_dynamic_modules,它们现在不再被使用。可能几乎没有人使用它们。
0.15.2 (2019-12-20)
签名检测现在更好
添加模糊补全功能,使用 Script(...).completions(fuzzy=True)
超过1MB(约20kLOC)的文件将被裁剪以避免完全卡住。
许多小错误修复
关于上下文/值的重大重构
0.15.1 (2019-08-13)
小的错误修复和删除了一个打印语句
0.15.0 (2019-08-11)
添加了文件路径补全,现在有一个新的 Completion.type: path。例如: '/ho -> '/home/
*args/**kwargs 解析。如果可能,Jedi 将用实际替代方案替换参数。
对枚举和数据类的更好支持
在使用解释器时,现在将执行属性,因为很多人对此表示不满。讨论在 #1299,#1347。
新API
Name.get_signatures() -> List[Signature]。签名类似于 CallSignature。因此,Name.params 已弃用。
Signature.to_string() 用于格式化签名。
Signature.params -> List[ParamName],ParamName 具有以下附加属性 infer_default(),infer_annotation(),to_string() 和 kind。
Name.execute() -> List[Name],使得推断函数的返回值成为可能。
0.14.1 (2019-07-13)
CallSignature.index 现在应该工作得更好
一些较小的错误修复
0.14.0 (2019-06-20)
添加了 goto_*(prefer_stubs=True) 以及 goto_*(prefer_stubs=True)
现在使用存根进行类型推断
使用 Typeshed 进行更好的类型推断
重构了 Name.full_name,应该有更正确的返回值
0.13.3 (2019-02-24)
修复了与嵌入式 Python 相关的问题,请参阅 https://github.com/davidhalter/jedi-vim/issues/870
0.13.2 (2018-12-15)
修复了导致 Jedi 启动大量子进程的错误。
0.13.1 (2018-10-02)
错误修复,因为 tensorflow 补全仍然很慢。
0.13.0 (2018-10-02)
一个小版本。一些错误修复。
移除 Python 3.3 支持。Python 基金会已经停止支持 Python 3.3。
默认环境现在使用与 Python 进程相同的 Python 版本。在 0.12.x 中,我们曾经使用系统上最新的 Python 版本。
将 include_builtins 添加为 usages 的参数。
goto_assignments 有一个新的 follow_builtin_imports 参数,它略微改变了先前的行为。
0.12.1 (2018-06-30)
此版本强制您升级 parso。如果不这样做,则将无法使用任何功能。否则,更改应仅限于错误修复。不幸的是,Jedi 仍然使用一些 parso 的内部功能,这使得在多个版本之间保持兼容性变得困难。需要 Parso >=0.3.0。
0.12.0 (2018-04-15)
虚拟环境/环境支持
F-String 补全/转到支持
不再因段错误而崩溃
清理了导入逻辑
理解 async/await 并自动补全它(包括异步生成器)
更好的命名空间补全
Windows 测试通过(包括 Windows 的 CI)
移除 Python 2.6 支持
0.11.1 (2017-12-14)
Parso 更新 - 缓存层已损坏
更好的 usages - 大量内部代码被移除并改进。
0.11.0 (2017-09-20)
将 Jedi 的解析器拆分为一个名为 parso 的独立项目。
避免在REPL完成时产生副作用。
Numpy文档字符串支持应该会更好。
移除了settings.*recursion*,它们现在不可用。
0.10.2 (2017-04-05)
Python打包很糟糕。某些文件没有包含在0.10.1中。
0.10.1 (2017-04-05)
修复了一些非常烦人的bug。
准备将解析器从Jedi中提取出来。
0.10.0 (2017-02-03)
为完整的Python语法提供实际语义完成。
为yield from PEP 380提供基本类型推断。
支持PEP 484(其中大部分重要功能)。感谢Claude!(@reinhrst)
将get_line_code添加到Name和Completion对象中。
完全重写了类型推断引擎。
为(快速)解析Python代码的差异提供了一种新的、更好的解析器。
0.9.0 (2015-04-10)
将导入逻辑重写得更像Python的。现在有一个InferState.modules导入缓存,类似于sys.modules。
集成了2to3的解析器。这将使重构成为可能。将来也可以检查错误消息(例如编译AST会产生的错误)。
使用新的解析器,类型推断也完全改变。现在它更简单、更易读。
完全重写了REPL完成。
添加了jedi.names,一个执行静态分析的命令。感谢sourcegraph团队赞助此功能!
Alpha版本的linter。
0.8.1 (2014-07-23)
错误修复版本,最后一个版本忘记包含改进内置库自动完成的文件。已修复。
0.8.0 (2014-05-05)
编译模块(例如内置的、sys)的内存消耗已大幅减少。加载时间也有所下降(基本上与导入一样长)。
REPL完成开始变得可用。
各种小的API更改。总的来说,这个版本侧重于稳定性和内部API的重构。
引入了运算符优先级,这使得计算正确的数组索引和__getattr__字符串成为可能。
0.7.0 (2013-08-09)
从LGPL切换到MIT许可。
将解释器类添加到API中,以使REPL中的自动完成成为可能。
添加了对命名空间包的自动完成支持。
添加了sith.py,一种新的随机测试方法。
0.6.0 (2013-05-14)
具有内置部分缓存的更快解析器。
测试套件,感谢@tkf。
0.5版本(2012)
初始开发。
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。
源分发
构建分发
jedi-0.19.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd |
|
MD5 | 0951191b506b660bfdb90c3dcd5b3254 |
|
BLAKE2b-256 | d69999b493cec4bf43176b678de30f81ed003fd6a647a301b9c927280c600f0a |
jedi-0.19.1-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0 |
|
MD5 | 66c96aae3dd3cb44deba24b1fbdab5a8 |
|
BLAKE2b-256 | 209fbc63f0f0737ad7a60800bfd472a4836661adae21f9c2535f3957b1e54ceb |