Как исправить ошибку Dialyzer "Обратный вызов о поведении"..... "недоступен" для новых Mix.Tasks

Я создал новый Mix.Task в /lib/mix/tasks/start.ex для моего проекта

defmodule Mix.Tasks.Start do
  use Mix.Task

  def run(_), do: IO.puts("Hello, World!")
end

Теперь его можно запустить из консоли следующим образом:
mix start

Но я получаю ошибку Dialyzer, что Callback info about the 'Elixir.Mix.Task' behaviour is not available, Что это значит и как это можно исправить?

1 ответ

Похоже, у меня не было добавлено опций Persistent Lookup Table (PLT) для диализатора. В моем случае, чтобы поведение "Elixir.Mix.Task" было доступно для диализатора, мне пришлось обновить файл mix.exs и определить, для каких модулей диализатор должен создавать PLT.

  def project do
    [
      app: :dungeon_crawl,
      version: "0.1.0",
      elixir: "~> 1.6",
      start_permanent: Mix.env() == :prod,
      deps: deps(),
      # Added following line
      dialyzer: [plt_add_apps: [:mix]]
    ]
  end

dialyzer добавляется через dialyxir в тот же файл mix.exs, как это

  defp deps do
    [
      {:dialyxir, "~> 0.5", only: [:dev], runtime: false}
    ]
  end

mix do deps.get, deps.compile
И ваш диализатор должен перестать жаловаться
mix dialyzer

Другие вопросы по тегам