The elixir-tools Update Vol. 4
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!
- ~ 7,000 total downloads (estimated, increase of 2,800 from the last update)
- v0.13.5 was only a few downloads shy of 1,000 before I published a new version, which I think is a solid enough heuristic to say Next LS has about 1,000 users 🤯.
- 9 releases
- 7 contributors (alphabetical order)
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:
- prabirshrestha/vim-lsp
- yegappan/lsp
- dense-analysis/ale (Still needs an upstream PR in ALE to be merged, however)
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:
- Contribute to the project via code on GitHub
- Contribute to the community via Discord or GitHub
- Contribute financially via GitHub Sponsors