View Source Recode.AST (Recode v0.1.0)
This module provides functions to manipulate the AST.
Link to this section Summary
Functions
Returns the infos from an AST representing an alias expression.
Concatinates the aliases of an :__aliases__ tuple.
Returns the newlines value from meta[:end_of_expression], or nil.
Returns a mfa-tuple for the given .-call.
Converts AST representing a name to a string.
Puts the given value newlines under the key nevlines in
meta[:end_of_expression].
Update a function call.
Updates the AST representing a definition.
Update a dotted function call.
Updates a spec.
Link to this section Functions
Returns the infos from an AST representing an alias expression.
The function returns 3-tuple containing the alias, the multi part and the
:as.
examples
Examples
iex> ast = quote do
...> alias Foo.Bar
...> end
iex> alias_info(ast)
{Foo.Bar, [], nil}
iex> ast = quote do
...> alias Foo.{Bar, Baz}
...> end
iex> alias_info(ast)
{Foo, [Bar, Baz], nil}
iex> ast = quote do
...> alias Foo, as: Baz
...> end
iex> alias_info(ast)
{Foo, [], Baz}
@spec aliases_concat({:__aliases__, Macro.metadata(), [atom()]}) :: module()
Concatinates the aliases of an :__aliases__ tuple.
examples
Examples
iex> aliases_concat({:__aliases__, [], [:Alpha, :Bravo]})
Alpha.Bravo
Returns the newlines value from meta[:end_of_expression], or nil.
@spec mfa({{:., keyword(), list()}, Macro.metadata(), Macro.t()}) :: {module(), atom(), non_neg_integer()}
Returns a mfa-tuple for the given .-call.
Converts AST representing a name to a string.
This function suppresses the prfix "Elixir.".
examples
Examples
iex> name([Recode, AST])
"Recode.AST"
iex> name(Recode.AST)
"Recode.AST"
Puts the given value newlines under the key nevlines in
meta[:end_of_expression].
Update a function call.
The keyword list updates can have the keys name, meta and args.
examples
Examples
iex> ast = quote do
...> foo(x)
...> end
iex> update_call(ast, name: :bar)
{:bar, [], [{:x, [], Recode.ASTTest}]}
Updates the AST representing a definition.
The keyword list updates can have the keys name, meta and args.
examples
Examples
iex> ast = quote do
...> def foo(x), do: x
...> end
iex> update_definition(ast, name: :bar)
{:def, [context: Recode.ASTTest, import: Kernel],
[
{:bar, [context: Recode.ASTTest], [{:x, [], Recode.ASTTest}]},
[do: {:x, [], Recode.ASTTest}]
]}
iex> update_definition(ast, meta: [])
{:def, [],
[
{:foo, [context: Recode.ASTTest], [{:x, [], Recode.ASTTest}]},
[do: {:x, [], Recode.ASTTest}]
]}
iex> update_definition(ast, args: [{:y, [], Recode.ASTTest}], meta: [])
{:def, [],
[
{:foo, [context: Recode.ASTTest], [{:y, [], Recode.ASTTest}]},
[do: {:x, [], Recode.ASTTest}]
]}
Update a dotted function call.
examples
Examples
iex> ast = quote do
...> Foo.foo(x)
...> end
iex> update_dot_call(ast, name: :bar)
{{:., [], [{:__aliases__, [alias: false], [:Foo]}, :bar]}, [], [{:x, [], Recode.ASTTest}]}
Updates a spec.
The keyword list updates can have the keys name, meta, args and
return.
examples
Examples
iex> ast = quote do
...> @spec foo(integer()) :: integer()
...> end
{:@, [context: Recode.ASTTest, import: Kernel],
[
{:spec, [context: Recode.ASTTest],
[{:"::", [], [{:foo, [], [{:integer, [], []}]}, {:integer, [], []}]}]}
]}
iex> update_spec(ast, meta: [], name: :bar, return: {:term, [], []})
{:@, [],
[
{:spec, [context: Recode.ASTTest],
[{:"::", [], [{:bar, [], [{:integer, [], []}]}, {:term, [], []}]}]}
]}