From 214b76f7632d2e88da6a74a7dd23e032cf17d6c1 Mon Sep 17 00:00:00 2001 From: Badlop Date: Wed, 16 Jul 2025 20:35:25 +0200 Subject: [PATCH] ejabberd_doc: Document commands tags for modules --- src/ejabberd_doc.erl | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/ejabberd_doc.erl b/src/ejabberd_doc.erl index ce030c221..a54c460f0 100644 --- a/src/ejabberd_doc.erl +++ b/src/ejabberd_doc.erl @@ -24,6 +24,7 @@ %% API -export([man/0, man/1, have_a2x/0]). +-include("ejabberd_commands.hrl"). -include("translate.hrl"). %%%=================================================================== @@ -46,7 +47,8 @@ man(Lang) -> DocOpts = maps:get(opts, Map, []), Example = maps:get(example, Map, []), Note = maps:get(note, Map, []), - {[{M, Descr, DocOpts, #{example => Example, note => Note}}|Mods], SubMods}; + Apitags = get_module_apitags(M), + {[{M, Descr, DocOpts, #{example => Example, note => Note, apitags => Apitags}}|Mods], SubMods}; #{opts := DocOpts} -> {ParentMod, Backend} = strip_backend_suffix(M), {Mods, dict:append(ParentMod, {M, Backend, DocOpts}, SubMods)}; @@ -113,7 +115,8 @@ man(Lang) -> format_versions(Lang, Example) ++ [io_lib:nl()] ++ tr_multi(Lang, Descr) ++ [io_lib:nl()] ++ opts_to_man(Lang, [{M, '', DocOpts}|Backends]) ++ - format_example(0, Lang, Example) + format_example(0, Lang, Example) ++ [io_lib:nl()] ++ + format_apitags(Lang, Example) end, lists:keysort(1, ModDoc1)), ListenOptions = [io_lib:nl(), @@ -190,6 +193,34 @@ format_versions(_Lang, #{note := Note}) when Note /= [] -> format_versions(_, _) -> []. +%% @format-begin +get_module_apitags(M) -> + AllCommands = ejabberd_commands:get_commands_definition(), + Tags = [C#ejabberd_commands.tags || C <- AllCommands, C#ejabberd_commands.module == M], + TagsClean = + lists:sort( + misc:lists_uniq( + lists:flatten(Tags))), + TagsStrings = [atom_to_list(C) || C <- TagsClean], + TagFiltering = + fun ("internal") -> + false; + ([$v | Rest]) -> + {error, no_integer} == string:to_integer(Rest); + (_) -> + true + end, + TagsFiltered = lists:filter(TagFiltering, TagsStrings), + TagsUrls = + [["_`../../developer/ejabberd-api/admin-tags.md#", C, "|", C, "`_"] || C <- TagsFiltered], + lists:join(", ", TagsUrls). + +format_apitags(_Lang, #{apitags := TagsString}) when TagsString /= "" -> + ["**API Tags:** ", TagsString]; +format_apitags(_, _) -> + []. +%% @format-end + format_desc(Lang, #{desc := Desc}) -> tr_multi(Lang, Desc).