brainlid

brainlid

Podcast: Thinking Elixir 161 - Lexical LS and Elixir Dev UX

Episode 161 of Thinking Elixir. Language Servers underpin the language specific support we rely on in modern code editors. Lately, there have been new efforts in this area in the Elixir community. We talk with Steve Cohen about his project Lexical LS to learn about his new Elixir Language Server, how long he’s been at it, and what it can do today. We learn about some of the technical challenges when creating a tool like this, and why there’s still room for new projects in this area. Steve explains how Lexical LS is architected and that it is a goal to be easy to contribute to and work on the Lexical project itself. Time to give it a try!

Most Liked

stevensonmt

stevensonmt

This project just popped up on github as a recommendation for me. It looks interesting and I’ll definitely check out the podcast. I’m curious if anyone has used it with vim and if so, how the setup went.

heatmiser

heatmiser

I am currently struggling to get this installed myself. Keeps crashing on initial load on do_boot.

EDIT:

Adhering to the “lowest common denominator” caveats in the README of Elixir and Erlang versions fixed this for me.

soup

soup

I found it simplest to build my own binary like headmiser says, other wise it wouldn’t boot and swapping project versions backwards seemed more fraught than just building it. Building it was no drama, though the readme says build/... instead of _build/... for the output dir.

It does not support textDocument/hover (ie “show docs under cursor”) which I use quite a lot. I had a look at adding support but it seems you need to do more than add the defrequest "textDocument/hover" to Lexical.Protocol.Requests to let clients know the server capabilities, then I had to put it down and go back to work :slight_smile:

The completions seemed to be about as quick as ElixirLS.

Function picking from the completion menu are a bit different. ELS shows the full argument spec – including pattern matches (eg: fill(%S{} = s) plus the function @doc, where as LEX only shows the variable names (fill(s), no @doc, no patterns). However when selecting the function, ELS inserts fill(|) while LEX inserts fill(|s|) which is nice.

I have nvim setup to only show LSP/etc when I exit insert mode so I dont find the “real time” nature distracting, others might not enjoy it.

I think the formatter seemed to respect .formatter.exs, meaning it didn’t stick parens around ecto model fields which I think not possible with ELS last time I checked.

Inline credo sounds cool but it failed to build (when built by Lexical on start up), possibly because I self built Lexical.

Will probably check back in on it in a few months, though I have no real complaints with ElixirLS beyond the formatting thing, but I just run !mix format % instead.

Where Next?

Popular in Podcasts Top

brainlid
In episode 90 of Thinking Elixir, we talk with Tetiana Dushenkivska, the creator of Elixir Cards, a series of Elixir flashcards with mult...
New
brainlid
Some people excitedly talk about the “end of localhost development” when developer machines move to the cloud. Presumably this is better ...
New
brainlid
In episode 101 of Thinking Elixir, Ben Johnson explains his project Litestream.io, an OpenSource tool that replicates SQLite databases to...
New
brainlid
It’s important to learn safe coding practices. As developers, we want people to love our products and happily pay to use them. We also wa...
New
brainlid
In episode 62 of Thinking Elixir, we talk with Chris McCord about his recent announcement that he’s moved to work at Fly.io! We cover wha...
New
brainlid
In episode 76 of Thinking Elixir, we talk with host David Bernheisel about his recently released Safe Ecto Migrations guide. Intended as ...
New
wolf4earth
Ivan Rublev is the author of the open source library, Domo, which provides type validations for Elixir applications. He discusses the typ...
New
brainlid
In episode 83 of Thinking Elixir, We talk with Isaac Yonemoto about the Zig language and his Zigler Elixir library. We learn where Zig ca...
New
brainlid
In episode 75 of Thinking Elixir, we talk with Dave Lucia about Simplebet’s use of RabbitMQ and Commanded for solving unique real-time pr...
New
brainlid
Episode 125 of Thinking Elixir. While hearing how Elixir is being used in the Royal Bank of Canada’s Capital Markets, we learned a lot of...
New

Other popular topics Top

JDanielMartinez
Hi! May someone helps me, please! I have two apps into an umbrella project: the first one is Database, which manages queries, and the se...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
jerry
Good day to you all. I have been struggling to get a query involving like and ilike to work. Can anyone assist me on this, please? pro...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
sergio_101
I am VERY much an elixir newbie. I have taken one elixir course and one phoenix course on Udemy. During that course, I saw the instructor...
New
polypush135
As many of you may have realized by now (sorry for all the posts here) I’ve been working on a db problem where I’m trying to aggregate a ...
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
Qqwy
Original source of discussion: This topic on the Pragmatic Programmers' Functional Web Development with Elixir, OTP, and Phoenix forum. ...
New
AstonJ
by Lance Halvorsen Elixir and Phoenix are generating tremendous excitement as an unbeatable platform for building modern web application...
460 27162 124
New
jay1
Why is it that the mnesia database isn’t the most preferred database for use in Elixir/Phoenix?
New

We're in Beta

About us Mission Statement