Oh, doh! It is there in your comments. :) Who reads code comments anyway? :D

You want Code.can_await_module_compilation?, available since v1.11. mix
test, livebook, iex, are all the same (and all return false).

On Thu, Dec 9, 2021 at 8:39 PM José Valim <jose.va...@dashbit.co> wrote:

> Can you please explain why you need to know the execution mode.
>
> The fact a library can compile different code depending if it is compile,
> test, or something else is not something we should encourage.
>
> On Thu, Dec 9, 2021 at 8:37 PM Ivan Rublev <ivan.rublev.busin...@gmail.com>
> wrote:
>
>> Hi folks,
>> After delivering the library generating code from type specs, I realised
>> that I'm missing the explicit indication of whether the function/macro is
>> executed within the mix compile task, the mix test task, or interactively
>> (iex / live book) during the compile-time.
>>
>> Here is the code to illustrate the use case:
>> defmacro __using__(opts) do
>>   ...
>>    cond do
>>       in_mix_compile? ->
>>         # plan the code generation when mix compile finishes to resolve
>> type dependencies between BEAM files.
>>       in_mix_test? ->
>>         # raise an error and suggest compiling the module as an .ex file
>> for the test environment.
>>       true ->
>>         # we're in iex / live book, generate code immediately because
>> type dependencies are resolved during the sequential definition of the
>> modules.
>>    end
>> end
>>
>> Currently, I use the following hacks to get to know the execution mode:
>> def in_mix_compile?(module_env) do
>>   tracers = Map.get(module_env || %{}, :tracers, [])
>>   Enum.member?(tracers, Mix.Compilers.ApplicationTracer)
>> end
>>
>> def in_mix_test?(_module_env) do
>>   not is_nil(GenServer.whereis(ExUnit.Server))
>> end
>>
>> Is it an absurd idea to add the explicit field indicating execution mode
>> like the following?:
>> %Module.Env{
>>    execution_mode: :compile | :test | :interactive
>> }
>>
>> that can be returned by __CALLER__ in a macro or by __EVN__ in a
>> function.
>>
>> Warm regards,
>> Ivan.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "elixir-lang-core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to elixir-lang-core+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/elixir-lang-core/cb990143-1498-4ccc-b982-73515656f91an%40googlegroups.com
>> <https://groups.google.com/d/msgid/elixir-lang-core/cb990143-1498-4ccc-b982-73515656f91an%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LD4du3SDOFq8WmQbYbYfYYOfwEos623rmd4qBdLr3mvQ%40mail.gmail.com.

Reply via email to