View Source Recode.Context (Recode v0.5.0)
This module provides functions to traverse an AST with a %Context{}
.
examples
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.from_string()
...> |> Source.ast()
...> |> 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: []
}
Link to this section 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.
Link to this section 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.zipper()
Link to this section 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.