Package: jedi
Jedi is a static analysis tool for Python that is typically used in
IDEs/editors plugins. Jedi has a focus on autocompletion and goto
functionality. Other features include refactoring, code search and finding
references.Jedi has a simple API to work with. There is a reference implementation as aVIM-Plugin. Autocompletion in your
REPL is also possible, IPython uses it natively and for the CPython REPL you
can install it. Jedi is well tested and bugs should be rare.Jedi can currently be used with the following editors/projects:Vim (jedi-vim,YouCompleteMe,deoplete-jedi,completor.vim)Visual Studio Code(viaPython Extension)Emacs (Jedi.el,company-mode,elpy,anaconda-mode,ycmd)Sublime Text (SublimeJEDI[ST2 + ST3],anaconda[only ST3])TextMate(Not sure if it’s actually working)Kateversion 4.13+ supports it natively, you have to enable it, though.  [see]Atom(autocomplete-python-jedi)GNOME Builder(with support for GObject Introspection)Gedit (gedi)wdb- Web DebuggerEric IDEIPython 6.0.0+xonsh shellhasjedi extensionand many more!There are a few language servers that use Jedi:jedi-language-serverpython-language-server(currently unmaintained)python-lsp-server(fork from python-language-server)anakin-language-serverHere are some pictures taken fromjedi-vim:Completion for almost anything:Documentation:Get the latest version fromgithub(master branch should always be kind of stable/working).Docs are available athttps://jedi.readthedocs.org/en/latest/. Pull requests with enhancements
and/or fixes are awesome and most welcome. Jedi usessemantic versioning.If you want to stayup-to-datewith releases, pleasesubscribeto this
mailing list:https://groups.google.com/g/jedi-announce. To subscribe you can
simply send an empty email tojedi-announce+subscribe@googlegroups.com.Issues & QuestionsYou can file issues and questions in theissue tracker
<https://github.com/davidhalter/jedi/>. Alternatively you can also ask onStack Overflowwith
the labelpython-jedi.InstallationCheck out the docs.Features and LimitationsJedi’s features are listed here:Features.You can run Jedi on Python 3.6+ but it should also
understand code that is older than those versions. Additionally you should be
able to useVirtualenvsvery well.Tips on how to use Jedi efficiently can be foundhere.APIYou can find a comprehensive documentation for theAPI here.Autocompletion / Goto / DocumentationThere are the following commands:jedi.Script.gotojedi.Script.inferjedi.Script.helpjedi.Script.completejedi.Script.get_referencesjedi.Script.get_signaturesjedi.Script.get_contextThe returned objects are very powerful and are really all you might need.Autocompletion in your REPL (IPython, etc.)Jedi is a dependency of IPython. Autocompletion in IPython with Jedi is
therefore possible without additional configuration.Here is anexample videohow REPL completion
can look like.
For thepythonshell you can enable tab completion in aREPL.Static AnalysisFor a lot of forms of static analysis, you can try to usejedi.Script(...).get_names. It will return a list of names that you can
then filter and work with. There is also a way to list the syntax errors in a
file:jedi.Script.get_syntax_errors.RefactoringJedi supports the following refactorings:jedi.Script.inlinejedi.Script.renamejedi.Script.extract_functionjedi.Script.extract_variableCode SearchThere is support for module search withjedi.Script.search, and project
search forjedi.Project.search. The way to search is either by providing a
name likefooor by using dotted syntax likefoo.bar. Additionally you
can provide the API type likeclass foo.bar.Bar. There are also the
functionsjedi.Script.complete_searchandjedi.Project.complete_search.DevelopmentThere’s a pretty good and extensivedevelopment documentation.TestingThe test suite usespytest:pip install pytestIf you want to test only a specific Python version (e.g. Python 3.8), it is as
easy as:python3.8 -m pytestFor more detailed information visit thetesting documentation.AcknowledgementsThanks a lot to all thecontributors!ChangelogUnreleased0.19.1 (2023-10-02)Python 3.12 support (Thanks Peter!)0.19.0 (2023-07-29)Python 3.11 supportMassive improvements in performance forInterpreter(e.g. IPython) users.
This especially affectspandasusers with large datasets.Addjedi.settings.allow_unsafe_interpreter_executionsto make it easier
for IPython users to avoid unsafe executions.0.18.2 (2022-11-21)Added dataclass-equivalent for attrs.defineFind fixtures from Pytest entrypoints; Examples of pytest plugins installed
like this are pytest-django, pytest-sugar and Faker.Fixed Project.search, when a venv was involved, which is why for example:Pyimport django.dbdid not work in some cases in jedi-vim.And many smaller bugfixes0.18.1 (2021-11-17)Implict namespaces are now a separate types inName().typePython 3.10 supportMostly bugfixes0.18.0 (2020-12-25)Dropped Python 2 and Python 3.5Usingpathlib.Path()as an output instead ofstrin most places:
-Project.path-Script.path-Definition.module_path-Refactoring.get_renames-Refactoring.get_changed_filesFunctions with@propertynow returnpropertyinstead offunctioninName().typeStarted using annotationsBetter support for the walrus operatorProject attributes are now read accessibleRemoved all deprecationsThis is likely going to be the last minor release before 1.0.0.17.2 (2020-07-17)Added an option to pass environment variables toEnvironmentProject(...).pathexists nowSupport for Python 3.9A few bugfixesThis will be the last release that supports Python 2 and Python 3.5.0.18.0will be Python 3.6+.0.17.1 (2020-06-20)DjangoModelmeta class supportDjango Manager support (completion on Managers/QuerySets)Added Django Stubs to Jedi, thanks to all contributors of theDjango StubsprojectAddedSyntaxError.get_messagePython 3.9 supportBugfixes (mostly towards Generics)0.17.0 (2020-04-14)AddedProjectsupport. This allows a user to specify which folders Jedi
should work with.Added support for Refactoring. The following refactorings have been
implemented:Script.rename,Script.inline,Script.extract_variableandScript.extract_function.AddedScript.get_syntax_errorsto display syntax errors in the current
script.Added code search capabilities both for individual files and projects. The
new functions areProject.search,Project.complete_search,Script.searchandScript.complete_search.AddedScript.helpto make it easier to display a help window to people.
Now returns pydoc information as well for Python keywords/operators.  This
means that on the class keyword it will now return the docstring of Python’s
builtin functionhelp('class').The API documentation is now way more readable and complete. Check it out
underhttps://jedi.readthedocs.io. A lot of it has been rewritten.Removed Python 3.4 supportMany bugfixesThis is likely going to be the last minor version that supports Python 2 and
Python3.5. Bugfixes will be provided in 0.17.1+. The next minor/major version
will probably be Jedi 1.0.0.0.16.0 (2020-01-26)AddedScript.get_contextto get information where you currently are.Completions/type inference ofPytest fixtures.Tensorflow, Numpy and Pandas completions should now be about4-10x fasterafter the first time they are used.Dict key completions are working now. e.g.d = {1000: 3}; d[10will
expand to1000.Completion for “proxies” works now. These are classes that have a__getattr__(self, name)method that does areturn getattr(x, name).
after loading them initially.Goto on a function/attribute in a class now goes to the definition in its
super class.BigScript API Changes:The line and column parameters ofjedi.Scriptare now deprecatedcompletionsdeprecated, usecompleteinsteadgoto_assignmentsdeprecated, usegotoinsteadgoto_definitionsdeprecated, useinferinsteadcall_signaturesdeprecated, useget_signaturesinsteadusagesdeprecated, useget_referencesinsteadjedi.namesdeprecated, usejedi.Script(...).get_names()BaseName.goto_assignmentsrenamed toBaseName.gotoAdd follow_imports toName.goto. Now its signature matchesScript.goto.Python 2 support deprecated. For this release it is best effort. Python 2
has reached the end of its life and now it’s just about a smooth transition.
Bugs for Python 2 will not be fixed anymore and a third of the tests are
already skipped.Removedsettings.no_completion_duplicates. It wasn’t tested and nobody
was probably using it anyway.Removedsettings.use_filesystem_cacheandsettings.additional_dynamic_modules, they have no usage anymore. Pretty
much nobody was probably using them.0.15.2 (2019-12-20)Signatures are now detected a lot betterAdd fuzzy completions withScript(...).completions(fuzzy=True)Files bigger than one MB (about 20kLOC) get cropped to avoid getting
stuck completely.Many small BugfixesA big refactoring around contexts/values0.15.1 (2019-08-13)Small bugfix and removal of a print statement0.15.0 (2019-08-11)Added file path completions, there’s anewCompletion.typenow:path. Example:'/ho->'/home/*args/**kwargsresolving. If possible Jedi replaces the parameters
with the actual alternatives.Better support for enums/dataclassesWhen using Interpreter, properties are now executed, since a lot of people
have complained about this. Discussion in #1299, #1347.New APIs:Name.get_signatures()->List[Signature]. Signatures are similar toCallSignature.Name.paramsis therefore deprecated.Signature.to_string()to format signatures.Signature.params->List[ParamName], ParamName has the
following additional attributesinfer_default(),infer_annotation(),to_string(), andkind.Name.execute()->List[Name], makes it possible to infer
return values of functions.0.14.1 (2019-07-13)CallSignature.index should now be working a lot betterA couple of smaller bugfixes0.14.0 (2019-06-20)Addedgoto_*(prefer_stubs=True)as well asgoto_*(prefer_stubs=True)Stubs are used now for type inferenceTypeshed is used for better type inferenceReworked Name.full_name, should have more correct return values0.13.3 (2019-02-24)Fixed an issue with embedded Python, seehttps://github.com/davidhalter/jedi-vim/issues/8700.13.2 (2018-12-15)Fixed a bug that led to Jedi spawning a lot of subprocesses.0.13.1 (2018-10-02)Bugfixes, because tensorflow completions were still slow.0.13.0 (2018-10-02)A small release. Some bug fixes.Remove Python 3.3 support. Python 3.3 support has been dropped by the Python
foundation.Default environments are now using the same Python version as the Python
process. In 0.12.x, we used to load the latest Python version on the system.Addedinclude_builtinsas a parameter to usages.goto_assignmentshas a newfollow_builtin_importsparameter that
changes the previous behavior slightly.0.12.1 (2018-06-30)This release forces you to upgrade parso. If you don’t, nothing will work
anymore. Otherwise changes should be limited to bug fixes. Unfortunately Jedi
still uses a few internals of parso that make it hard to keep compatibility
over multiple releases. Parso >=0.3.0 is going to be needed.0.12.0 (2018-04-15)Virtualenv/Environment supportF-String Completion/Goto SupportCannot crash with segfaults anymoreCleaned up import logicUnderstand async/await and autocomplete it (including async generators)Better namespace completionsPassing tests for Windows (including CI for Windows)Remove Python 2.6 support0.11.1 (2017-12-14)Parso update - the caching layer was brokenBetter usages - a lot of internal code was ripped out and improved.0.11.0 (2017-09-20)Split Jedi’s parser into a separate project calledparso.Avoiding side effects in REPL completion.Numpy docstring support should be much better.Moved thesettings.*recursion*away, they are no longer usable.0.10.2 (2017-04-05)Python Packaging sucks. Some files were not included in 0.10.1.0.10.1 (2017-04-05)Fixed a few very annoying bugs.Prepared the parser to be factored out of Jedi.0.10.0 (2017-02-03)Actual semantic completions for the complete Python syntax.Basic type inference foryield fromPEP 380.PEP 484 support (most of the important features of it). Thanks Claude! (@reinhrst)Addedget_line_codetoNameandCompletionobjects.Completely rewritten the type inference engine.A new and better parser for (fast) parsing diffs of Python code.0.9.0 (2015-04-10)The import logic has been rewritten to look more like Python’s. There is now
anInferState.modulesimport cache, which resemblessys.modules.Integrated the parser of 2to3. This will make refactoring possible. It will
also be possible to check for error messages (like compiling an AST would give)
in the future.With the new parser, the type inference also completely changed. It’s now
simpler and more readable.Completely rewritten REPL completion.Addedjedi.names, a command to do static analysis. Thanks to that
sourcegraph guys for sponsoring this!Alpha version of the linter.0.8.1 (2014-07-23)Bugfix release, the last release forgot to include files that improve
autocompletion for builtin libraries. Fixed.0.8.0 (2014-05-05)Memory Consumption for compiled modules (e.g. builtins, sys) has been reduced
drastically. Loading times are down as well (it takes basically as long as an
import).REPL completion is starting to become usable.Various small API changes. Generally this release focuses on stability and
refactoring of internal APIs.Introducing operator precedence, which makes calculating correct Array
indices and__getattr__strings possible.0.7.0 (2013-08-09)Switched from LGPL to MIT license.Added an Interpreter class to the API to make autocompletion in REPL
possible.Added autocompletion support for namespace packages.Add sith.py, a new random testing method.0.6.0 (2013-05-14)Much faster parser with builtin part caching.A test suite, thanks @tkf.0.5 versions (2012)Initial development.