The problem is that `import` does more, and you can detect that `import` is 
unused and it can be replaced by `require`, but compiler cannot reason that 
`require` is unneeded as for example imagine that we have 2 modules (in 
separate files, as this will not work within single file):

defmodule A do
  def foo, do: 10
end

And in second file

defmodule AllFoos do
  require A

  @foos for module <- :code.all_loaded(), function_exported?(module, :foo, 0), 
do: module

  def foos, do: @foos
end

And without that `require` this code will depend on compilation order (which 
isn’t guaranteed by Elixir compiler) to work properly. So as you can see the 
compiler has no knowledge whether it can alter compilation order restricted by 
user.

Of course this is highly unlike scenario for `require`, but is perfectly valid 
code right now, with very well defined behaviour.

> Wiadomość napisana przez Mário Guimarães <mario.luis.guimar...@gmail.com> w 
> dniu 08.04.2019, o godz. 11:22:
> 
> Lukasz,
> 
> it should be possible to warn on unused "require".
> 
> The thing is that "import" does what "require" does plus much more, and still 
> the compiler warns on unused "import". Check this by playing with this code
> 
> defmodule X do
> def foo, do: " hello"
> defmacro xpto, do: "Hey"
> end
> 
> defmodule Y do
> import X
> #require X
> #def bar, do: X.xpto() <> X.foo() <> " world"
> end
> 
> Regards
> Mário
> 
> 
> segunda-feira, 8 de Abril de 2019 às 09:45:28 UTC+1, Łukasz Niemier escreveu:
> You do not need to use macro to require compilation. You can use function or 
> even just depending on fact that this module is already compiled in some 
> highly hacky code with metaprogramming. I cannot give you any reasonable 
> example right now. Also remember that you can require something just to call 
> functions during compile time, it do not need to be macro.
> 
>> Wiadomość napisana przez Louis Pilfold <lo...@lpil.uk <>> w dniu 08.04.2019, 
>> o godz. 10:39:
>> 
>> Hey
>> 
>> Wouldn't it be possible to track if any macros have been used by the 
>> requiring module? I'm not familiar with the compiler here but it seems like 
>> it is always possible as all information is available at compile time.
>> 
>> Cheers,
>> Louis
>> 
>> On Mon, 8 Apr 2019, 09:19 Łukasz Niemier, <luk...@niemier.pl <>> wrote:
>> Not possible as `require`s are always used - by the compiler, as this marks 
>> that required module need to be compiled before compilation of module with 
>> require.
>> 
>> W dniu piątek, 5 kwietnia 2019 17:48:56 UTC+2 użytkownik Mário Guimarães 
>> napisał:
>> Hi,
>> 
>> I suggest for Elixir to warn on unused requires, like it does for unused 
>> aliases.
>> 
>> Thanks 
>> 
>> -- 
>> 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-l...@googlegroups.com <>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/57e4a930-f4f2-4efa-a0bf-35f470a652a6%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/57e4a930-f4f2-4efa-a0bf-35f470a652a6%40googlegroups.com?utm_medium=email&utm_source=footer>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
>> 
>> -- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "elixir-lang-core" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/elixir-lang-core/d9ZjViQaOY8/unsubscribe 
>> <https://groups.google.com/d/topic/elixir-lang-core/d9ZjViQaOY8/unsubscribe>.
>> To unsubscribe from this group and all its topics, send an email to 
>> elixir-l...@googlegroups.com <>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/CABu8xFBrM7LuJoZT0HzPQ-ifxOSgVZT03XwRu%3D-pC%3DQ%3D5Ow21Q%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/CABu8xFBrM7LuJoZT0HzPQ-ifxOSgVZT03XwRu%3D-pC%3DQ%3D5Ow21Q%40mail.gmail.com?utm_medium=email&utm_source=footer>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "elixir-lang-core" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/elixir-lang-core/d9ZjViQaOY8/unsubscribe 
> <https://groups.google.com/d/topic/elixir-lang-core/d9ZjViQaOY8/unsubscribe>.
> To unsubscribe from this group and all its topics, send an email to 
> elixir-lang-core+unsubscr...@googlegroups.com 
> <mailto:elixir-lang-core+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/elixir-lang-core/130d4573-9194-4d91-be5b-c2ed909f2001%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/elixir-lang-core/130d4573-9194-4d91-be5b-c2ed909f2001%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
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/05447041-6138-41E4-A265-2C3E3F3DE8C3%40niemier.pl.
For more options, visit https://groups.google.com/d/optout.

Reply via email to