5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

dialyzer先生許してください!

Last updated at Posted at 2019-11-06

mix dialyzerのエラーを一部無視させたい

ことしになってElixirを使い始めて,最近になってようやくmix dialyzerの有り難さが分かるようになった.有り難さがわかると同時に,このdialyzer先生は何が間違ってるのかちゃんと教えてくれないってこともわかってきた.間違ってるところは正しいっぽいが.
それが原因かどうかはわからないが,時々ライブラリがdialyzer先生を怒らせることがある.自分がやったところじゃないことに対しても怒ってくるdialyzer先生マジ理不尽.

これがあまり重要じゃないライブラリならライブラリを使うこと自体をやめれば良いのだが,にっちもさっちもいかないときがやはりある.僕が遭遇したケースはPhoenix-no-htmlオプションを使用したときに何故か発生するエラー.

lib/phoenix/router.ex:2: Function call/2 has no local return
lib/phoenix/router.ex:325: The variable __@7 can never match since previous clauses completely covered the type 'error'

しかもこのエラーでググってみると,公式へのバグ報告は一応されてはいるものの,公式が「俺らはdialyzerの面倒をいちいち自分たちで確認しないからよろしくな!」なんて言っているから自分で面倒を見なきゃいけない.かといってPhoenixのコードを頑張って弄れたとしても,mix deps.getで吹き飛ぶわけで,チョットデキルマンにでもならない限りは根本解決なんかできやしない.

やり方

ってことで,流石になんか方法あるだろうと思ってdialyzer先生のHexDoc読んでみたら方法が書いてあった.mix.exsにdialyzer先生の設定を書き込んで,無視するエラー一覧を作れば良いだけらしい.

mix.exs
  def project do
    [
      app: :something,
      version: "0.1.0",
      elixir: "~> 1.5",
      elixirc_paths: elixirc_paths(Mix.env()),
      compilers: [:phoenix, :gettext] ++ Mix.compilers(),
      start_permanent: Mix.env() == :prod,
      aliases: aliases(),
      deps: deps(),
      dialyzer: [ignore_warnings: "dialyzer.ignore-warnings"],
    ]
  end

まぁ余計なのも並んでいるが、大事なのはdialyzer: [ignore_warnings: "dialyzer.ignore-warnings"]の行で,dialyzer.ignore-warningsというのが無視するエラー一覧のパス.もちろん相対パス.

dialyzer.ignore-warnings
lib/phoenix/router.ex:2: Function call/2 has no local return
lib/phoenix/router.ex:325: The variable __@7 can never match since previous clauses completely covered the type 'error'

あまりにもそのまま過ぎて驚いたのだけども,無視したいエラーはmix dialyzer実行して出てきた文そのままコピペすればいいっぽい.

というわけで以上でDone (passed successfully)

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?