-
-
Notifications
You must be signed in to change notification settings - Fork 50
Description
Phoenix.Component overrides the def and defp macros to annotate function heads with some pattern matching.
I believe because defparams creates a new method by calling Module.eval_quoted/2 this is somehow evaluating the ast returned by Phoenix.Component's def macro prematurely(? - tbh, I don't grok this perfectly yet)
But the error can be seen with code like the following:
defmodule MyMod do
use Phoenix.Component
use Params
defparams fleeno %{some: :string}
def hi do
IO.puts("Hello")
end
enderror: cannot invoke remote function Phoenix.Component.Declarative.__pattern__!/2 inside a match
nofile:1: MyMod.util_2/1
Is there a reason I'm not understanding that the defparams macro is using Module.eval_quoted/2 rather than just defining the method directly?
In other words, can't
Module.eval_quoted(__MODULE__, quote do
def unquote(name)(params) do
unquote(module_name).from(params)
end
end)Just be written as
def unquote(name)(params) do
unquote(module_name).from(params)
endIn my own experiments it seems to work fine, but I'm not sure if I'm missing something.
(Of course, I could just call the macro before I use Phoenix.Component, but perhaps there's a more comprehensive fix)