From 68d5662a4d21728219c78f5ff66917d6420f14f0 Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Fri, 9 May 2025 12:10:58 -0500 Subject: [PATCH 1/3] Remove duplicate entries and assets/ folder in .build file in HTML formatter Previously the generated `.build` file would contain these entries: ... assets assets/kv-observer.png assets/logo.png assets/logo.png ... --- lib/ex_doc/formatter/html.ex | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/ex_doc/formatter/html.ex b/lib/ex_doc/formatter/html.ex index 44acccb1a..83a53f286 100644 --- a/lib/ex_doc/formatter/html.ex +++ b/lib/ex_doc/formatter/html.ex @@ -32,20 +32,23 @@ defmodule ExDoc.Formatter.HTML do } all_files = - search_data ++ - static_files ++ - generate_sidebar_items(nodes_map, extras, config) ++ - generate_api_reference(nodes_map, config) ++ - generate_extras(extras, config) ++ - generate_favicon(@assets_dir, config) ++ - generate_logo(@assets_dir, config) ++ - generate_search(config) ++ - generate_not_found(config) ++ - generate_list(nodes_map.modules, config) ++ - generate_list(nodes_map.tasks, config) ++ - generate_redirects(config, ".html") - - generate_build(Enum.sort(all_files), build) + (search_data ++ + static_files ++ + generate_sidebar_items(nodes_map, extras, config) ++ + generate_api_reference(nodes_map, config) ++ + generate_extras(extras, config) ++ + generate_favicon(@assets_dir, config) ++ + generate_logo(@assets_dir, config) ++ + generate_search(config) ++ + generate_not_found(config) ++ + generate_list(nodes_map.modules, config) ++ + generate_list(nodes_map.tasks, config) ++ + generate_redirects(config, ".html")) + |> Enum.uniq() + |> Kernel.--([@assets_dir]) + |> Enum.sort() + + generate_build(all_files, build) config.output |> Path.join("index.html") |> Path.relative_to_cwd() end From 7fc7e4c48af9bb8cb1efaa0179c1940999f129ed Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Fri, 9 May 2025 20:01:20 -0500 Subject: [PATCH 2/3] Remove any directories in .build file in HTML formatter --- lib/ex_doc/formatter/html.ex | 45 ++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/lib/ex_doc/formatter/html.ex b/lib/ex_doc/formatter/html.ex index 83a53f286..bf6fee33f 100644 --- a/lib/ex_doc/formatter/html.ex +++ b/lib/ex_doc/formatter/html.ex @@ -32,21 +32,18 @@ defmodule ExDoc.Formatter.HTML do } all_files = - (search_data ++ - static_files ++ - generate_sidebar_items(nodes_map, extras, config) ++ - generate_api_reference(nodes_map, config) ++ - generate_extras(extras, config) ++ - generate_favicon(@assets_dir, config) ++ - generate_logo(@assets_dir, config) ++ - generate_search(config) ++ - generate_not_found(config) ++ - generate_list(nodes_map.modules, config) ++ - generate_list(nodes_map.tasks, config) ++ - generate_redirects(config, ".html")) - |> Enum.uniq() - |> Kernel.--([@assets_dir]) - |> Enum.sort() + search_data ++ + static_files ++ + generate_sidebar_items(nodes_map, extras, config) ++ + generate_api_reference(nodes_map, config) ++ + generate_extras(extras, config) ++ + generate_favicon(@assets_dir, config) ++ + generate_logo(@assets_dir, config) ++ + generate_search(config) ++ + generate_not_found(config) ++ + generate_list(nodes_map.modules, config) ++ + generate_list(nodes_map.tasks, config) ++ + generate_redirects(config, ".html") generate_build(all_files, build) config.output |> Path.join("index.html") |> Path.relative_to_cwd() @@ -160,7 +157,12 @@ defmodule ExDoc.Formatter.HTML do end defp generate_build(files, build) do - entries = Enum.map(files, &[&1, "\n"]) + entries = + files + |> Enum.uniq() + |> Enum.sort() + |> Enum.map(&[&1, "\n"]) + File.write!(build, entries) end @@ -278,13 +280,22 @@ defmodule ExDoc.Formatter.HTML do Enum.map(dir_or_files, fn {name, content} -> target = Path.join(target_dir, name) File.write(target, content) + Path.relative_to(target, output) end) is_binary(dir_or_files) and File.dir?(dir_or_files) -> dir_or_files |> File.cp_r!(target_dir, dereference_symlinks: true) - |> Enum.map(&Path.relative_to(&1, output)) + |> Enum.reduce([], fn path, acc -> + # Omit directories in .build file + if File.dir?(path) do + acc + else + [Path.relative_to(path, output) | acc] + end + end) + |> Enum.reverse() is_binary(dir_or_files) -> [] From a8a9254c1fc663f95919c437b3ede1d2a7775cdf Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Fri, 9 May 2025 20:16:21 -0500 Subject: [PATCH 3/3] Remove unintentional change --- lib/ex_doc/formatter/html.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/ex_doc/formatter/html.ex b/lib/ex_doc/formatter/html.ex index bf6fee33f..2afe6e0fe 100644 --- a/lib/ex_doc/formatter/html.ex +++ b/lib/ex_doc/formatter/html.ex @@ -280,7 +280,6 @@ defmodule ExDoc.Formatter.HTML do Enum.map(dir_or_files, fn {name, content} -> target = Path.join(target_dir, name) File.write(target, content) - Path.relative_to(target, output) end)