The 2023 elixir-tools Update (Vol. 5)
elixir-tools has had an incredible first year!
The amount of support from the community has far exceeded my expectations, and I couldn't be happier. I wanted to wrap up the year sharing the progress that has been made and thank all of our wonderful contributors and sponsors.
There is also a small announcement/surprise at the end 😉.
Next LS
Next LS is the main project from elixir-tools, so the star child gets to go first 😄.
- 11,525 total downloads
- 2,332 from hex.pm (it switched to GitHub downloads at v0.8)
- 9,193 from GitHub releases
- 2,299 downloads of the latest release (v0.15.0)
- 55 releases
As of writing, Next LS supports the following features:
- Compiler Diagnostics
- Go To Definition
- Completions
- Find References
- Formatting
- Hover Documentation
- Document Symbols
- Workspace Symbols
- Workspace Folders
- Credo (Extension)
Next LS is also supported in the following editors:
- Emacs
- Helix
- Neovim (elixir-tools.nvim)
- Vim
- Visual Studio Code (elixir-tools.vscode)
- Zed
Tableau
Tableau is the static site generator that powers this very website!
Tableau has started to become very feature complete this year, supporting most of the essentials you'd expect from any static site generator:
- Good code and browser reloading on file change
- Easy to use the current Node.js JS/CSS tooling
- Extensions
- Ability to work with "data" (either dynamic data or static files)
- YAML Files
- Elixir scripts (.exs files)
- Handles stuff like Posts, RSS, sitemap, SEO.
- Posts
- Pages
- RSS
- Sitemap
- SEO
Tableau is also very easy to use with any templating language you want! This website is built with Temple, but you can easily use EEx or even HEEx.
If you are migrating from a Jekyll site, you might take advantage of the solid library for Liquid templates.
I'd also like to give a shoutout to Leandro Pereira for the wonderful MDEx library. This markdown library uses a NIF to a rust library that supports the full CommonMark spec and the GitHub Flavored Markdown spec. This is important as it allows an easier migration for blogs and websites built in other frameworks like Jekyll.
Also, a feature that I particularly like, is that it supports syntax highlighting with tree-sitter, which means we immediately get support for almost every syntax that exists, as well as tons of colorschemes that come from the Helix text editor.
Thank you Leandro!
web_dev_utils
One side effect from building out Tableau, is that I had copy pasted the same utilities into an app for the third time, so I decided to finally make it a package.
web_dev_utils is a small package that provides modules for adding asset watchers, file watching, and browser live reloading to your library or framework.
This couldn't have been possible without Phoenix laying the foundation, so thank you Phoenix!
Spitfire
Here's the surprise 🎉.
I am currently building a new error tolerant parser for Elixir that I am code naming "Spitfire".
The driving factor behind this parser is to make it possible to "successfully" parse malformed or incomplete Elixir code, which will allow us to properly query the "environment" of the cursor in a text editor.
This is currently possible for proper/correct Elixir code, but not incomplete code (which occurs more often than complete code when you are in your text editor). This information will eventually allow editor tooling like Next LS to provide accurate and context aware completion candidates, among other features.
This work has been discussed in elixir-lang/elixir#12645. You can follow along there or in the Spitfire repo elixir-tools/spitfire for updates!
Community
Discord
The discord server keeps growing!
We currently have 195 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 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