diff options
author | lain <lain@soykaf.club> | 2020-07-27 16:35:47 +0000 |
---|---|---|
committer | lain <lain@soykaf.club> | 2020-07-27 16:35:47 +0000 |
commit | e1a1c8e7de5e10fa64d168dc5d35a80b96767395 (patch) | |
tree | c0057448e323c730bea2c76cecf9efb85ef14181 /lib/pleroma/docs/generator.ex | |
parent | 4a6389316dac53c1ca2ec36d160690476d881185 (diff) | |
parent | 2a3abfd326f0cbb588dfe66a23e9783be3038a5e (diff) | |
download | pleroma-e1a1c8e7de5e10fa64d168dc5d35a80b96767395.tar.gz |
Merge branch 'develop' into 'cleanup/masto_fe-default_settings'
# Conflicts:
# lib/pleroma/web/views/masto_fe_view.ex
Diffstat (limited to 'lib/pleroma/docs/generator.ex')
-rw-r--r-- | lib/pleroma/docs/generator.ex | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/lib/pleroma/docs/generator.ex b/lib/pleroma/docs/generator.ex index e0fc8cd02..a671a6278 100644 --- a/lib/pleroma/docs/generator.ex +++ b/lib/pleroma/docs/generator.ex @@ -6,16 +6,21 @@ defmodule Pleroma.Docs.Generator do implementation.process(descriptions) end - @spec list_modules_in_dir(String.t(), String.t()) :: [module()] - def list_modules_in_dir(dir, start) do - with {:ok, files} <- File.ls(dir) do - files - |> Enum.filter(&String.ends_with?(&1, ".ex")) - |> Enum.map(fn filename -> - module = filename |> String.trim_trailing(".ex") |> Macro.camelize() - String.to_atom(start <> module) - end) - end + @spec list_behaviour_implementations(behaviour :: module()) :: [module()] + def list_behaviour_implementations(behaviour) do + :code.all_loaded() + |> Enum.filter(fn {module, _} -> + # This shouldn't be needed as all modules are expected to have module_info/1, + # but in test enviroments some transient modules `:elixir_compiler_XX` + # are loaded for some reason (where XX is a random integer). + if function_exported?(module, :module_info, 1) do + module.module_info(:attributes) + |> Keyword.get_values(:behaviour) + |> List.flatten() + |> Enum.member?(behaviour) + end + end) + |> Enum.map(fn {module, _} -> module end) end @doc """ @@ -87,6 +92,12 @@ defmodule Pleroma.Docs.Generator do else: string end + defp format_suggestions({:list_behaviour_implementations, behaviour}) do + behaviour + |> list_behaviour_implementations() + |> format_suggestions() + end + defp format_suggestions([]), do: [] defp format_suggestions([suggestion | tail]) do |