Current section
Files
Jump to
Current section
Files
lib/documenter/phoenix/controller.ex
defmodule APIDoc.PhoenixControllerDocumenter do
@moduledoc ~S"""
"""
alias APIDoc.{Doc.Endpoint, Documenter.Helper}
defmacro __using__(_) do
quote do
unquote(Helper.register())
@on_definition {APIDoc.PhoenixControllerDocumenter, :on_def}
@before_compile APIDoc.PhoenixControllerDocumenter
end
end
@doc false
@spec on_def(term, :def | :defp, atom, term, term, term) :: term
# credo:disable-for-next-line
def on_def(env, :def, name, [_, _], _guards, _body) do
if api = Module.delete_attribute(env.module, :api) do
Helper.generate_api_doc(env.module, api, name, ["?"])
end
end
# credo:disable-for-next-line
def on_def(_env, _type, _name, _args, _guards, _body), do: :ignore
defmacro __before_compile__(env) do
doc =
env.module
|> Module.delete_attribute(:generated_api_doc)
|> Map.new(fn e = %Endpoint{method: m} -> {m, %{e | method: :"?"}} end)
quote do
@doc false
@spec __controller_doc__ :: %{atom => APIDoc.Doc.Endpoint.t()}
def __controller_doc__, do: unquote(Macro.escape(doc))
end
end
end