The elixir-tools Update Vol. 4

October 19, 2023

Corporate Sponsor Update

I want to give a quick thank you to the third corporate sponsor of elixir-tools, Supered!

You can see all of our corporate sponsor's 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... another tremendous month!

This month has had quite a few bug fixes, some distribution patches, and a couple of very exciting new features!

Local Variable Definition and References

Dmytro is back again with another enhancement to go to definition and find references, this time for local variables!

This was a tricky problem to solve, as local variables definitions and references are not emitted by the compilation tracers, which are used to fill in the symbol/reference database.

Thanks to some clever usage of Macro.traverse/4, we have fast and accurate hopping between local variable definitions and references!

Implemented by Dmytro Biletskyy!

Nix Flake

The Nix flake worked alright on macOS, or so I had thought, but Juozas and Yejun knew better!

The following improvements were made:

  • Build with the ERTS provided by Nix rather than downloading from the Burrito CDN. Included an upstream fix to Burrito.
  • Correctly install the burrito'd executable into the bin directory.
  • Patch the executable to use the Nix provided glibc.

Implemented by Juozas Norkus and Yejun Su!

Configurable MIX_ENV and MIX_TARGET

Jon added the settings to control the MIX_ENV and MIX_TARGET of the runtime that houses your project code. This is very useful for Nerves projects!

Implemented by Jon Carstens!

Completions

This is a big one that a lot of people have been waiting for!

With v0.14.0, preliminary support for auto-completions has been released, gated by an experimental flag. The reason for the flag is so that if there is any instability, a user can toggle it off until more patches have been released.

This initial release includes support for the following types of completion candidates:

  • Global modules
  • Global Structs
  • Struct fields
  • Remote functions/macros (w/ documentation)
  • Special Forms (w/ documentation)
  • Bitstring modifiers
  • Filesystem paths in strings

Coming soon will be candidates that require lexical environment information, such as local variables, module attributes, imported functions/macros (including Kernel), and aliased modules.

In order to proceed with the above, I will be helping out with implementing the capabilities in elixir-lang core, you can follow elixir-lang/elixir#12645 for more information.

Snippets are another upcoming, completion related feature, but aren't being held up by anything upstream.

This functionality is based on IEx.Autocomplete, and I'd like to give a huge thanks to the Elixir core team for providing such a firm foundation for Next LS to base it's implementation on.

elixir-tools.nvim, elixir-tools.vscode, Vim, Zed, and Doom Emacs

We have gained a ton of new editor support since the last update, including support for the new Rust based, collaborative editor Zed, Vim, and Doom Emacs.

Nvim

  • Installs: Measuring installs is hard for a GitHub based plugin, but I have since started tracking clones using a nifty GitHub Action. You can view the report it generates on the github-repo-stats branch.
  • 2 releases
  • 1 contributor (alphabetical order)

Visual Studio Code

  • 1,935 installs (+ ~600 since the last update)
  • 3 releases

Vim

Since the last update, I have managed to get Next LS setup and working with several Vim LSP plugins. Vim doesn't have a builtin LSP client like Nvim does, so you must first install an LSP client plugin.

There is now documentation for getting it started with:

You can view the documentation on how to configure these plugins in the Next LS README or on the website.

Doom Emacs

Similarly to Vim, I was able to get Next LS up and running in Doom Emacs using the eglot LSP client (the one built into Emacs).

You can view the documentation on how to configure Doom Emacs in the Next LS README or on the website.

Zed

Zed is a hot new Rust based collaborative editor that a lot of folks in the Elixir community have been hyping up and rightfully so!

Luckily for us, the kind folks at Zed integrated Next LS into their editor and you can easily opt into Next LS with a small settings change.

You can view the documentation on how to configure Zed in the Next LS README or on the website.

Tableau

Tableau is the static site generator that powers this very website!

Since the last update, Tableau has gained several new abilities:

  • Upstreamed the Post extension from elixir-tools.dev into Tableau
  • Upstreamed the RSS extension from elixir-tools.dev into Tableau
  • YAML data files are now supported. For example, this website has a tools.yaml file that is used in several places to loop through all of the tools and render their descriptions and URLs

An upcoming feature is to support .exs files as data files, allowing you to run arbitrary code, like some HTTP requests to fetch some data from an API. Once this feature is done, I should be able to port my personal website to Tableau. I read from the Goodreads API in a Ruby script to fill in a "bookshelf" page. This should be much simpler to do with Tableau 😉.

Community

Discord

The discord server keeps growing!

We currently have 163 (25 new since the last update) members and are getting more every day, come join the party!

Thank you

I'd like to give a huge shout out to all of the contributors, bug reporters, and to all (29!) 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