defmodule CornerHelper do
@moduledoc """
This Module define macros to help debug code.
"""
@doc """
debug(v) use to print v pretty in the scrren, when the Mix.env is `:dev`.
"""
defmacro debug(term, env) do
if env || Mix.env() == :dev do
quote [:generated, location: :keep] do
file = __ENV__.file
line = __ENV__.line
sp_line = String.duplicate("-", 80)
IO.puts(["\n", sp_line])
term = unquote(term)
IO.inspect(term, pretty: true)
IO.puts("#{file}:#{line}")
IO.puts([sp_line, "\n"])
term
end
end
end
@doc """
here() use to print a message show where the code run at, like "Now we are at
<module>.<function>".
"""
defmacro here(env \\ nil) do
if env || Mix.env() == :dev do
quote [:generated] do
%{function: function, module: module} = __ENV__
function =
case function do
{fun_name, arg_num} -> "#{fun_name}/#{arg_num}."
nil -> ""
end
debug("Now we are at #{module}.#{function}", Mix.env())
end
end
end
end