I have an umbrella project that I’m trying to use dialyxir with, but I am getting a lot of “noise” regarding unknown functions and unknown types dealing with Ecto.
This gist contains most (though not all) of the output when I run
mix dialyzer. As you can see, I get errors such as:
I was wondering if I am doing something wrong that is causing all of these warnings. I am running
mix dialyzer from the root of my umbrella app, and only one app has
ecto as a dependency.
mix.exs contains the following:
def project do
build_embedded: Mix.env == :prod,
start_permanent: Mix.env == :prod,
dialyzer: [plt_add_deps: :transitive]]
Also, all of the dependencies are being built into the root umbrella project’s
In case this is relevant, I’d also like to add that when I run
mix dialyzer from the umbrella’s root, I get this:
dialyzer --no_check_plt --plt /Users/stevenleiva/.dialyxir_core_19_1.3.3.plt -Wunmatched_returns -Werror_handling -Wrace_conditions -Wunderspecs _build/dev/lib/app_a/ebin _build/dev/lib/app_b/ebin, where
app_b are the two OTP apps I wrote myself.
I tried changing the command to
dialyzer --no_check_plt --plt /Users/stevenleiva/.dialyxir_core_19_1.3.3.plt -Wunmatched_returns -Werror_handling -Wrace_conditions -Wunderspecs _build/dev/lib/*/ebin but that doesn’t seem to be the way to do it.
Did you run
mix dialyzer.plt first? It is necessary so it caches a lot of data which the subsequent
mix dialyzer uses. Presumably only needed to be ran once per Erlang / Elixir version.
Hi @pdimitar - yes, after updating the root
mix.exs, I ran
mix dialyzer.plt, which ran a command like the below. (I’ve cut out the other libs, to focus on the fact that ecto’s
ebin folder is being included.
Checking PLT for missing apps.
Checking PLT for updated apps.
dialyzer --check_plt --plt /Users/stevenleiva/.dialyxir_core_19_1.3.3.plt -pa _build/dev/lib/ecto/ebin
Checking whether the PLT /Users/stevenleiva/.dialyxir_core_19_1.3.3.plt is up-to-date... yes
done (passed successfully)