Using Dialyzer
Learn what Dialyzer is and how it works with typespecs.
We'll cover the following...
Introduction
Dialyzer analyzes code that runs on the Erlang VM, looking for potential errors. To use it with Elixir, we have to compile our source into .beam
files and make sure that the debug_info
compiler option is set (which it is when running mix
in the default development mode). Let’s see how to do that by creating a trivial project with two source files.
$ mix new simple
...
$ cd simple
Inside the project, let’s create a simple function. We haven’t implemented the body yet.
defmodule Simple do
@type atom_list :: list(atom)
@spec count_atoms(atom_list) :: non_neg_integer
def count_atoms(list) do
# ...
end
end
Let’s run Dialyzer on our code. To make life simple, we’ll use the dialyxir
library to add a dialyzer
task to mix
:
defp deps do
[
{ :dialyxir, "~> 0.5", only: [:dev], runtime: false }
]
end
Next, we fetch the library and build our project:
$ mix deps.get
$ mix compile
Now we’re ready to analyze our code. However, the first time we do this, dialyzer
needs to construct a massive ...