Packages
ex_doc
0.8.0
0.40.3
0.40.2
0.40.1
0.40.0
0.39.3
0.39.2
0.39.1
0.39.0
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.3
0.37.2
0.37.1
0.37.0
0.37.0-rc.2
0.37.0-rc.1
0.37.0-rc.0
0.36.1
0.36.0
0.35.1
0.35.0
0.34.2
0.34.1
0.34.0
0.33.0
0.32.2
0.32.1
0.32.0
0.31.2
0.31.1
0.31.0
0.30.9
0.30.8
0.30.7
0.30.6
0.30.5
0.30.4
0.30.3
0.30.2
0.30.1
0.30.0
0.29.4
0.29.3
0.29.2
0.29.1
0.29.0
0.28.6
0.28.5
0.28.4
0.28.3
0.28.2
0.28.1
0.28.0
0.27.3
0.27.2
0.27.1
0.27.0
0.26.0
0.25.5
0.25.4
0.25.3
0.25.2
0.25.1
0.25.0
0.24.2
0.24.1
0.24.0
0.23.0
0.22.6
0.22.5
0.22.4
0.22.2
0.22.1
0.22.0
0.21.3
0.21.2
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.3
0.19.2
0.19.1
0.19.0
0.19.0-rc
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
retired
0.17.1
0.17.0
retired
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.2
0.13.1
0.13.0
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
ExDoc is a documentation generation tool for Elixir
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/docs.ex
defmodule Mix.Tasks.Docs do
use Mix.Task
@shortdoc "Generate documentation for the project"
@recursive true
@moduledoc """
Uses ExDoc to generate a static web page from the docstrings extracted from
all of the project's modules.
## Command line options
* `--output`, `-o` - output directory for the generated docs; default: `"doc"`
## Configuration
The task uses the project's `:name` key if defined, otherwise it will use the
`:app` key as a substitute.
It also uses the `:version` key and `:source_url` from the project's configuration.
The following options should be put under the `:docs` key in your project's
main configuration. The docs options should be a keyword list or a function
returning a keyword list that will be lazily executed.
* `:output` - output directory for the generated docs; default: "doc".
May be overriden by command line argument.
* `:readme` - string denoting the source file for a project README
(e.g., "README.md"); default: `nil` (no README created).
* `:formatter` - doc formatter to use; default: "html".
* `:source_root` - path to the source code root directory; default: "." (current directory).
* `:source_beam` - path to the beam directory; default: mix's compile path.
* `:source_url_pattern` - public URL of the project.
Derived from project's `:source_url` if not present.
* `:source_ref` - the branch/commit/tag used for source link inference.
Ignored if `:source_url_pattern` is provided; default: master.
* `:main` - main page of the documentation. It may be a module or a
generated page, like "overview" or "README";
"""
@doc false
def run(args, config \\ Mix.Project.config, generator \\ &ExDoc.generate_docs/3) do
Mix.Task.run "compile"
{cli_opts, args, _} = OptionParser.parse(args, aliases: [o: :output],
switches: [output: :string])
if args != [] do
Mix.raise "Extraneous arguments on the command line"
end
project = (config[:name] || config[:app]) |> to_string
version = config[:version] || "dev"
options = Keyword.merge(get_docs_opts(config), cli_opts)
if source_url = config[:source_url] do
options = Keyword.put(options, :source_url, source_url)
end
options =
cond do
is_nil(options[:main]) ->
Keyword.put(options, :main, "overview")
is_atom(options[:main]) ->
Keyword.update!(options, :main, &inspect/1)
is_binary(options[:main]) ->
options
end
options = Keyword.put_new(options, :source_beam, Mix.Project.compile_path)
index = generator.(project, version, options)
log(index)
index
end
defp log(index) do
Mix.shell.info [:green, "Docs successfully generated."]
Mix.shell.info [:green, "View them at #{inspect index}."]
end
defp get_docs_opts(config) do
docs = config[:docs]
cond do
is_function(docs, 0) -> docs.()
is_nil(docs) -> []
true -> docs
end
end
end