Skip to content

Commit 495025f

Browse files
committed
refactor: unify output directory handling across formatters
- Simplified the output directory structure for EPUB, HTML, and Markdown formatters by removing redundant build directory paths. - Updated the `run` function in each formatter to directly use the output path for building. - Enhanced the `update_output_for_formatter` function to streamline output path management in the documentation generation process. - Adjusted related test cases to reflect the new output structure.
1 parent 22357bf commit 495025f

File tree

5 files changed

+21
-10
lines changed

5 files changed

+21
-10
lines changed

lib/ex_doc/formatter/epub.ex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ defmodule ExDoc.Formatter.EPUB do
1111
"""
1212
@spec run([ExDoc.ModuleNode.t()], [ExDoc.ModuleNode.t()], ExDoc.Config.t()) :: String.t()
1313
def run(project_nodes, filtered_modules, config) when is_map(config) do
14-
original_output = Path.expand(config.output)
14+
# Store original output for build file before normalize_config creates temp path
15+
original_output = config.output
1516
config = normalize_config(config)
16-
build_dir = Path.join(original_output, ".build/epub")
17-
build = Path.join(build_dir, ".build")
17+
18+
build = Path.join(original_output, ".build")
1819
output_setup(build, config)
1920
File.mkdir_p!(Path.join(config.output, "OEBPS"))
2021

lib/ex_doc/formatter/html.ex

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ defmodule ExDoc.Formatter.HTML do
1515
config = normalize_config(config)
1616
config = %{config | output: Path.expand(config.output)}
1717

18-
build_dir = Path.join(config.output, ".build/html")
19-
build = Path.join(build_dir, ".build")
18+
build = Path.join(config.output, ".build")
2019
output_setup(build, config)
2120

2221
project_nodes = Formatter.render_all(project_nodes, filtered_modules, ".html", config, [])

lib/ex_doc/formatter/markdown.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ defmodule ExDoc.Formatter.Markdown do
1313
Utils.unset_warned()
1414

1515
config = normalize_config(config)
16-
build_dir = Path.join(config.output, ".build/markdown")
17-
build = Path.join(build_dir, ".build")
16+
17+
build = Path.join(config.output, ".build")
1818
output_setup(build, config)
1919

2020
extras = Formatter.build_extras(config, ".md")

lib/mix/tasks/docs.ex

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,12 @@ defmodule Mix.Tasks.Docs do
605605

606606
results =
607607
for formatter <- options[:formatters] do
608-
index = generator.(project, version, Keyword.put(options, :formatter, formatter))
608+
formatter_options =
609+
options
610+
|> Keyword.put(:formatter, formatter)
611+
|> update_output_for_formatter(formatter)
612+
613+
index = generator.(project, version, formatter_options)
609614
Mix.shell().info([:green, "View #{inspect(formatter)} docs at #{inspect(index)}"])
610615

611616
if cli_opts[:open] do
@@ -651,6 +656,12 @@ defmodule Mix.Tasks.Docs do
651656
Keyword.put(options, :formatters, formatters)
652657
end
653658

659+
defp update_output_for_formatter(options, formatter) do
660+
output = options[:output] || "doc"
661+
formatter_output = Path.join(output, formatter)
662+
Keyword.put(options, :output, formatter_output)
663+
end
664+
654665
defp get_docs_opts(config) do
655666
docs = config[:docs]
656667

test/ex_doc/formatter/html_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -967,7 +967,7 @@ defmodule ExDoc.Formatter.HTMLTest do
967967
generate_docs(config)
968968

969969
# Verify necessary files in .build
970-
content = File.read!(tmp_dir <> "/html/.build/html/.build")
970+
content = File.read!(tmp_dir <> "/html/.build")
971971
assert content =~ ~r(^readme\.html$)m
972972
assert content =~ ~r(^api-reference\.html$)m
973973
assert content =~ ~r(^dist/sidebar_items-[\w]{8}\.js$)m
@@ -995,7 +995,7 @@ defmodule ExDoc.Formatter.HTMLTest do
995995
File.touch!(keep)
996996
generate_docs(config)
997997
assert File.exists?(keep)
998-
content = File.read!(tmp_dir <> "/html/.build/html/.build")
998+
content = File.read!(tmp_dir <> "/html/.build")
999999
refute content =~ ~r{keep}
10001000
end
10011001
end

0 commit comments

Comments
 (0)