In Elixir, IEx has many conveniences which make it easy to debug/navigate your code. One convenience is IEx.Helpers.open/1, which will open up your editor to where a given module.function/arity is defined.
For example, if my project has a file like:
# lib/samplemodule.ex
defmodule SampleModule do
# other definitions
def sample_function() do
# do useful things
end
endIn IEx, I can do:
iex(1)> open SampleModule.sample_function/0which runs something like:
$ editor_executable /Users/mat/projects/open-sample/lib/samplemodule.ex:4which will open my editor, open samplemodule.ex and put the cursor on line 4.
During compilation, Elixir stores information about where each function is defined from the source code. open/1 pieces that information back together and and passes it to the editor. If you're interested in see how, you can look at open/1's source: iex(1)> open open/1
Recently, I tried to use open/1, and quickly realized, I didn't have it setup properly for use with VSCodium (the fully open-sourced, telemetry-free version of Visual Studio Code; see https://vscodium.com/ for more info).
Referencing the open/1 documentation, I needed to setup a few things. Here's how.
- Install the codium/code executable for the command line.
For VSCodium, this executable is codium; for VSCode, its code. The executable already exists in the VSCodium app, however, it needs to be added somewhere in your PATH to be useable.
Thankfully, VSCodium has a command to make it easy. Follow the instructions for lauching from the command line. For VSCodium users, substitute codium instead of code when typing commands.
- Export the
ELIXIR_EDITOR/EDITORshell variable
Now the editor executable is installed, Elixir and IEx need to know about it. As per the open/1 documentation from above, IEx uses the ELIXIR_EDITOR variable, or if that isn't set, falls back to the more generic EDITOR variable.
In whatever shell you use, you'll need to set and export the ELIXIR_EDITOR variable.
For fish:
set -x ELIXIR_EDITOR "codium --goto"For bash/zsh:
export ELIXIR_EDITOR="codium --goto"codium/code uses the --goto flag to open a file path and go to that line number.
Per the
codium -hdocumentation,--gotocan be shortended to-g. Since this is a saved command that I'm not typing, I prefercodium --gototo remind me of what the command is doing;-gseems vague while looking through my environment variables.
All set!