- Elixir 99.1%
- Nix 0.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| config | ||
| lib | ||
| test | ||
| .envrc | ||
| .formatter.exs | ||
| .gitignore | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| mise.toml | ||
| mix.exs | ||
| mix.lock | ||
| README.md | ||
Laborant
A laboratory assistant; an Elixir language server that works.
Unlike Expert, Laborant is syntax-directed, which means that it takes a much more "superficial" view of your code, assuming things like defmodule defines a module, def defines a function, etc. These need not be true, you can override defmodule, def, etc to do something completely different, and Expert will (I think) handle that far better than Laborant will. Additionally, Laborant makes no attempt to understand custom macros.
However, being syntax-driven means that Laborant is wonderfully simple in design. A project's code is first parsed with Sourceror (originally just Code.string_to_quoted/2 was used, but Sourceror's AST includes end_of_expression positions which are very useful), and the resultant AST is matched against known patterns in Laborant.FileAnalyzer. The rest of Laborant just deals with storing the file analyzer results and speaking the LSP protocol. That's it!
Installation
Binaries for Linux and macOS (with support for x86 and aarch64 for both) are available from the Laborant releases page. The easiest way to install Laborant is to download a release binary corresponding to your computer's OS and CPU architecture and place the binary somewhere on your shell's PATH.