Function Decorating v0.0.6 FnDef
Summary
Functions
Calcuate argument name from arg expresion
Generate AST for argument AST and its mediator
Examples
Add mediator argument to a function argument ast
Add meidator arguments to a function arguments list ast
Parse a function call into its parts: name and arguments
Functions
Calcuate argument name from arg expresion.
Returns the first good arg name that can be used. Not _ if possible.
Examples
iex> FnDef.calc_arg_name(quote do aa end)
:aa
iex> FnDef.calc_arg_name(quote do aa = bb end)
:aa
iex> FnDef.calc_arg_name(quote do _aa = bb end)
:bb
iex> FnDef.calc_arg_name(quote do _ = bb end)
:bb
iex> FnDef.calc_arg_name(quote do _ = bb \\ 6 end)
:bb
iex> FnDef.calc_arg_name(quote do _ = _bb \\ 6 end)
:_bb
iex> FnDef.calc_arg_name(quote do {aa} = bb end)
:bb
iex> FnDef.calc_arg_name(quote do [aa] = bb end)
:bb
Generate AST for argument AST and its mediator.
Examples
iex> FnDef.calc_full_arg(quote context: __MODULE__ do first_name end, quote context: __MODULE__ do arg0 end)
{:=, [], [{:first_name, [], __MODULE__}, {:arg0, [], __MODULE__}]}
Examples
iex> FnDef.convert_to_cols([{:first_name, {:arg0, [], FnDef}, {:=, [], [{:first_name, [], __MODULE__}, {:arg0, [], FnDef}]}}, {:last_name, {:arg1, [], FnDef}, {:=, [], [{:last_name, [], __MODULE__}, {:arg1, [], FnDef}]}}])
{[:first_name, :last_name], [{:arg0, [], FnDef}, {:arg1, [], FnDef}], [{:=, [], [{:first_name, [], __MODULE__}, {:arg0, [], FnDef}]}, {:=, [], [{:last_name, [], __MODULE__}, {:arg1, [], FnDef}]}]}
Add mediator argument to a function argument ast.
Returns {decorated argument name, decorated argument ast}
Examples
iex> FnDef.decorate_arg({quote context: __MODULE__ do first_name end, 0})
{:first_name, {:arg0, [], FnDef}, {:=, [], [{:first_name, [], __MODULE__}, {:arg0, [], FnDef}]}}
Specs
decorate_args(list) :: {list, list, list}
Add meidator arguments to a function arguments list ast.
Mainly for the availabity to print unbounded arguments in a function call.
say(word) -> say(word = arg0)
Returns {[args names], [decorated args ast]}
Examples
iex> FnDef.decorate_args(quote context: __MODULE__ do [a, b, _] end)
{[:a, :b, :arg2],
[{:arg0, [], FnDef}, {:arg1, [], FnDef}, {:arg2, [], FnDef}],
[{:=, [], [{:a, [], __MODULE__}, {:arg0, [], FnDef}]},
{:=, [], [{:b, [], __MODULE__}, {:arg1, [], FnDef}]},
{:=, [], [{:_, [], __MODULE__}, {:arg2, [], FnDef}]}]}