D
Size: a a a
D
PS
AF
@on_definition + Module.put_attribute не поможет?VP
VP
@on_definition + Module.put_attribute не поможет?AF
VP
VP
AF
VP
VP
FM
@before_compile хук, в котором засадить флажок в дикт процесса, типа Process.put(:compile_time, true), а затем уже в пре/пост-хуках его проверятьFM
defmodule CompileTimeTrap do
defmacro __before_compile__(_env) do
quote do
Process.put(:compile_time, true)
end
end
end
defmodule Test do
@before_compile CompileTimeTrap
use ExRay, pre: :pre_fun
defp pre_fun(ctx) do
if Process.get(:compile_time) do
# ...
end
end
end
B
AM
defmodule CompileTimeTrap do
defmacro __before_compile__(_env) do
quote do
Process.put(:compile_time, true)
end
end
end
defmodule Test do
@before_compile CompileTimeTrap
use ExRay, pre: :pre_fun
defp pre_fun(ctx) do
if Process.get(:compile_time) do
# ...
end
end
end
elixir
defmodule SomeModule do
use Tracer
@valid_types OtherModule.valid_types()
def some_func(arg) when arg in @valid_types do
end
end
fmodule OtherModule doну и вобщем когда первый компилируется - вызывается pre_func 🙂 Я бы предложил пушить в рантайме в env tracer_started переменную, которую тянуть уже из pre_func и запускать трейсер в зависимости от неё, а в идеале просто обернуть это в контракт и если трейсер выключен - не использовать модуль трейсера, а использовать заглушку.
use Tracer
def valid_types(arg), do: [1,2,3]
end
AM
S
AK
AK
S