ZACKYこと山崎進です。
fukuoka.ex もくもく会が終わった翌日も,もりもり創作意欲が湧いているので,書き綴ってみたいと思います。今回は小ネタで,マクロからコンパイルエラーやウォーニングを生成する方法について調べてみました。
マクロからウォーニングを生成してみる
defmodule Foo do
defmacro raise_warn do
:elixir_errors.warn __ENV__.line, __ENV__.file, "warning"
end
end
結果
$ iex -S mix
iex(1)> require Foo
Foo
iex(2)> Foo.raise_warn
warning: warning
iex:2
:ok
iex(3)>
マクロからエラーを生成してみる
defmodule Foo do
defmacro raise_error do
:elixir_errors.parse_error __ENV__.line, __ENV__.file, "error", <<>>
end
end
結果
$ iex -S mix
iex(1)> require Foo
Foo
iex(2)> Foo.raise_error
** (TokenMissingError) iex:2: error
expanding macro: Foo.raise_error/0
iex:2: (file)
iex(3)>
エラーはちょっと「コレジャナイ感」がありますね。。。
次回は「ZEAM開発ログ v.0.4.13 マクロを使って micro Elixir のフロントエンドを作ってみる (野望編)」をお届けします。お楽しみに!