Skip to content

Commit 973c217

Browse files
committed
markdown: conditionally copy assets to target dir
1 parent 5a0c8ce commit 973c217

2 files changed

Lines changed: 37 additions & 1 deletion

File tree

lib/ex_doc/formatter/markdown.ex

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,15 @@ defmodule ExDoc.Formatter.MARKDOWN do
66
def run(config, project_nodes, extras) when is_map(config) do
77
File.mkdir_p!(config.output)
88

9+
static_files =
10+
if Enum.all?(config.assets, fn {_k, target_dir} ->
11+
config.output |> Path.join(target_dir) |> File.exists?()
12+
end) do
13+
[]
14+
else
15+
ExDoc.Formatter.copy_assets(config.assets, config.output)
16+
end
17+
918
{modules, tasks} =
1019
project_nodes
1120
|> Enum.filter(&(&1.source_format == "text/markdown"))
@@ -16,7 +25,8 @@ defmodule ExDoc.Formatter.MARKDOWN do
1625
generate_api_reference(config, modules, tasks) ++
1726
generate_extras(config, extras) ++
1827
generate_list(config, modules) ++
19-
generate_list(config, tasks)
28+
generate_list(config, tasks) ++
29+
static_files
2030

2131
entrypoint = config.output |> Path.join("llms.txt") |> Path.relative_to_cwd()
2232
%{entrypoint: entrypoint, build: List.flatten(all_files)}

test/ex_doc/formatter/markdown_test.exs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,4 +288,30 @@ defmodule ExDoc.Formatter.MarkdownTest do
288288
"*Consult [api-reference.md](api-reference.md) for complete listing*"
289289
end
290290
end
291+
292+
describe "assets" do
293+
test "copies assets from source", %{tmp_dir: tmp_dir} = context do
294+
dir_name = "test/tmp/markdown_assets/hello"
295+
File.mkdir_p!(dir_name)
296+
dir_name |> Path.join("world") |> File.touch!()
297+
298+
config = config(context, assets: %{dir_name => "assets"})
299+
300+
generate(config)
301+
302+
assert File.regular?(tmp_dir <> "/assets/world")
303+
after
304+
File.rm_rf!("test/tmp/markdown_assets")
305+
end
306+
307+
test "does not override previous work from other formatters", %{tmp_dir: tmp_dir} = context do
308+
dir_name = Path.join(tmp_dir, "assets")
309+
File.mkdir!(dir_name)
310+
info = File.stat!(dir_name)
311+
config = config(context, assets: %{"test/tmp/markdown_assets/hello" => "assets"})
312+
generate(config)
313+
314+
assert File.stat!(dir_name) == info
315+
end
316+
end
291317
end

0 commit comments

Comments
 (0)