View Source Recode.Context (Recode v0.6.5)
This module provides functions to traverse an AST with a %Context{}
.
Examples
The following example shows the %Context{}
for the definition of
MyApp.Bar.bar/1
.
iex> alias Rewrite.Source
...> alias Recode.Context
...> """
...> defmodule MyApp.Foo do
...> def foo, do: :foo
...> end
...>
...> defmodule MyApp.Bar do
...> alias MyApp.Foo
...>
...> def bar(x) do
...> {Foo.foo(), x}
...> end
...> end
...> """
...> |> Source.Ex.from_string()
...> |> Source.get(:quoted)
...> |> Zipper.zip()
...> |> Context.traverse(nil, fn
...> zipper, context, nil ->
...> case context.definition do
...> {{:def, :bar, 1}, _meta} -> {zipper, context, context}
...> _def -> {zipper, context, nil}
...> end
...> zipper, context, acc ->
...> {zipper, context, acc}
...> end)
...> |> elem(1) |> Map.put(:node, nil)
%Context{
node: nil,
aliases: [
{MyApp.Foo,
[
trailing_comments: [],
leading_comments: [],
end_of_expression: [newlines: 2, line: 6, column: 18],
line: 6,
column: 3
], nil}
],
assigns: %{},
definition:
{{:def, :bar, 1},
[
trailing_comments: [],
leading_comments: [],
do: [line: 8, column: 14],
end: [line: 10, column: 3],
line: 8,
column: 3
]},
imports: [],
module:
{MyApp.Bar,
[
trailing_comments: [],
leading_comments: [],
do: [line: 5, column: 21],
end: [line: 11, column: 1],
line: 5,
column: 1
]},
requirements: [],
usages: []
}
Summary
Functions
Assigns the given value
under key
to the context
.
Merges the given map
to the assigns of the context
.
Returns true if definition
satisfies the assumption.
Returns true
if @doc
is available and not set to @doc false
.
Returns true
if @doc false
.
Expands the module alias for the given mfa
.
Returns true
if an impl
is available.
Returns the current module of a context.
Returns true
if @moduledoc
is available and not set to @moduledoc false
.
Returns true
if @moduledoc false
.
Returns true
if a spec
is available.
Traverses the given zipper
and applies fun
on each node.
Traverses the given zipper
with an acc
and applies fun
on each node.
Types
@type t() :: %Recode.Context{ aliases: list(), assigns: map(), definition: term(), doc: {term() | nil, Macro.t()} | nil, impl: {term() | nil, Macro.t()} | nil, imports: list(), module: term() | nil, moduledoc: Macro.t() | nil, node: term() | nil, requirements: list(), spec: {term() | nil, Macro.t()} | nil, usages: list() }
@type zipper() :: Sourceror.Zipper.t()
Functions
Assigns the given value
under key
to the context
.
Merges the given map
to the assigns of the context
.
Returns true if definition
satisfies the assumption.
Returns true
if @doc
is available and not set to @doc false
.
Returns true
if @doc false
.
Expands the module alias for the given mfa
.
Returns true
if an impl
is available.
Returns the current module of a context.
Returns true
if @moduledoc
is available and not set to @moduledoc false
.
Returns true
if @moduledoc false
.
Returns true
if a spec
is available.
Traverses the given zipper
and applies fun
on each node.
The fun
gets the current zipper
and context
as arguments.
@spec traverse(zipper(), acc, fun) :: {zipper(), acc} when acc: term(), fun: (zipper(), t(), acc -> {zipper(), t(), acc})
Traverses the given zipper
with an acc
and applies fun
on each node.