Edited at

Elixir v1.2.2 ではdialyzerが動かないらしいぞ

More than 3 years have passed since last update.

ブログは一応あるんだけども、時限性のあるものはQiitaに残すかーと思い使い始め。

Elixirは(というかErlangは)動的型付けであるものの、静的解析ツールであるdialyzerである程度チェックができて、dialyxirを使うと手間もいりません。これが、Elixirのバージョンを1.2.2に上げたら動かないことに気づきました。

% mix dialyzer.plt

Starting PLT Core Build ... this will take awhile
(略)
dialyzer: Could not get abstract code for file: d:/bin/elixir/lib/elixir/../elixir/ebin/Elixir.String.Graphemes.beam (please recompile it with +debug_info)

** (FunctionClauseError) no function clause matching in Keyword.get/3
(elixir) lib/keyword.ex:150: Keyword.get(:no_such_file, :files, nil)
lib/mix/tasks/dialyzer.plt.ex:132: Mix.Tasks.Dialyzer.Plt.core_plt_contains?/2
lib/mix/tasks/dialyzer.plt.ex:123: anonymous fn/1 in Mix.Tasks.Dialyzer.Plt.missing_apps/0
(elixir) lib/enum.ex:738: anonymous fn/3 in Enum.filter/2
(elixir) lib/enum.ex:1473: Enum."-reduce/3-lists^foldl/2-0-"/3
(elixir) lib/enum.ex:738: Enum.filter/2
lib/mix/tasks/dialyzer.plt.ex:106: Mix.Tasks.Dialyzer.Plt.need_add?/0
lib/mix/tasks/dialyzer.plt.ex:57: Mix.Tasks.Dialyzer.Plt.run/1

dialyxirのissuesを見に行くと、この問題も挙がっていました( https://github.com/jeremyjh/dialyxir/issues/42 )。dializerの問題ではなく、Elixirの(デフォルトの)ビルド設定の問題のようで、議論の中でElixir本体のissueにリンクされています。"Fixed in master and v1.2 (which will have a new release soon-ish)." で、修正済みとしてclose。

v1.2.3で直ったので、このエラーを見てしまった人はバージョン上げましょう。