Nezteb

Nezteb

I frequently switch between ElixirLS, Lexical, and Next LS in order to test each out and compare/contrast. I decided to create a brief feature comparison matrix with some of my findings: Elixir Language Server Comparisons · GitHub

I reached out to some authors and devs familiar with each tool in order to be as fair as possible. Each of these tools is a large undertaking and takes tons of time and effort from the maintainers. A simple 2D comparison table can’t tell the whole story, so take it with a grain of salt. I’ll be doing my best to maintain and update the list as tooling evolves and adds/changes functionality. :smile:

Showing Posts 1 to 10

mhanberg

mhanberg

Expert LSP Core Team

Thanks for putting that together!

tcoopman

tcoopman

That’s really cool. One thing I think none of the language servers support right now is working inside liveview sigils, things like go to definition, hover,…

That’s something that might be useful to track as well?

kwando

kwando

Oh yes, go to definition on HEEX components would be magical :star_struck:

Terbium-135

Terbium-135

I’ve asked over on discord in the editor-tooling channel just a few days ago.
As far as I understood it doesn’t look promising

Quoting icecreamcohen here

If we can get the ast for heex, we might be able to work some magic, but I agree with Scott, it’s not easy

It’s even trickier, we’d likely need to make a source map from the heex to the ast, since the language server reports your cursor in terms of the heex file

The fact that it’s a sigil only slightly complicates things

tcoopman

tcoopman

Also referencing this issue on elixir-ls: Add support for function components · Issue #804 · elixir-lsp/elixir-ls · GitHub

The stance of elixir-ls is that this should be implemented separately, so I guess, it’s not something we’re going to see immediately.
To bad, go to reference on a function component would be so useful :slight_smile:

sbuttgereit

sbuttgereit

Hi–

Not sure where you’d like specific content discussion (here or in the GitHub comments section).

A couple notes:

  • Including which mainstream editors have packages for simple installation would be useful in the list. EDIT: sorry I was just blind… you’ve got it.

  • I have anecdotal experience that ElixirLS works with monorepos, depending on exactly what you mean by monorepo support. My current project is a monorepo style project with many Elixir projects inside the “project workspace” of my editors. I have have worked this in both VSCode and in my current editor, Sublime Text. Here’s a screenshot of a few sample directories in the larger project workspace; note the .elixir_ls built in the root of each Elixir project:

mhanberg

mhanberg

Expert LSP Core Team

That works, but it starts up an Elixir LS instance for each project.

With “workspace folders” support (which is what is meant by “monorepo support”), the editor will boot up a single language server instance to handle all of the projects.

sbuttgereit

sbuttgereit

Hmmm… at some level, for a checklist like the OP published, this feels like an odd dividing line between “monorepo support: yes” vs. “monorepo support: no or unknown”. My sense is that it conflates a feature, can the tool be used with monorepos, with the implementation details of how the feature is implemented. As a simple user, what I first want to know is does the tool allow me to work across the multiple Elixir projects in my monorepo: in a simple checklist sense this to me sounds like a “yes” for ElixirLS (I’ve not tried the others). Now to be fair to your point, there may be reasons why the ElixirLS implementation of that kind of support is inferior that of NextLS. But depending on the nature of my project I may never reach a point where that distinction actually matters in practice.

Finally, if we are to take the disclaimers at the top of the list at face value:

  • This comparison does not take performance into account.
  • Language servers might support similar features that operate differently.

It seems as though the implementation difference you describe shouldn’t be a factor in deciding if a feature is supported or not. If there are actual feature differences, meaning I as a user gain or lose capabilities in working with the monorepo, the argument will be on firmer footing.

georgeguimaraes

georgeguimaraes

(update: just saw that you don’t use neovim, sorry)

If you’re using nvim-lspconfig, I’ve updated the default config used for elixir-ls. nvim-lspconfig will now give higher preference to detecting your .git folder in your monorepo.

This should mean no more .elixir-ls folder in every project, just the one for your monorepo (if it has a .git folder).

mhanberg

mhanberg

Expert LSP Core Team

My sense is that it conflates a feature, can the tool be used with monorepos, with the implementation details of how the feature is implemented.

The monorepo support is whether the tool itself can understand a monorepo, vs if it can be naively used in a monorepo.

For example, Next LS supports Workspace Folders (monorepo), so if you do a Workspace Symbols query (Quickstart | elixir-tools & Code Navigation) it will search for symbols across your entire workspace (all workspace folders), rather than just the one you are in.

Where Next? Top

Trending in Dev Env & Tools Top

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
webofbits
With AI doing more of the implementation work, I’ve been wondering how much coding I should deliberately keep doing myself. My main conc...
#ai
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews