Current section

Files

Jump to
moar lib code.ex
Raw

lib/code.ex

defmodule Moar.Code do
# @related [test](test/code_test.exs)
@moduledoc "Code-related functions"
@doc "Fetches `module`'s @moduledoc as a markdown string"
@spec fetch_docs_as_markdown(module()) :: nil | binary()
def fetch_docs_as_markdown(module) do
case Code.fetch_docs(module) do
{:error, :module_not_found} ->
nil
{_, _, _, "text/markdown", %{"en" => doc}, _, _} ->
doc
_ ->
nil
end
end
@doc "Fetches `module`.`function`'s @doc as a markdown string"
@spec fetch_docs_as_markdown(module(), fun()) :: nil | binary()
def fetch_docs_as_markdown(module, function) do
case Code.fetch_docs(module) do
{:error, :module_not_found} ->
nil
{_, _, _, "text/markdown", _, _, docs} ->
Enum.find_value(docs, fn
{{:function, ^function, _}, _, _, %{"en" => markdown}, %{}} -> markdown
_ -> nil
end)
end
end
end