arjan / decorator

Function decorators for Elixir
MIT License
386 stars 21 forks source link

Can't use other modules macros while using decorator #37

Open FrancescoZ opened 4 years ago

FrancescoZ commented 4 years ago

While using decorator with Spandex i'm not able to add another use in sequence:

defmodule Fetcher.Info do
  use Spandex.Decorators
  use Interceptor.Annotation

 @intercept true
 @decorate span(type: :backend)
 def retrieve_information(resource_uuid) do
      #mycode
 end
end

Using this code I get the following warning:

warning: this clause cannot match because a previous clause at line 1 always matches
  lib/fetcher/info.ex:1

Could it be useful to insert something like this?

Module.register_attribute __MODULE__, :decorate, accumulate: true

To allow the macros to be used as a list and not overwrite the previous. I think this would also help the #29, what do you think?

arjan commented 4 years ago

Hmm, have not looked at this for a while; but it seems this register attribute already happens when you use the decorator. So something else must be going on?

FrancescoZ commented 4 years ago

mmmm from a really superficial analysis it seems that the redefinition of __using__ do not allow other module to do the same. I'm trying to deeper in this direction