Jedi Code Completion with David Halter – Episode 113

Summary

When you’re writing python code and your editor offers some suggestions, where does that suggestion come from? The most likely answer is Jedi! This week David Halter explains the history of how the Jedi auto completion library was created, how it works under the hood, and where he plans on taking it.

linode-banner-sponsor-largeDo you want to try out some of the tools and applications that you heard about on Podcast.__init__? Do you have a side project that you want to share with the world? Check out Linode at linode.com/podcastinit or use the code podcastinit2017 and get a $20 credit to try out their fast and reliable Linux virtual servers. They’ve got lightning fast networking and SSD servers with plenty of power and storage to run whatever you want to experiment on.


Preface

  • Hello and welcome to Podcast.__init__, the podcast about Python and the people who make it great.
  • I would like to thank everyone who supports us on Patreon. Your contributions help to make the show sustainable.
  • When you’re ready to launch your next project you’ll need somewhere to deploy it. Check out Linode at www.podastinit.com/linode and get a $20 credit to try out their fast and reliable Linux virtual servers for running your awesome app.
  • Visit the site to subscribe to the show, sign up for the newsletter, read the show notes, and get in touch.
  • To help other people find the show please leave a review on iTunes, or Google Play Music, tell your friends and co-workers, and share it on social media.
  • Your host as usual is Tobias Macey and today I’m interviewing David Halter about Jedi, an awesome autocompletion and static analysis library for Python

Interview

  • Introductions
  • How did you get introduced to Python?
  • Can you explain what Jedi is and what problem you were trying to solve when you created it?
    • What is the story behind the name?
  • While reading through the documentation I noticed that there is alpha support for linting with Jedi. Can you compare the linting approach and capabilities with those found in other tools such as pylint and flake8?
  • What does the internal architecture and design look like?
  • From the research that I did for the show it seems that, rather than use the AST to determine the structure of the code being completed you built your own parser and recursive evaluation of the other methods that you use for determining accurate completion?
    • What was lacking in existing parsers that led you to build your own?
    • What are some of the difficulties that you have encountered building and maintaining the grammar definitions and higher level API for parsing multiple versions of Python, including the 2 vs 3 split?
  • What are some of the biggest challenges associated with introspecting user code?
  • What are some of the ways that Jedi can be confounded by a user’s project?
  • What are some of the most difficult technical hurdles that you have been faced with while building Jedi?
  • What are some unusual or unexpected uses of Jedi that you have seen?
  • What do you have planned for the future of Jedi?

Keep In Touch

Picks

Links

The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA

Notable Replies

  1. It doesn't sound as though etags/ctags format has been used to index the python code in Jedi.
    That, or a sqlite3 database would be two persistence approaches.

Continue the discussion https://discourse.pythonpodcast.com

Participants