Current section
Files
Jump to
Current section
Files
lib/ex_doc_anki.ex
defmodule ExDocAnki do
@moduledoc """
Generate Anki flashcards from Elixir project documentation using ExDoc.
"""
@compile {:no_warn_undefined, ExDoc}
@doc """
Generate Anki CSV file for the given project.
## Options
* `:project` - project name (required)
* `:version` - project version (required)
* `:source_beam` - path to compiled beam files (required, can be a list)
* `:output` - output directory, defaults to "doc"
* `:source_url` - URL to source code repository
* `:formatters` - list of formatter modules, defaults to `[ExDocAnki.Formatter]`
## Example
ExDocAnki.generate(
project: "MyApp",
version: "1.0.0",
source_beam: "_build/dev/lib/my_app/ebin"
)
"""
@spec generate(keyword()) :: String.t()
def generate(opts) do
project = Keyword.fetch!(opts, :project)
version = Keyword.fetch!(opts, :version)
source_beam = Keyword.fetch!(opts, :source_beam)
source_beams = if is_list(source_beam), do: source_beam, else: [source_beam]
options =
opts
|> Keyword.put(:source_beam, source_beams)
|> Keyword.put_new(:output, "doc")
|> Keyword.put_new(:formatters, [ExDocAnki.Formatter])
{:ok, _} = start_ex_doc_refs()
[result | _] = ExDoc.generate(project, version, source_beams, options)
result.entrypoint
end
defp start_ex_doc_refs do
if :ets.whereis(ExDoc.Refs) == :undefined do
GenServer.start_link(ExDoc.Refs, :ok, name: ExDoc.Refs)
else
{:ok, :already_started}
end
end
end