diff --git a/lib/ex_doc.ex b/lib/ex_doc.ex index 9591ffed8..4c6f1d6bd 100644 --- a/lib/ex_doc.ex +++ b/lib/ex_doc.ex @@ -9,6 +9,19 @@ defmodule ExDoc do You can find more details about these options in the `ExDoc.CLI` module. """ + + @default %{ + :formatter => "html", + :output => "./doc", + :source_ref => "master", + :retriever => ExDoc.Retriever, + } + + @spec default(atom) :: term + def default(field) do + Map.fetch!(@default, field) + end + defstruct [ assets: nil, canonical: nil, @@ -16,15 +29,16 @@ defmodule ExDoc do extra_section: nil, extras: [], filter_prefix: nil, - formatter: "html", + formatter: @default.formatter, formatter_opts: [], homepage_url: nil, logo: nil, main: nil, - output: "doc", + output: @default.output, project: nil, - retriever: ExDoc.Retriever, + retriever: @default.retriever, source_beam: nil, + source_ref: @default.source_ref, source_root: nil, source_url: nil, source_url_pattern: nil, @@ -48,6 +62,7 @@ defmodule ExDoc do project: nil | String.t, retriever: :atom, source_beam: nil | String.t, + source_ref: nil | String.t, source_root: nil | String.t, source_url: nil | String.t, source_url_pattern: nil | String.t, @@ -114,7 +129,7 @@ defmodule ExDoc do # Helpers defp normalize_options(options) do - pattern = options[:source_url_pattern] || guess_url(options[:source_url], options[:source_ref] || "master") + pattern = options[:source_url_pattern] || guess_url(options[:source_url], options[:source_ref] || ExDoc.Config.default(:source_ref)) options = Keyword.put(options, :source_url_pattern, pattern) if is_bitstring(options[:output]) do diff --git a/lib/mix/tasks/docs.ex b/lib/mix/tasks/docs.ex index 3b1f1fea1..ca2cfe1cd 100644 --- a/lib/mix/tasks/docs.ex +++ b/lib/mix/tasks/docs.ex @@ -138,7 +138,7 @@ defmodule Mix.Tasks.Docs do defp get_formatters(options) do case Keyword.get_values(options, :formatter) do - [] -> options[:formatters] || ["html"] + [] -> options[:formatters] || [ExDoc.Config.default(:formatter)] values -> values end end diff --git a/test/ex_doc_test.exs b/test/ex_doc_test.exs index aff051510..482883dde 100644 --- a/test/ex_doc_test.exs +++ b/test/ex_doc_test.exs @@ -49,6 +49,20 @@ defmodule ExDocTest do fn -> ExDoc.generate_docs project, version, options end end + test "default configuration" do + assert Map.get(%ExDoc.Config{}, :formatter) == "html" + assert ExDoc.Config.default(:formatter) == "html" + + assert Map.get(%ExDoc.Config{}, :output) == "./doc" + assert ExDoc.Config.default(:output) == "./doc" + + assert Map.get(%ExDoc.Config{}, :source_ref) == "master" + assert ExDoc.Config.default(:source_ref) == "master" + + assert Map.get(%ExDoc.Config{}, :retriever) == ExDoc.Retriever + assert ExDoc.Config.default(:retriever) == ExDoc.Retriever + end + test "version" do assert ExDoc.version =~ ~r{\d+\.\d+\.\d+} end