Elixir Snippet Compiler / Debugger For Visual Studio Code?

I’m just starting out with Elixir in Visual Studio, coming from Python using PyCharm to develop.

In PyCharm there was a 1 click compiler & debugger. So far I can’t find anything like that for Elixir for Visual Studio?

Am I missing something?

If you’re debugging in Visual Studio how are you compiling/debugging code snippets?

1 Like

You mean Visual Studio Code?

There is no integration. If you are using a Mix project, a simple mix compile on the command line should do the trick. Then to run your application, a simple iex -S mix should load an Elixir shell and your application, so you can do commands from there.

1 Like

This will be an unpopular opinion to some, I’m sure, but I’m of the opinion that classic “step debugging” is largely useless in BEAM applications. The problems you encounter will more often than not have something to do with how you’ve laid out your actual process infrastructure.

What step debugging means for execution in processes is that you’ll be holding up a process live system, so it in fact doesn’t help for the actually important issues you’ll be investigating, as they’ll probably show up mostly under load where several processes need to interact. Obviously, if you freeze a process that might need to interact with other processes and as such won’t be responding to requests from elsewhere, you’re now actually the one breaking the system and your debugging has caused effects far beyond what a normal bug could.

It’s something akin to how you can’t determine the spin of an atom (?) without stopping it, thus actually influencing it.

There are other, better ways of debugging, like tracing, that will actually intercept messages between processes and give you information about the state changes in those processes.

If you’re not referring to debugging in the sense previously mentioned, could you please clarify what it is you mean?

1 Like

Anyone know of a Visual Studio Code extension that will compile the current open Elixir window without having to type out the compile command each time?

1 Like

I do not know about such a plugin. But you could use eye_drops to have a compile on save. Or anything similar. Guard from the ruby world will do as well but might be hard to integrate correctly.

1 Like

If VSCode can take Atom plugins (wasn’t there a plugin for VSCode that lets you run a bulk set of Atom plugins?), all I do in Atom is hit save (Ctrl+s), that will then compile the file, run credo over it, and a few other things, with all errors and warnings appearing in the linter view that pops up at the bottom if there are any issues. :slight_smile:

1 Like

Is there an Elixir IDE that has the functionality to highlight code, and run just that highlighted code?

How would that work beyond anything more complex than 1+1 or so? Macros can transform code (a viewer for that would be awesome though!) you’d not know which things to import without basically ‘running’ the rest of the file, etc… etc…

I’m looking for some kind of bridge to quick test a function without writing a formal test or running all the code in the file. And a quick way to iterate writing a small piece of code, running a quick test of that snippet, then writing the entire module, finally building a formal test. Basically a way to iterate between writing & running code without friction or extra keystrokes.

Hmm, well a def is just a macro that takes the body and creates an AST to pass to the module body, it itself does nothing (and this is why you cannot def something in the REPL), and the defmodule call just takes its whole body and passes it to the internal elixir call that creates a new module. Even just a single line of code unless entirely self contained (no imports or aliases or so) seems very difficult to just ‘run’, especially considering how the environment can be transformed around it with macros…

Would it not be easier just to run an iex session of the project and execute them that way? That is what I do, combined with a real-time code reloader it makes it pretty trivial to do?

Not exactly what you’re looking for, but maybe this could be extended?

You can have an .exs file and run it with elixir your_file_name.exs. You don’t need modules or functions in that (but you can have them if you want). This is what I personally use for quick iterations/experiments.

So combining that with the previous link, I guess (but don’t know for sure, since I’m not familiar with VSCode) that it should be possible to create a task which runs the current file using the elixir command and outputs the result.

1 Like

If you’re using the vscode-elixir extension then the author gives you a task runner snippet to build and test. You will need to create your project using mix, which I didn’t know at the time.

Details; https://github.com/fr1zle/vscode-elixir/blob/master/README.md

1 Like

You might want to look at this PR for the elixir plugin. I tried the run highlighted code in tonight and it works for basic stuff. But it does not have the context of your project, so you can’t running anything specific to your project (at least that’s my impression.

I started playing around with the editor tonight. I currently use Sublime Test. So far, I’m impressed with VS Code.

1 Like

I’ve just released a VS Code extension that includes debugger integration: https://medium.com/@JakeBeckerCode/introducing-elixirls-the-elixir-language-server-d449bbbdfc01

It’s pretty rough right now, but basic step debugging with line breakpoints works. Give it a try!

1 Like