@@ -81,52 +81,44 @@ defmodule Macro do
8181 message: "cannot pipe #{ to_string expr } into #{ to_string call_args } "
8282 end
8383
84- @ doc """
85- Receives an expression representing a possible definition
86- and extracts its arguments. It returns a tuple with the
87- function name and the arguments list or `:error` if not
88- a valid call syntax.
89-
90- This is useful for macros that want to provide the same
91- argument syntax available in def/defp/defmacro and friends.
92-
93- ## Examples
94-
95- extract_args(quote do: foo) == { :foo, [] }
96- extract_args(quote do: foo()) == { :foo, [] }
97- extract_args(quote do: foo(1, 2, 3)) == { :foo, [1, 2, 3] }
98- extract_args(quote do: 1.(1, 2, 3)) == :error
99-
100- """
101- @ spec extract_args ( Macro . t ) :: { atom , [ Macro . t ] } | :error
84+ @ doc false
10285 def extract_args ( expr ) do
103- :elixir_clauses . extract_args ( expr )
86+ IO . write "Macro.extract_args/1 is deprecated, use Macro.decompose_call/1 instead\n #{ Exception . format_stacktrace } "
87+ decompose_call ( expr )
10488 end
10589
10690 @ doc """
107- Decomposes a local or remote call into its module alias (when a remote
108- call is provided), function name and argument list.
109- Returns :error when an invalid call syntax is provied.
91+ Decomposes a local or remote call into its remote part (when provided),
92+ function name and argument list.
93+
94+ Returns `:error` when an invalid call syntax is provided.
11095
11196 ## Examples
11297
113- decompose_call(quote do: foo) == { :foo, [] }
114- decompose_call(quote do: foo()) == { :foo, [] }
115- decompose_call(quote do: foo(1, 2, 3)) == { :foo, [1, 2, 3] }
116- decompose_call(quote do: M.N.foo(1, 2, 3)) ==
117- { { :__aliases__, [alias: false], [:M, :N] }, :foo, [1, 2, 3] }
118- decompose_call(quote do: 42) == :error
98+ iex> Macro.decompose_call(quote do: foo)
99+ { :foo, [] }
100+ iex> Macro.decompose_call(quote do: foo())
101+ { :foo, [] }
102+ iex> Macro.decompose_call(quote do: foo(1, 2, 3))
103+ { :foo, [1, 2, 3] }
104+ iex> Macro.decompose_call(quote do: M.N.foo(1, 2, 3))
105+ { { :__aliases__, [alias: false], [:M, :N] }, :foo, [1, 2, 3] }
106+ iex> Macro.decompose_call(quote do: 42)
107+ :error
119108
120109 """
121110 @ spec decompose_call ( Macro . t ) :: { atom , [ Macro . t ] } | { Macro . t , atom , [ Macro . t ] } | :error
122- def decompose_call ( expr ) do
123- case expr do
124- { { :. , _ , [ { :__aliases__ , meta , atoms } , f ] } , _ , args } ->
125- { { :__aliases__ , meta , atoms } , f , args }
126- _local ->
127- :elixir_clauses . extract_args ( expr )
128- end
129- end
111+ def decompose_call ( { { :. , _ , [ remote , function ] } , _ , args } ) when is_tuple ( remote ) or is_atom ( remote ) ,
112+ do: { remote , function , args }
113+
114+ def decompose_call ( { name , _ , args } ) when is_atom ( name ) and is_atom ( args ) ,
115+ do: { name , [ ] }
116+
117+ def decompose_call ( { name , _ , args } ) when is_atom ( name ) and is_list ( args ) ,
118+ do: { name , args }
119+
120+ def decompose_call ( _ ) ,
121+ do: :error
130122
131123 @ doc """
132124 Recursively escapes a value so it can be inserted
0 commit comments