The elixir-tools Update Vol. 2

August 14, 2023

Welcome to Vol. 2 of the elixir-tools update!

Corporate Sponsor Update

I want to give a quick thank you to the first two corporate sponsors of elixir-tools, Qdentity and NFI Integrated Logistics!

You can see their logos on the home page of elixir-tools.dev.

Corporate sponsors are a tremendous help, and take the burden off of individuals. If you can, please talk to your employer about sponsoring!

You can sponsor the project on GitHub.

Next LS

Next LS has had a tremendous month!

Features

  • Workspace Folders

    You can now add more folders to your workspace in editors like Visual Studio Code. This will utilize a single Next LS instance, but it will still start isolated environments for each folder.

  • Find References (by Cristian Álvarez Belaustegui)

    You can now trigger "Find References" on a reference or a function/module definition and see all the places that it is referenced.

  • Binary Executable

    Next LS is no longer distributed via Mix.install/2.

    Instead, we use Burrito to compile binaries for every platform! This brings us closer to having a rock solid experience on every platform, and being able to treat Next LS more like an "app" and not like a library.

    We can use the latest versions of Elixir and OTP, as they are bundled into the executable.

    It's pre-compiled, so you don't need to compile it on your machine. This was the cause of confusion when your editor would install it for the first time or download an update.

    It's better suited to distribution on package managers like Homebrew, Apt, and mason.nvim.

    I want to give a huge thank you to my friend Digit, the author of Burrito. He helped make this all possible and taught me a lot of about Linux, libc, and being an hacker 😎.

  • Helix

    Philip Giuliani contributed setup instructions for the Helix text editor!

Under the Hood

I'd like to give a small spotlight on one under the hood change.

The original version of the "symbol table" that powers Go To Definition and Workspace Symbols was powered by DETS.

This worked out alright at first, but ended up being quite unergonomic (is that a word?) and a pain to debug.

Instead, Next LS now uses SQLite3 via the exqlite package, which is completely embedded into Next LS, so you don't need to have it installed on your machine.

SQLite3 is super fast and SQL is very familiar to Elixir developers, which makes contributing much easier.

This point is really driven home by the new Find References feature. Cristian was able to implement this feature in more or less a few hours and the change was purely additive. The diff of the PR was +207, -0.

It think that is is a testament to the abstractions that have been put in place and the familiarity of using SQL.

Coming Soon

We have a number of features that are currently in progress, but didn't make the deadline for this Update Vol. 2.

  • Credo Extension

    The second core extension and the first to provide integration with a library, the Credo extension will include all of the same functionality of Credo Language Server.

    PR

  • ** Go To (Dependency) Definition**

    Damir has been working on this enhancement, which allows you to follow a definition of a function/module from a dependency into its source code.

    PR

  • Hover

    Denis Tataurov has been working on Hover documentation. The recent change to SQLite3 from DETS has caused Denis quite a few merge conflicts 😅. Sorry Denis!

    PR

elixir-tools.nvim and elixir-tools.vscode

This month most of the updates for the editor plugins were to support new features in Next LS!

Download pre-built binaries

Both Nvim and Visual Studio Code will automatically download the correct binary for your operating system and architecture.

Nvim

Visual Studio Code

Community

Discord

The Discord server has been quite lively lately!

We currently have 108 members and are getting more every day, come join the party!

Denver Erlang and Elixir Meetup

This month of had the pleasure of being invited to talk at the Denver Erlang and Elixir meetup by Micheal Lubas.

There were about 25 people there and I had a ton of fun, you can watch the presentation on YouTube!

Thank you

I'd like to give a huge shout out to all of the contributors, bug reporters, and to all (26!) of my GitHub sponsors! Without the support of all of you, none of this would be possible.

How to get involved

If you'd like to get involved with elixir-tools, there are several ways:

Sponsors


I'll see you next month with another update!