Blog

Elixir-ls y asdf: Elixir sources not found (checking in /home/build/elixir). Code navigation to Elixir modules disabled.

Elixir-ls y asdf: Elixir sources not found (checking in /home/build/elixir). Code navigation to Elixir modules disabled.

Se me mostraba el error de título. Encontré este post que comenta cómo resolverlo:

Hi! This is something that does work once you’ve done some setup. Jump to definition is only available if you install elixir from source. I believe the steps to follow are roughly something like this:

clone the elixir github repository
Optionally check out a specific tag
run make compile
In the root of your project run asdf local elixir path:/path/to/elixir/ (where the path is the path to the github repo in step 1)
In the root of your project run rm -rf _build .elixir_ls
Open/restart your editor
Wait for the build to complete

axelson, ElixirLS Core Team, https://elixirforum.com/t/can-i-point-elixir-lsp-to-built-in-module-sources/41564/2
j@bt ~ % sudo mkdir /usr/local/src/elixir
j@bt ~ % sudo chown j:j /usr/local/src/elixir
j@bt ~ % cd /usr/local/src/elixir
j@bt /usr/local/src/elixir % git clone https://github.com/elixir-lang/elixir.git
j@bt /usr/local/src/elixir % mv elixir 1.14.5
j@bt /usr/local/src/elixir % cd 1.14.5
j@bt /usr/local/src/elixir/1.14.5 (main) % git checkout v1.14.5
# Habilitar erlang mediante asdf para el directorio actual:
j@bt /usr/local/src/elixir/1.14.5 (main) % asdf local erlang 25.3.2.1
j@bt /usr/local/src/elixir/1.14.5 (tags/v1.14.5) % make compile
Recompile: src/elixir_utils
Recompile: src/elixir_tokenizer
Recompile: src/elixir_sup
Recompile: src/elixir_rewrite
Recompile: src/elixir_quote
Recompile: src/elixir_parser
Recompile: src/elixir_overridable
Recompile: src/elixir_module
Recompile: src/elixir_map
Recompile: src/elixir_locals
Recompile: src/elixir_lexical
Recompile: src/elixir_interpolation
Recompile: src/elixir_import
Recompile: src/elixir_fn
Recompile: src/elixir_expand
Recompile: src/elixir_errors
Recompile: src/elixir_erl_var
Recompile: src/elixir_erl_try
Recompile: src/elixir_erl_pass
Recompile: src/elixir_erl_for
Recompile: src/elixir_erl_compiler
Recompile: src/elixir_erl_clauses
Recompile: src/elixir_erl
Recompile: src/elixir_env
Recompile: src/elixir_dispatch
Recompile: src/elixir_def
Recompile: src/elixir_config
Recompile: src/elixir_compiler
Recompile: src/elixir_code_server
Recompile: src/elixir_clauses
Recompile: src/elixir_bootstrap
Recompile: src/elixir_bitstring
Recompile: src/elixir_aliases
Recompile: src/elixir
Generated elixir app
==> bootstrap (compile)
Compiled kernel.ex
Compiled kernel/utils.ex
Compiled macro/env.ex
Compiled keyword.ex
Compiled module.ex
Compiled list.ex
Compiled macro.ex
Compiled kernel/typespec.ex
Compiled code.ex
Compiled code/identifier.ex
Compiled protocol.ex
Compiled stream/reducers.ex
Compiled enum.ex
Compiled regex.ex
Compiled inspect/algebra.ex
Compiled inspect.ex
Compiled string.ex
Compiled string/chars.ex
Compiled kernel.ex
Compiled list/chars.ex
Compiled module/locals_tracker.ex
Compiled module/parallel_checker.ex
Compiled module/types/helpers.ex
Compiled module/types/unify.ex
Compiled module/types/of.ex
Compiled module/types/pattern.ex
Compiled module/types/expr.ex
Compiled module/types.ex
Compiled exception.ex
Compiled path.ex
Compiled file.ex
Compiled map.ex
Compiled range.ex
Compiled access.ex
Compiled io.ex
Compiled system.ex
Compiled code/formatter.ex
Compiled code/normalizer.ex
Compiled kernel/cli.ex
Compiled kernel/error_handler.ex
Compiled kernel/parallel_compiler.ex
Compiled kernel/lexical_tracker.ex
make[1]: Entering directory '/usr/local/src/elixir/1.14.5'
==> unicode (compile)
[Unicode] Break on 25 whitespace codepoints
[Unicode] Tokenizing 107876 non-ascii codepoints
[Unicode] Tokenizing 44 scriptsets
make[1]: Leaving directory '/usr/local/src/elixir/1.14.5'
==> elixir (compile)
make[1]: Entering directory '/usr/local/src/elixir/1.14.5'
Generated elixir app
make[1]: Leaving directory '/usr/local/src/elixir/1.14.5'
==> eex (compile)
==> mix (compile)
Generated mix app
==> ex_unit (compile)
Generated ex_unit app
==> logger (compile)
Generated logger app
Generated eex app
==> iex (compile)
Generated iex app

# En el directorio de mi proyecto:
j@bt ~/Documents/trabajo/bt/td-dd (feature/td-4986) % asdf local elixir path:/usr/local/src/elixir/1.14.5
j@bt ~/Documents/trabajo/bluetab/td-dd (feature/td-4986) % rm -rf _build .elixir_ls
j@bt ~/Documents/trabajo/bluetab/td-dd (feature/td-4986) % code .

Ahora al hacer Ctrl+click sobre una función de Elixir me navega al código . Por ejemplo, sobre Map.get me navega a /usr/local/src/elixir/1.14.5/lib/elixir/lib/map.ex

NOTA: El PLT se guarda en: /usr/local/src/elixir/<versión>. Por emeplo, para esta otra compilación de Elixir con 1.13.4:
Saved Elixir PLT to /usr/local/src/elixir/1.13.4/.mix/elixir-ls-24.3.4.11_elixir-1.13.4