Function Decorating v0.0.6 FnDef

Summary

Functions

Calcuate argument name from arg expresion

Generate AST for argument AST and its mediator

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

calc_arg_name(arg_ast)

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
calc_full_arg(arg_ast, mediator_arg_ast)

Specs

calc_full_arg(Macro.t, Macro.t) :: Macro.t

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__}]}
convert_to_cols(list)

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}]}]}
decorate_arg(arg)

Specs

decorate_arg({Macro.t, non_neg_integer}) :: {Macro.t, Macro.t}

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}]}}
decorate_args(args_ast)

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}]}]}
is_operator_token(a)
parse_fn_name_and_args(short_head)

Parse a function call into its parts: name and arguments