This Week at Zed Industries: #6

June 9th, 2023

On Wednesday, we released Zed 0.89, which landed support for the OnTypeFormatting request in the language server protocol. For language servers that support it, such as rust-analyzer, this will make the editing experience even better, for example by automatically inserting a closing curly brace where appropriate when inserting an opening curly brace.

Here's what each of us has been up to this week:


This week I have been working on polishing a new feature that will land in the next version of Zed: the Assistant Panel. This panel integrates with OpenAI to provide an experience similar to ChatGPT but using multi-buffers instead, where each message can be edited or deleted. We've been using it internally and we think it's a really nice way to interface with the AI, and I am personally looking forward to opening it up to other people when we release next week.


This week, I finished some remaining work related to our panic telemetry. After collecting a week's worth of data, the charts are beginning to show their worth. Having multiple views into our crashes and being able to react quickly is a game-changer. Also, I resumed working on our feedback analysis tool at the end of the week, which will aggregate our in-app feedback into more understandable reports.


I have spent this week on adding support for two features: Select previous editor command and comment continuations. Both of those were relatively straight-forward (and my colleagues were quick to help out with the tricky parts - kudos to them!). I also made minor tweaks of our build configuration related to LTO and toolchain management. At some point I would also like to look into making our builds a bit quicker. Next week I plan to collaborate on the collaboration parts (duh) of Zed with Mikayla.


I spent some time this week improving Elixir support in Zed. I corrected some issues with our syntax highlighting, and added some information to the outline view in Elixir. Previously, the outline view only showed the names of functions, but in Elixir, it's very common to have many function definitions with the same name, so we now show the parameters as well.

Both syntax highlighting and the outline veiw are controlled using Tree-sitter queries, so this mostly involved changing those queries. In the course of making these changes, I also added a feature to Zed where during development, queries are reloaded dynamically as soon you change them. This will make it a lot faster to iterate on Zed's language support in the future.

I also investigated some problems that users were reporting with the Elixir language server, elixir-ls. In the course of fixing these problems, I improved the visibility of language server logs in Zed. The language server logs view now shows each language server's logs in addition to the protocol messages exchanged with that server.


Finally shipped a rewrite of our git status system, just in time to discover a crash on our preview server related to how the old system worked! Since that has wrapped up, I'm starting on a new project that will be announced Soon™.


This week, I've started working on inlay hints and that feature devoured me for this entire week and I have the feeling next week will be similar. On the bright side, the prorotype is coming close thanks to Julia, Antonio and Zed's fantastic collaborative capabilities — I can always get some help when I'm stuck in editor's dank depths.


As I discussed last week, a major issue we keep facing is when the copy of a language server we download on a user's device becomes corrupt. This could happen any number of ways, though the most common seems to be some sort of interruption of the download and extract operation. Most of my effort this week has been to improve our language server handling to detect when the server either fails to launch, or dies during use, and then test to see if the installation is valid. Once we can detect a broken installation we can remove it and re-download the server, preventing the user from seeing annoying "language server failed to update" messages among other issues.