Current section

Files

Jump to
zigler lib zig doc retriever.ex
Raw

lib/zig/doc/retriever.ex

defmodule Zig.Doc.Retriever do
@moduledoc """
decides what features should be documented on `zig doc`.
may be in flux.
"""
require ExDoc.FunctionNode
alias Zig.Doc.Parser
@odd_modules [:elixir_bootstrap]
def docs_from_dir(source_beam, config) do
source_dirs = if config.project == "zigler" do
# set the directory to include zig/... instead of what
# would normally be a source directory for a standard
# project.
[__DIR__
|> Path.join("../../../priv/beam")
|> Path.expand]
else
:erlang.loaded()
|> Enum.filter(&function_exported?(&1, :__info__, 1))
|> Enum.reject(&(&1 in @odd_modules))
|> Enum.flat_map(&(&1.__info__(:attributes)[:zig_src_dir] || []))
|> Enum.uniq
end
elixir_docs = ExDoc.Retriever.docs_from_dir(source_beam, config)
zig_docs = Enum.flat_map(source_dirs, &Parser.docs_from_dir(&1, config))
elixir_docs ++ zig_docs
end
end