Subscribe for only $15 to access all of our content

#21: Elixir Formatter Preview

Elixir 1.6


Since its announcement at ElixirConf this year, the formatter coming to Elixir 1.6 is getting a lot of love.

In this episode we’ll take a quick dive into the formatter to get a feel for how it will work.

Since it’s planned to be released with Elixir 1.6 we’ll need to install it. I’ll use homebrew to install.

$ brew install elixir --HEAD

Once it’s finished let’s check that the version is correct:

$ elixir -v

Great, we see 1.6.

Now let’s view the formatter’s current documentation by running:

$ mix help format

We can see that to run the formatter, we’ll use mix format and pass it either a file or file pattern.

There’s also info on different options the formatter accepts. In addition it tells us there’s a .formatter.exs file we can use to customize the formatter and recommends when to run the formatter.

Now that we know the basics of the formatter - let’s see it in action.

Here I’ve got a simple module with a few minor formatting issues, like an extra space between the module and the first function and no spaces between function parameters

Let’s go back to the command line and run:

$ mix format lib/teacher.ex --check-formatted

Which will tell us if the file has been formatted.

Great it tells us that the file hasn’t yet been formatted.

Let’s run the formatter on it:

$ mix format lib/teacher.ex

And if we go back to our module we can see it’s been formatted - the empty line between the module definition and the first function is gone. And there are spaces between the function parameters.

Now let’s take the next step and create a .formatter.exs file that we can use to customize the formatter.

In it we’ll add the inputs field, and give it a list of the file patterns we want to format. In this case we’ll tell it to format all ‘.ex’ and ‘.exs’ files in our lib directory and our mix.exs file.

There are a few other options we can add to customize our formatter - let’s add two of them: line_length and rename_deprecated_at

First we’ll add line_length, which simply tells the formatter our limit on the length of a line.

Let’s set ours to 60.

Before we add rename_deprecated_at let’s take another look at our module.

In our word_counter function we’re calling Enum.partition which is deprecated in favor of Enum.split_with.

Back in our .formatter.exs file we’ll add rename_deprecated_at, which changes all deprecated functions to their non-deprecated equivalent.

Then we’ll specify the version we’re using - “1.4.5”.

.formatter.exs

[
  inputs: [
    "lib/**/*.{ex,exs}",
    "mix.exs"
  ],
  line_length: 60,
  rename_deprecated_at: "1.4.5"
]

And with that let’s go to the command line and run: $ mix format

Going back to our module, we can see that it’s been formatted according to our new specifications.

Our long lines were broken up and the deprecated Enum.partition and been changed to Enum.split_with

Currently the formatting rules are still being defined, but the elixir-style-guide is the closest guide.

I think this is a great addition to Elixir and can’t wait until Elixir 1.6 is released.

More Episodes

#81: Building Structs from External Data

Here we’ll see how structs can be used to format data. We’ll start with an introduction to structs and then explore different ways to map external data to a struct, including using the ExConstructor package.

Watch episode
Alchemist's Edition

#80: Proactive Caching

In this episode we’ll use proactive caching with Cachex. Proactive caching can help ensure there is never a cache miss since data is loaded when the application starts.

Watch episode
Alchemist's Edition

#79: Caching with Cachex

Here we look at how to use Cachex to create a cache in an Elixir application. We’ll start by seeing how to interact with Cachex and then we’ll implement a simple cache in our application.

Watch episode