View Source Recode.Context (Recode v0.7.3)
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
...>
...> code = """
...> 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
...> """
...>
...> context =
...> code
...> |> 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)
...>
...> context |> Map.from_struct() |> Map.keys() |> Enum.sort()
[
:aliases,
:assigns,
:definition,
:doc,
:impl,
:imports,
:module,
:moduledoc,
:node,
:requirements,
:spec,
: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.