Formatter error in Phoenix migrations, can't find ecto_sql

I’m working my way through the Programming Phoenix > 1.4 book and I’ve got a problem with the formatter.

I’m using Atom with Elixir addons, which calls the formatter and reports errors and autofixes the format. But the formatter doesn’t like the migrations. I get this error

** (Mix) Unknown dependency :ecto_sql given to :import_deps in the formatter configuration. The dependency is not listed in your mix.exs for environment :dev

Which is odd because :ecto_sql is very definitely in the list of dependencies in mix.exs, though there isn’t a specific environment for :dev section.

Since this is a plain installation, and follows the book, I’m assuming that other people have the same problem, but I can’t see any other questions being asked.

Anyone have any idea how I get this fixed?

1 Like

Hi @JohnSmall, the error happens if the mix format command runs in wrong directory. I guess it is caused by the Elixir plugin used in Atom. You can try VSCode and install the “ElixirLS Fork” extension.

Which addons exactly? What version of Elixir / Erlang / Phoenix?
Does the formatter give the same error if you run it from the command line?

For reference, I don’t see any such errors with these installed:

  • atom-elixir 0.2.3
  • atom-elixir-formatter 1.0.6
  • language-elixir 0.23.0
  • linter-elixir-credo 1.1.0

Hi @JohnSmall did you per chance use the latest version of ecto instead of the version specified in the Phoenix book? In the latest version of Ecto, you need to add :ecto_sql as an additional dependency now, it was extracted from ecto proper.

Yes it is the latest version of Phoenix. But it’s automatically added :ecto_sql to deps in mix.exs. Here’s the code

defp deps do
    [
      {:phoenix, "~> 1.4.11"},
      {:phoenix_pubsub, "~> 1.1"},
      {:phoenix_ecto, "~> 4.0"},
      {:ecto_sql, "~> 3.1"},
      {:postgrex, ">= 0.0.0"},
      {:phoenix_html, "~> 2.11"},
      {:phoenix_live_reload, "~> 1.2", only: :dev},
      {:gettext, "~> 0.11"},
      {:jason, "~> 1.0"},
      {:plug_cowboy, "~> 2.0"}
    ]
  end

As you can see :ecto_sql is definitely there.

Good point, what happens when I run from the command line? Ans: no errors.

Which prompts the question where are the Atom addons getting the error message from? I’m using

  • atom-elixir 0.2.3
  • atom-elixir-formatter 1.0.6
  • language-elixir 0.23.0
  • linter-elixir-credo 1.1.0

Exactly the same as you. Are there special settings that have to be configured for these addons?

Do you start your editor from a GUI or from the terminal, if you open it from the terminal, do you see the same error?

I get the same error if I start Atom from the command line as I do when starting it from the Mac dock toolbar.

Well not quite the same error, the error comes up twice instead of just once.

By disabling and enabling the packages I can see that the error is generated by atom-elixir-formatter v1.0.6.

There doesn’t seem to be much configuration that can be changed, other than the executable it calls. Which is the default elixir.

I checked the Github repo for the package and found other people with the same problem https://github.com/rgreenjr/atom-elixir-formatter/issues/26 but the author doesn’t have time to fix it. Sigh :frowning:

Just to make sure, do you start it from the project folder than?

Quite often those problems arise from the processes working dir is incorrect.

Just tried it and it makes no difference. Which is reasonable because it checks the formats on all other files in the project correctly.

If I had to start Atom from the command line in the root directory of the project to get it to work that would be crazy as I have 5 projects open at once.

As the author doesn’t have time to fix the problem I’ll investigate a bit to see if I can diagnose what’s going wrong.

A quick scan of the code shows that it runs mix format inside the first directory where it find a .formatter.exs file for the file being checked.

If I cd into the migrations directory and run mix format etc then I get the exact same error that the package reports.

The workaround is to delete .formatter.exs from the migrations directory. It’s already checked in the configuration inside .formatter.exs in the root directory. Then it works

So the lesson is atom-elixir-formatter can only be run on sub-directories that don’t have a .formatter.exs

1 Like

@JohnSmall I just published v2.0.0 of atom-elixir-formatter a few days ago, which I believe will fix this issue. It required significant changes, so please take a look and let me know if it works for you.

1 Like

I got the same error in VSCode.
I solved it by adding :ecto_sql in .formatter.exs

2 Likes

Hi, I am using atom-elixir-formatter v2.0.0, however I am still getting this error. Please advise how to go about it.

If I disable atom-elixir-formatter package, the error goes away. If I enable it, I get it again.