Dexter - A fast, full-featured Elixir LSP optimized for large codebases

Good observation, though I wonder if that security aspect is part of the design?

I see on the diagnostics GH issue linked above that Dexter does run the formatter, which I’d imagine involves the compiler/arbitrary code execution.

What are the implications on usage with Ash since Dexter doesn’t go off the AST? Macros in general?

Could not Dexter benefit from ex_panda for covering heavily macroed code, like Ash? Just wondering.

Its written in Go and uses a custom source parser, it doesnt convert source code to AST

This comes at a perfect time!

I recently started learning Elixir and Phoenix LiveView by building a Paperless clone with minimal feature set for my personal use. There were a few occasions when expert would just take too long to compile the project and have LSP be ready. Excited to give this a try.

2 Likes

It still can call ex_panda on the source before running their custom source parser.

This is great! The quickness is a big upgrade. I love that it still works if there is a compile error in the project. I haven’t had to restart the server once!

Question: I’m using Zed, and sometimes goto definition opens up the “find references” UI instead of navigating. I think maybe it only happens where there are multiple function heads. In this case I would like it to choose the first place the function is defined. Does anyone know if this configurable or if I can hack it somehow?

1 Like

This is really cool. I’ve been wanting to try something like this for a while (go is a much better choice for theses kinds of tasks imo).

Just gave it a shot, thought it hadn’t worked because I didn’t even saw a spin wheel but turns out it’s just that fast! Just such a shame it doesn’t work with macros :sad_but_relieved_face: , currently working on an ash-heavy project and its basically null around that, but still a really cool project and damn it is fast!

3 Likes

Hey, @knoebber !
I think I saw that too and will try to take a look when I have a moment.
Since it only happens “sometimes,” it might be tricky to debug.
I’ve opened an issue, so feel free to drop in any examples, any help is welcome!

1 Like

Please open issues for the problems you’ve seen of you haven’t already.

1 Like

Would it be possible to resolve erlang code as well?

If I click on Map.fetch the map.ex file opens on the fetch function definition. In there, if I click on :maps.find it does not open maps.erl. This would be really helpful :slight_smile:

Hey @knoebber, glad you’re enjoying it! I would argue that this isn’t necessarily a bug, but rather something we should leave to the editor to configure. When you do go-to-definition on a function with multiple function heads, the LSP will return all definitions for a function of that same arity. It would be incorrect to simply take you to the first function head found, since that might not be the applicable one.

That being said, I know not all editors make this easily configurable, so maybe we should make this an option after all. I see @nick-c opened a PR, so we can discuss there! Curious what others think about this.

It is planned! Erlang stdlib docs? · Issue #30 · remoteoss/dexter · GitHub

3 Likes

Perfect :slight_smile:

I installed it on Neovim, the difference is absurd, previously I had to wait few seconds for the project to compile and the LSP being available, now I just open the editor and it is up and running. As a noob in Elixir coming from Python and Go this is perfect for me, it doesn’t slows me down anymore.

Thank you for this tool, it is really useful.

3 Likes