Mazyod

Mazyod

ElixirLS Fails if Git Dependency Present (Visual Studio Code Extension)

Hello,

I have an issue with ElixirLS running in VSCode if a Git dependency is present. I tried to create a fresh project with a single git dependency, and immediately reproduced the problem. I am not sure how to debug this further, as the error message is very cryptic. Any help appreciated.

Below are the logs of a new elixir project, using latest Elixir version, and simply adding a single git dependency.


defmodule Alchemist.MixProject do
  use Mix.Project

  def project do
    [
      app: :alchemist,
      version: "0.1.0",
      elixir: "~> 1.17",
      start_permanent: Mix.env() == :prod,
      deps: deps()
    ]
  end

  # Run "mix help compile.app" to learn about applications.
  def application do
    [
      extra_applications: [:logger]
    ]
  end

  # Run "mix help deps" to learn about dependencies.
  defp deps do
    [
      {:jason, github: "michalmuskala/jason"}
    ]
  end
end

➜  alchemist git:(main) ✗ iex
Erlang/OTP 26 [erts-14.2.5] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit] [dtrace]

Interactive Elixir (1.17.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> System.cmd("git", ["--git-dir=.git", "config", "remote.origin.url"], [cd: "/Users/mazyod/projects/new-elixir/alchemist/deps/jason"])
{"https://github.com/michalmuskala/jason.git\n", 0}

Running /Users/mazyod/.vscode/extensions/jakebecker.elixir-ls-0.22.1/elixir-ls-release/launch.sh
Preferred shell is zsh, relaunching
Looking for ASDF install
ASDF not found
Looking for mise executable
mise not found
Looking for rtx executable
rtx not found
Looking for vfox executable
vfox not found
Installing ElixirLS release v0.22.1
Running in /Users/mazyod/projects/new-elixir/alchemist
Install complete
[Info  - 9:02:37 AM] Started ElixirLS v0.22.1
[Info  - 9:02:37 AM] Running in /Users/mazyod/projects/new-elixir/alchemist
[Info  - 9:02:37 AM] ElixirLS built with elixir "1.17.2" on OTP "26"
[Info  - 9:02:37 AM] Running on elixir "1.17.2 (compiled with Erlang/OTP 26)" on OTP "26"
[Info  - 9:02:37 AM] Protocols are not consolidated
[Info  - 9:02:37 AM] Elixir sources not found (checking in /private/tmp/elixir-20240706-7373-erwccq/elixir-1.17.2). Code navigation to Elixir modules disabled.
[Info  - 9:02:37 AM] Received client configuration via workspace/configuration
%{"additionalWatchedExtensions" => [], "autoBuild" => true, "autoInsertRequiredAlias" => true, "dialyzerEnabled" => true, "dialyzerFormat" => "dialyxir_long", "dialyzerWarnOpts" => [], "enableTestLenses" => false, "envVariables" => %{"PATH" => "/opt/homebrew/bin"}, "fetchDeps" => false, "incrementalDialyzer" => true, "languageServerOverridePath" => "", "mixEnv" => "test", "mixTarget" => "", "projectDir" => "", "signatureAfterComplete" => true, "suggestSpecs" => true, "trace" => %{"server" => "off"}}
[Info  - 9:02:37 AM] Registering for workspace/didChangeConfiguration notifications
[Info  - 9:02:37 AM] Starting build with MIX_ENV: test MIX_TARGET: host
[Info  - 9:02:37 AM] client/registerCapability succeeded
[Info  - 9:02:37 AM] Registering for workspace/didChangeWatchedFiles notifications
[Info  - 9:02:37 AM] client/registerCapability succeeded
[Info  - 9:02:37 AM] Loaded DETS databases in 17ms
[Error - 9:02:37 AM] Process #PID<0.255.0> raised an exception
** (ErlangError) Erlang error: :enoent
    (elixir 1.17.2) lib/system.ex:1114: System.cmd("git", ["--git-dir=.git", "config", "remote.origin.url"], [cd: "/Users/mazyod/projects/new-elixir/alchemist/deps/jason"])
    (mix 1.17.2) lib/mix/scm/git.ex:312: Mix.SCM.Git.get_rev_info/0
    (mix 1.17.2) lib/mix/scm/git.ex:75: anonymous fn/2 in Mix.SCM.Git.lock_status/1
    (elixir 1.17.2) lib/file.ex:1665: File.cd!/2
    (mix 1.17.2) lib/mix/dep.ex:425: Mix.Dep.check_lock/1
    (elixir 1.17.2) lib/enum.ex:1703: Enum."-map/2-lists^map/1-1-"/2
    (mix 1.17.2) lib/mix/tasks/deps.loadpaths.ex:76: Mix.Tasks.Deps.Loadpaths.deps_check/2
    (mix 1.17.2) lib/mix/tasks/deps.loadpaths.ex:48: Mix.Tasks.Deps.Loadpaths.run/1
    (mix 1.17.2) lib/mix/task.ex:495: anonymous fn/3 in Mix.Task.run_task/5
    (mix 1.17.2) lib/mix/tasks/loadpaths.ex:37: Mix.Tasks.Loadpaths.run/1
    (mix 1.17.2) lib/mix/task.ex:495: anonymous fn/3 in Mix.Task.run_task/5
    (mix 1.17.2) lib/mix/tasks/compile.ex:153: Mix.Tasks.Compile.run/1
    (mix 1.17.2) lib/mix/task.ex:495: anonymous fn/3 in Mix.Task.run_task/5
    (language_server 0.22.1) lib/language_server/build.ex:442: ElixirLS.LanguageServer.Build.run_mix_compile/1
    (language_server 0.22.1) lib/language_server/build.ex:80: anonymous fn/3 in ElixirLS.LanguageServer.Build.build/3
    (stdlib 5.2.3) timer.erl:270: :timer.tc/2
Received $/cancelRequest for unknown request id: 8
Received $/cancelRequest for unknown request id: 11

Marked As Solved

undeadlol1

undeadlol1

I have the same problem. No amount of googling helped me to solve it.

The only workaround I could find is to set "elixirLS.autoBuild": false, in the VS Code user settings.

Also Liked

NobbZ

NobbZ

This is exactly why I proposed to try from terminal.

It is a known issue that applications started from the GUI will not see the same PATH (and other environment variables) as those started from a terminal/shell.

I haven’t used VScode in a while, and even less did I use the debugging facilities… Years ago, I debugged a similar issue with a coworker (on Linux though and not elixir LS related), and we eventually checked the PATH environment variable and have seen significant discrepancies between the one defined in the shell and the one as seen by VScode from launcher.

There we mitigated by using /etc/environment.d to “correct” the PATH.

Though sadly I do not remember anymore how we checked the PATH as seen by VScode back then… Also MacOS does not have an equivalent of /etc/environment.d AFAIR.

jdiago

jdiago

What happens if you delete the .elixir_ls directory and restarted vs code? That’s what I tend to do when elixir ls freaks out about deps.

dimitarvp

dimitarvp

I was about to suggest the same as @jdiago, but not only delete the .elixir_ls directory:

rm -rf .elixir_ls deps _build
mix do deps.get, compile

After that completes, start your IDE and wait for ElixirLS to rebuild its cache.

undeadlol1

undeadlol1

I solved the problem on my side by addressing several issues. I’m not sure which single step fixed it for me, but I had to deal with two main problems:

  1. VS Code ElixirLS configuration (especially the PATH property)

  2. A broken ASDF Elixir installation (likely related to SSL issues)

The problem was most likely with my PATH configuration. If your project doesn’t use ASDF, you might be able to skip the ASDF steps.

Since I’m new to Elixir I don’t know what specific steps helped me thus I will list all of them:

  1. Uninstall the ElixirLS extension from VS Code.

  2. Remove build artifacts:

  3. Run this command in your project directory:

rm -rf deps _build .elixir_ls
  1. Uninstall ASDF plugins:

It seems that uninstalling ASDF itself does not remove the Elixir plugin. Make sure that running asdf list shows no versions installed.

  1. Uninstall ASDF.

  2. Reinstall ASDF (I used brew install asdf on macOS).

  3. Install the ASDF plugins for Elixir and Erlang:

asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
  1. Run asdf install to install the versions of Erlang and Elixir.

  2. Fix SSL problems:

Install the necessary SSL dependencies:

brew install coreutils automake autoconf openssl@3.0 libyaml readline libxslt libtool unixodbc wxwidgets fop

Then, set the proper SSL options:

export KERL_CONFIGURE_OPTIONS="--disable-debug --without-javac --with-ssl=$(brew --prefix openssl@3.0)"
  1. Comment out all custom ElixirLS configurations in VS Code (you can leave the formatter configuration intact). In my case, the PATH option was likely causing the problems.

  2. Install the ElixirLS extension in VS Code again.

  3. Restart VS Code (or use the “Restart Extension Host” command from the command palette).

  4. Wait a little while for Elixir compilation to complete (there is no visible indication that compilation is running).

Everything should be working now.

Where Next?

Popular in Questions Top

Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
dotdotdotPaul
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
ycv005
I have followed this StackOverflow post to install the specific version of Erlang. And When I am running mix ecto.setup then getting fol...
New
Jim
As a follow up to my earlier question: I have the code compiling and running but not getting a successful login from the rest server. ...
New
dokuzbir
Hello, I am trying to convert my lists to string without losing brackets.For start i have 3 map. They look like these buyer = %{ id: ...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
makeitrein
Hey all, just started picking up Elixir last week and am writing a scraper as a learning project. Baby step #1 is extracting the number ...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
idi527
I’ve been re-reading swift book again and noticed that multiline strings there don’t have a trailing line break, unlike in elixir iex(2)...
New

Other popular topics Top

lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
TunkShif
This post is an instruction guide to help you setup your Neovim for Elixir development from scratch. It includes general information on h...
273 38985 115
New
shahryarjb
Hello, I get Persian date from my client and convert it to normal calendar like this: def jalali_string_to_miladi_english_number(persi...
New
sergio
In Ruby, I can go: User.find_by(email: "foobar@email.com").update(email: "hello@email.com") How can I do something similar in Elixir? ...
New
sergio
I couldn’t find any guides that worked well with Phoenix 1.6.0 and esbuild. I hope this helps people test the waters and eases you into t...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 49522 488
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
script
If I have a string “1000 cfu/ml” . I want to remove the characters and / and space . So the string is like this "1000" What is the ...
New
fireproofsocks
Forgive me if this is obvious, but how does one delete a database record WITHOUT selecting it first? https://hexdocs.pm/ecto/Ecto.Repo.h...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New

We're in Beta

About us Mission Statement